Skip to content
chornous.dev

Type two or more letters. Esc closes.

Index of sheets
Theme

Sheet 03 · Writing

All notes

React Native 0.84 makes Hermes V1 the default and stops compiling iOS core from source

React Native 0.84 shipped on February 11, 2026 with Hermes V1 on iOS and Android, precompiled iOS core binaries, Legacy Architecture code stripped from iOS builds and a Node.js 22.11 minimum. The post also lists the opt-out switches and a short set of breaking changes.

Pl. 54 · device drawing generated from the slug “react-native-0-84-hermes-v1-default”

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:

Hermes V1 vs. Hermes on Expensify, from the React Native 0.82 post
MetricAndroid, low-end deviceiOS
Bundle load time3.2% faster9% faster
Total TTI7.6% faster2.5% faster
Content TTI7.2% faster7.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:

  1. 0.82, October 2025

    The New Architecture becomes the only runtime. The app ignores the opt-out flags.
  2. 0.83, December 2025

    The experimental RCT_REMOVE_LEGACY_ARCH flag lands.
  3. 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_ACCESS crash in ImageResponseObserverCoordinator by wrapping observers in reference-counted pointers. That changes declarations in the RCTImage observer API, and the post names react-native-svg as a library that may need an update.
  • C++: JSBigString implements jsi::Buffer itself. BigStringBuffer survives as a deprecated shim.
  • The in-app Element Inspector lost its Perf and Network tabs. React Native DevTools replaces them.
  • The team deprecated XHRInterceptor and WebSocketInterceptor in favor of the CDP Network domain. 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

  1. Upgrade Node in CI and on dev machines to 22.11 or later before you touch React Native.
  2. Grep native code for the 14 removed Android classes, BigStringBuffer and the network interceptors.
  3. Time a clean iOS build on 0.83 and 0.84 with the same runner, and record both numbers in the upgrade PR.
  4. 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