Skip to content

chore(0.84): prepare stable 0.84.0 with React Native 0.84.1 - #3031

Open
Saad Najmi (Saadnajmi) wants to merge 75 commits into
microsoft:0.84-mergefrom
Saadnajmi:0.84/release
Open

Saad Najmi (Saadnajmi) wants to merge 75 commits into
microsoft:0.84-mergefrom
Saadnajmi:0.84/release

Conversation

@Saadnajmi

@Saadnajmi Saad Najmi (Saadnajmi) commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator

Current release stack

Depends on #3030. RNM 0.84.0 with RN 0.84.1; retarget to the stable release branch before release integration.

Validation and backups

The branch-specific repaired source passed hardened immutable installation, constraints, and its complete release-helper selection. The selected 18-head packet records 1,406 passing helper tests. Exact source-tree equivalence is used for rewritten endpoints where applicable; the two changed linear RC checkpoints were tested separately.

Native/API evidence retains its recorded scope. The SwiftPM and RNTester repairs have six focused native build passes. Public stable versions and runtime/API contents were preserved except for the independently reviewed SwiftPM destination repair where applicable.

Public-registry lock correction passed all 18 hosted generation, hardened immutable, constraints, and metadata-audit jobs in run 35769816507. Only equivalent executable-path spelling changes are permitted; dependency versions, checksums, and ranges are unchanged. The previous functional test results remain applicable to this metadata-only correction. Fresh GitHub CI and review remain required. Previous heads are preserved on the same repository under backup/pre-ci-repair-20260922/<original-branch> and backup/pre-public-registry-20260922/<original-branch>; local complete-history bundles were verified as well.

The 0.87 PR sequence is one first-parent path: #3037#3104#3105#3106#3100#3101#3107. The redundant #3102/#3103 reviews are consolidated into #3105.

This section supersedes earlier stack order, source identity, and validation-status notes below.


Summary

Merge the pinned React Native 0.84-stable tip 5d4505ca714ae20c34a6dcdf892e951c5b5f971f (0.84.1) into the exact clean 0.84 root 2777fb703e8416d44eff7f5b5d29b498040a8883.

This is optimistic preview infrastructure targeting the temporary 0.84-merge anchor. After #3030 lands, maintainers will create microsoft/0.84-stable at the landed 0.84 result and retarget this PR to 0.84-stable. This PR does not create microsoft/0.84-stable and does not merge the stable branch into mainline.

Topology and release metadata

  • Mechanical merge: 7664e96c3848ce7c185ebe2a24901a6dfebeed37
  • Merge parents, in order: 2777fb703e8416d44eff7f5b5d29b498040a8883, 5d4505ca714ae20c34a6dcdf892e951c5b5f971f
  • Upstream stable-only commits: 58
  • Initial conflicts: 34 paths / 85 hunks / 170 terms
  • React Native peer: 0.84.1
  • macOS release seed: 0.84.0-rc0
  • Changesets patch plan output: 0.84.0

The documented Nx release-plan command was run, but Nx version plans are no longer enabled and it created no plan. The equivalent current Changesets plan is committed instead; existing Changesets automation will materialize package changelogs in the version-bump PR.

Reviewer-focused decisions

Area Upstream intent Fork requirement Resolution
Hermes V1 default Make V1 default unless explicitly disabled Preserve stable-version mapping and macOS artifacts Use pinned V1 artifacts by default, retain mapping for legacy mode, and align the resolver's default semantics
Hermes SwiftPM binary Ship iOS/visionOS universal binary plus standalone macOS framework SwiftPM macOS needs a linked macOS slice Recompose the pinned xcframework with the standalone macOS framework; validated the resulting macOS prebuild
iOS prebuild Resolve latest-v1 Stable release must remain reproducible Validation pins 250829098.0.9; package and CocoaPods metadata use the same stable pin
Codegen package build Build generated lib output Fork's absolute workspace path must transpile Flow Match package-relative paths before Babel transpilation
Xcode CI default Stable branch moved to Xcode 16.4 Fork already requires Xcode 26.2 Keep the newer fork toolchain
Package metadata Upstream packages moved to 0.84.1 Fork publishes macOS packages separately Keep fork identities, align internal RN packages to 0.84.1, and seed public macOS packages at 0.84.0-rc0

