The React Native team released 0.84 on February 11, 2026. Alex Hunt and Alan Lee from Meta wrote the post with Christian Falch and Gabriel Donadel Dall'Agnol from Expo. Four changes lead it: Hermes V1 runs by default on iOS and Android, iOS installs pull precompiled core binaries, iOS builds drop Legacy Architecture code, and Node.js 22.11 becomes the floor.
The release counts more than 650 commits from 95 contributors. With 0.84 out, 0.81.x left the support window.
Hermes V1 moves from experiment to default
Hermes V1 arrived as an opt-in experiment in 0.82, and you had to build React Native from source to try it. In 0.84 you get it with no config. If your app already runs Hermes, the default since 0.70, the team says you need no migration.
The 0.84 post gives no new benchmarks. The 0.82 post measured the experimental build on Expensify, a large production app:
| Metric | Android, low-end device | iOS |
|---|---|---|
| Bundle load time | 3.2% faster | 9% faster |
| Total TTI | 7.6% faster | 2.5% faster |
| Content TTI | 7.2% faster | 7.5% faster |
Total TTI runs from bundle load to the first interactive screen. Content TTI runs from a component's first render to the moment it responds. The team warns that gains depend on the app, so treat these as a direction and run your own trace.
Hermes V1 still leaves out two features people associate with it: JS-to-native compilation, the project once called Static Hermes, and the JIT shown at React Native EU 2023.
The opt-out, if a regression shows up
You pin the old compiler and tell each platform to skip V1. Pick the override key for your package manager:
{
"overrides": { "hermes-compiler": "0.15.0" }
}
Yarn uses "resolutions" with the same entry, and pnpm nests it under "pnpm": { "overrides": ... }. Then switch off each platform:
# iOS: build core from source without V1
RCT_HERMES_V1_ENABLED=0 RCT_USE_PREBUILT_RNCORE=0 bundle exec pod install
# android/gradle.properties
hermesV1Enabled=false
Android also needs the build-from-source setup from the contributing docs. Keep the opt-out on a branch with an owner and a date. Remove the opt-out once a Hermes release fixes the regression behind it.
Precompiled iOS core
Precompiled binaries were opt-in before 0.84. Now pod install downloads .xcframework builds of React Native core, so a clean build skips compiling core from source. The team says this cuts iOS build times by a large margin but publishes no number. Measure your own CI: record a clean build on 0.83, then on 0.84, on the same runner image.
You lose that speedup in two cases. Opting out of Hermes V1 on iOS sets RCT_USE_PREBUILT_RNCORE=0. Bringing back Legacy Architecture code, covered below, sets the same flag. If you patch React Native core with patch-package, check that your patches still apply. Prebuilt binaries ignore changes to native sources you don't compile.
Legacy Architecture leaves iOS builds
The removal follows a three-release plan from RFC 929:
0.82, October 2025
The New Architecture becomes the only runtime. The app ignores the opt-out flags.0.83, December 2025
The experimental RCT_REMOVE_LEGACY_ARCH flag lands.0.84, February 2026
iOS builds strip Legacy Architecture code by default. The interop layer stays.
If your app runs on the New Architecture, the team expects no breakage, and you get a smaller binary. To restore the old code on iOS you rebuild from source:
RCT_USE_PREBUILT_RNCORE=0 RCT_REMOVE_LEGACY_ARCH=0 bundle exec pod install
Android lost 14 classes, among them LazyReactPackage, CxxModuleWrapper, CallbackImpl, BridgeDevSupportManager and the two LayoutAnimation classes. Search your android/ folder and your patched libraries for those names before you bump.
Breaking changes outside the headline
- iOS: The team fixed a rare
EXC_BAD_ACCESScrash inImageResponseObserverCoordinatorby wrapping observers in reference-counted pointers. That changes declarations in theRCTImageobserver API, and the post namesreact-native-svgas a library that may need an update. - C++:
JSBigStringimplementsjsi::Bufferitself.BigStringBuffersurvives as a deprecated shim. - The in-app Element Inspector lost its Perf and Network tabs. React Native DevTools replaces them.
- The team deprecated
XHRInterceptorandWebSocketInterceptorin favor of the CDPNetworkdomain. If your in-house network logger hooks those classes, plan the rewrite now.
Smaller additions worth a look
React syncs to 19.2.3, and the ESLint config supports ESLint 9 flat config. Image reads HEIC and HEIF. Android gets onKeyDown and onKeyUp for hardware keyboards and TV remotes. URL gains hash, host and pathname, and URLSearchParams gains get, set and delete, which lets you drop a polyfill or two. Text with onPress now reports accessibilityRole="link" to screen readers without extra props.
This week
- Upgrade Node in CI and on dev machines to 22.11 or later before you touch React Native.
- Grep native code for the 14 removed Android classes,
BigStringBufferand the network interceptors. - Time a clean iOS build on 0.83 and 0.84 with the same runner, and record both numbers in the upgrade PR.
- Trace startup on your slowest supported Android device before and after. Keep the Hermes opt-out ready, and use it only with a trace that justifies it.
Expo users wait one cycle: 0.84 ships in expo@canary, and Expo SDK 56 targets React Native 0.85. The Upgrade Helper shows the template diff, and the community upgrade-react-native skill on skills.sh drafts the changes for CLI projects.
Volodymyr Chornous