Layered follow-ups

  1. 822f45001fe6a6b729a6540906044d72030a23b0 — macOS-compatible Hermes V1 defaults and resolver behavior
  2. 5f8d15da898fd3606bd580a1ae69653e0a689353 — codegen absolute-path transpilation fix
  3. 17563481913d877091b7bcc8786b23c78915d0a2 — release manifests, peer dependency, Changesets plan, generated snapshots/types, and lockfile
  4. 886c5369ab6fe11eaa5016f58cbcd6379efc55b3 — regenerated CocoaPods lock

Conflict inventory

Mechanical (28 paths / 44 hunks)
  • package.json
  • packages/assets/package.json
  • packages/babel-plugin-codegen/package.json
  • packages/community-cli-plugin/package.json
  • packages/core-cli-utils/package.json
  • packages/debugger-frontend/package.json
  • packages/dev-middleware/package.json
  • packages/eslint-config-react-native/package.json
  • packages/eslint-plugin-react-native/package.json
  • packages/eslint-plugin-specs/package.json
  • packages/gradle-plugin/package.json
  • packages/metro-config/package.json
  • packages/new-app-screen/package.json
  • packages/normalize-color/package.json
  • packages/polyfills/package.json
  • packages/react-native/package.json
  • packages/react-native/sdks/.hermesv1version
  • packages/react-native/sdks/.hermesversion
  • packages/react-native-babel-preset/package.json
  • packages/react-native-babel-transformer/package.json
  • packages/react-native-codegen/package.json
  • packages/react-native-compatibility-check/package.json
  • packages/react-native-popup-menu-android/package.json
  • packages/rn-tester/package.json
  • packages/typescript-config/package.json
  • packages/virtualized-lists/package.json
  • private/helloworld/package.json
  • private/react-native-codegen-typescript-test/package.json
New iOS/RN feature to macOS port (2 paths / 2 hunks)
  • packages/react-native/scripts/ios-prebuild/hermes.js
  • packages/react-native/sdks/hermes-engine/hermes-engine.podspec
Generated artifacts (3 paths / 38 hunks)
  • packages/rn-tester/Podfile.lock
  • packages/rn-tester/RNTesterPods.xcodeproj/project.pbxproj
  • yarn.lock
Independent combine (1 path / 1 hunk)
  • .github/actions/setup-xcode/action.yml

Validation

  • Exact refs, merge parent order/count, ancestry, object connectivity, trailers, marker scan, and clean Jujutsu DAG
  • Immutable Yarn install and constraints
  • 321 JS suites / 8,293 tests / 2,688 snapshots
  • Flow, ESLint, Prettier, and generated type/API build
  • A fresh Git clone of exact exported head 886c5369 stayed clean through immutable install, constraints, codegen build/test, lint, and format; the committed and working build.js blob remained c7ec8621
  • Changesets plan validation against 0.84-merge
  • CocoaPods install with Hermes V1 250829098.0.9
  • Swift package dump
  • RNTester static builds: macOS, iOS simulator, visionOS simulator
  • React Native prebuild slices: iOS, iOS simulator, macOS, visionOS, visionOS simulator
  • Hermes resolver download/recompose path, including a macOS slice in the pinned xcframework

Rough command sequence

jj git clone --no-colocate --remote upstream --branch 0.84-merge ...
jj git fetch --remote origin --branch 0.84-merge
jj git fetch --remote facebook --branch 0.84-stable
jj new <root> <stable-tip>
jj resolve --tool :ours
yarn install
yarn nx release plan --message 'Sync to upstream React Native 0.84.x release' --only-touched=false patch
yarn constraints --fix
yarn changeset status --since=upstream/0.84-merge
bundle exec pod install
yarn test-ci && yarn flow-check && yarn lint && yarn format-check && yarn build-types
node scripts/ios-prebuild.js ...
.ado/scripts/xcodebuild.sh ...
jj git push --bookmark 0.84/release --remote origin

Novel conflict classes and lessons

  • Default inversion: V1 is disabled only by =0; preserving the old opt-in test silently selects legacy Hermes.
  • Cross-platform binary composition: the pinned upstream universal xcframework needs its standalone macOS framework recomposed for SwiftPM.
  • Generated build portability: absolute workspace paths must be normalized before relative glob matching.
  • Non-colocated tooling: Git-based release checks require a temporary exported HEAD/index; these refs are removed before publication.
  • Whole-file conflict selection: selecting a side resolves the complete file, so upstream non-conflicting edits must be reconstructed from provenance.

Final CI follow-up

This branch receives only these independently reviewed follow-up paths:

  • packages/react-native/scripts/ios-prebuild/__tests__/hermes-test.js

The complete 16-head batch passed 92 recorded validation commands, including branch-specific API revalidation/generated TypeScript, full formatting checks, and combined targeted suites where applicable. Native changes are limited to the reviewed #3033 destination guards (also present in stable 0.85) and #3104's sidecar-copy correction (already present in its descendants). Exact source equivalence preserves earlier native results elsewhere. The public-registry lockfiles and package manifests remain byte-identical.

Previous heads are backed up at backup/pre-ci-followup-20260922/<original-branch> on their source repository. Fresh current-head CI remains required. The one-first-parent 0.87 sequence is preserved.

Alex Hunt (huntie) and others added 30 commits January 5, 2026 17:39
#publish-packages-to-npm&next
#publish-packages-to-npm&next
Summary:
Pull Request resolved: react#55113

Reverts react#55038

Dropping v20 (still in LTS) causes friction with Expo's LTS policy, so we're restoring support for v20.19.

Changelog: [General][Added] Revert react#55038

Reviewed By: shwanton

Differential Revision: D90467161

fbshipit-source-id: d876cf7869f11e04058f88239f553704e0706514
Summary:
This change makes Hermes V1 the default engine for React Native for both platforms. This change needs to land before the branch cut of react native 0.84

bypass-github-export-checks

## Changelog:
[iOS][Changed] - Make Hermes V1 the default engine for iOS

Pull Request resolved: react#54989

Test Plan:
1. Run `bundle exec pod install` and verified that Hermes V1 is used when building from source
<img height="480" alt="Simulator Screenshot - iPhone 17 Pro - 2025-12-29 at 11 28 44" src="https://github.com/user-attachments/assets/0889f16c-f2ee-4a0e-9a4d-529dd82c8283" />
2. Run `prebuild-ios -s` and verified that the scripts downloads the Hermes V1 tarball
<img width="831" height="324" alt="Screenshot 2025-12-29 at 10 37 53" src="https://github.com/user-attachments/assets/9a60565e-1e13-4967-a4a4-dd079e6b040f" />
3. GHA and nightlies

Reviewed By: vzaidman, cortinico, huntie

Differential Revision: D89881943

Pulled By: cipolleschi

fbshipit-source-id: 958b6d31bd4230ba4a5c7fee2bffc19e03dcbc89
…t#55072)

Summary:
Syncs `getAndroidResourceIdentifier` implementations between [`/community-cli-plugin/src/commands/bundle/assetPathUtils.js`](https://github.com/facebook/react-native/blob/main/packages/community-cli-plugin/src/commands/bundle/assetPathUtils.js#L72-L79) and [`/assets/path-support.js`](https://github.com/facebook/react-native/blob/main/packages/assets/path-support.js#L77-L85).

Ideally, the former should use `react-native/assets-registry` directly so we don't need to sync.

## Changelog:

[ANDROID] [FIXED] - Handle `unstable_path` query param in asset URLs

Pull Request resolved: react#55072

Test Plan: n/a

Reviewed By: javache

Differential Revision: D90267467

Pulled By: Abbondanzo

fbshipit-source-id: f4eb0053c6af02b67f3fb493ae76e290d6b354e5
Summary:
Use of `debug` was added in react#54978 but never declared. This causes `react-native config` to fail in pnpm setups.

## Changelog:

[GENERAL] [FIXED] - Fixed missing dependency breaking `react-native config` in pnpm setups

Pull Request resolved: react#55145

Test Plan: `yarn` in `xplat/js` didn't change any files

Reviewed By: cortinico

Differential Revision: D90589051

Pulled By: vzaidman

fbshipit-source-id: b53a46a9b034d385e64a72f85d29e63da02522d7
#publish-packages-to-npm&next
Summary:
So currently RN app is broken with following error if the `SWIFT_OBJC_INTEROP_MODE` is changed to `objcxx`.
<img width="567" height="112" alt="image" src="https://github.com/user-attachments/assets/7a8e8cf4-a8a3-42d3-a65f-9943cbf296f2" />

### Why do we need this interop ?
So currently any pod that uses `objcxx` as interop (For example Any library created with Nitro modules) cannot be  imported into App directly .
<img width="548" height="59" alt="image" src="https://github.com/user-attachments/assets/b6d9fb7a-00df-4bf2-aa0c-c61fb3a6538f" />

We are using this in a nitro module where we override bundle url . And nitro-player for jellify app where we create a new scene for carplay . Currently we are using hacky stuffs like creating two pods to address this but the solution is messy.
### RCA for failing
<img width="633" height="155" alt="image" src="https://github.com/user-attachments/assets/7eb811cc-d1ba-410d-902c-4217bfc47b40" />

Currently glog imports some things inside namespace which is not allowed.

### Fix
This patches creates a module map that uses textual headers to prevent submodule creation. We can still keep using the old interop by default . Users who need to do this can change the interop themselves

bypass-github-export-checks

## Changelog:

<!-- Help reviewers and the release process by writing your own changelog entry.

Pick one each for the category and type tags:

[ANDROID|GENERAL|IOS|INTERNAL] [BREAKING|ADDED|CHANGED|DEPRECATED|REMOVED|FIXED|SECURITY] - Message

For more details, see:
https://reactnative.dev/contributing/changelogs-in-pull-requests
-->

[IOS][FIXED] - Fix glog namespace issue to allow using interop mode of objcxx

Pull Request resolved: react#55117

Test Plan:
To test this I forked Nightly repo and ran against all the libraries and nothing seems to fail
With objcxx interop :- https://github.com/riteshshukla04/nightly-tests/actions/runs/20908210967
with Objc interop :- https://github.com/riteshshukla04/nightly-tests/actions/runs/20902452877

Reviewed By: cortinico

Differential Revision: D90503097

Pulled By: cipolleschi

fbshipit-source-id: c1b46e901ec1515998428e1f3ca46f9d48d17bd3
Changelog: [Internal]
Summary:
Pull Request resolved: react#55157

Changelog: [Internal]

At the moment, Fantom doesn't propagate the Hermes V1 opt-in to the React Native build, which causes the code that should be gated by compile-time flags to be compiled. Since Hermes V1 differs in some cases, the headers there are missing.

This diff adds the opt-in propagation, so the code can be correctly compiled out.

Reviewed By: cortinico

Differential Revision: D90674696

fbshipit-source-id: d2adb131af4588e745c023703a893d0ecaaaee01
Summary:
Pull Request resolved: react#55202

Changelog: [Internal]

After changing Hermes V1 to be the default engine, Fantom tests started failing. This was due to a combination of changes, one of them being the change of default value for `HERMES_ENABLE_DEBUGGER`. In case of legacy Hermes it was enabled by default, while for Hermes V1 it's disabled by default.

Fantom didn't explicitly set this flag, but the debug build of RN (which Fantom performs) requires it to be enabled. This diff explicitly sets this flag to true for Fantom builds.

Reviewed By: cipolleschi, cortinico

Differential Revision: D90849881

fbshipit-source-id: 17f8393872eacef26f927f50aaf364644d9b94d7
#publish-packages-to-npm&next
Summary:
Fixes react#55243

Fixes an issue where iOS codegen fails when the React Native project is located inside a hidden folder (a folder starting with `.`, such as `~/.jenkins/workspace/` or `/.buildkite/builds/`).

The issue was reported for React Native 0.79.4, but the bug affects all subsequent versions including the current main branch.

The `findFilesWithExtension` function was checking if the entire absolute path contained `/.` to skip hidden folders. This caused false positives when the project workspace itself was under a hidden folder, resulting in all files being incorrectly filtered out and codegen producing empty results.

The fix changes the check to only look at the current filename being iterated (`file.startsWith('.')`) rather than the full path, while preserving the existing `.pnpm` exception.

## Changelog:

[iOS] [Fixed] - Fix codegen failing when project is inside a hidden folder

Pull Request resolved: react#55259

Test Plan:
Added unit tests for `findFilesWithExtension` that verify:
 - Hidden files/folders are still correctly skipped
 - The `.pnpm` folder exception still works
 - Projects under hidden folders (e.g., `/.jenkins/workspace/`) now work correctly

Run tests with:
```bash
yarn jest packages/react-native/scripts/codegen/__tests__/generate-artifacts-executor-test.js --testNamePattern="findFilesWithExtension"
```

All 3 tests pass. The critical test `works when project is under a hidden folder` fails without the fix (returns empty array) and passes with the fix.

### Example of the codegen failing on a dotted path 🔴
<img width="970" height="609" alt="Screenshot 2026-01-21 at 09 54 21" src="https://github.com/user-attachments/assets/247576c4-ce06-4656-93d7-06e880e779e3" />

- [`pod install` logs on Github Actions](https://github.com/dinisnunes1/.react-native-codegen-dotted-paths/actions/runs/21204831248/job/60998728238)
- [example based on the Reproducer repo](dinisnunes1/.react-native-codegen-dotted-paths@main...test-dotted-path-codegen)

### Example of the codegen crawling working on a dotted path - with the fix ✅
<img width="938" height="700" alt="Screenshot 2026-01-21 at 10 15 56" src="https://github.com/user-attachments/assets/f36ef04d-e5ca-454e-907f-9af1fcd0a6d9" />

- [`pod install` logs on Github Actions](https://github.com/dinisnunes1/.react-native-codegen-dotted-paths/actions/runs/21205599303/job/61001213856)
- [example based on the Reproducer repo - branch with RN `0.83.1` patched](dinisnunes1/.react-native-codegen-dotted-paths@main...test-codegen-fix)

Reviewed By: cipolleschi

Differential Revision: D91122133

Pulled By: cortinico

fbshipit-source-id: 762564c874d5081521811e3a20d850a89861b99f
Summary:
Pull Request resolved: react#54946

## Summary:
Adds support for `overflow`, `position`, `zIndex`, and `direction` layout props to be passed as `AnimatedProp` to the animation backend.

The `PropName` enum is changed to the class enum because the `OVERFLOW` keyword is already defined in `math.h` when building with `XCode`.

## Changelog:
[General][Added] - Added support for `overflow`, `position`, `zIndex`, and `direction` props to the AnimationBackend.

Reviewed By: zeyap

Differential Revision: D89543930

fbshipit-source-id: ff7f5f19c4b641b0c5121dfd7417ffd15b4c72cd
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
There may be pipelines that require an authorized user to comment /azp run to run.

sanajmi and others added 11 commits September 21, 2026 01:16
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Preserve the approved Changesets output, native versions, codegen snapshot, and CocoaPods lock. Apply the reviewed changelog correction where applicable.
Preserve validated per-branch source and corrected stack dependencies.
@Saadnajmi Saad Najmi (Saadnajmi) changed the title chore(0.84): merge up to 0.84.1 from upstream branch chore(0.84): prepare stable 0.84.0 with React Native 0.84.1 Sep 22, 2026
Preserve package versions and the linear stack; change only equivalent executable-path metadata.
Preserve package versions and the linear stack; change only equivalent executable-path metadata.
Preserve package versions and the linear stack; change only equivalent executable-path metadata.
Apply the independently reviewed branch-specific CI follow-up while preserving public-registry locks and the linear stack.
Apply the independently reviewed branch-specific CI follow-up while preserving public-registry locks and the linear stack.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.