The React Native team released 0.82 on October 8, 2025 and titled the post "A New Era." Vitali Zaidman and Nicola Corti from Meta wrote it with Gabriel Donadel Dall'Agnol and Alan Hughes from Expo. It is the first version with no Legacy Architecture runtime. Set newArchEnabled=false in gradle.properties or install pods with RCT_NEW_ARCH_ENABLED=0, and the app ignores you.
The release took more than 868 commits from 93 contributors. With 0.82 out, 0.79.x dropped out of support.
The switch is gone, the code is not
React Native 0.76 made the New Architecture the default a year earlier. In 0.82 it is the only option. The team removed no Legacy Architecture APIs in this release, to limit breaking changes, and scheduled removal to start in 0.83 under RFC 929. The interop layers stay for the foreseeable future, so a library that supports both architectures keeps working.
That gives you a narrow path if you still run the old architecture:
- Upgrade to React Native 0.81 or Expo SDK 54. Those are the last versions that allow the Legacy Architecture.
- Turn on the New Architecture there, and fix what breaks.
- Move to 0.82.
If a third-party library blocks step 2, the team asks you to contact its maintainers. If React Native core blocks it, file an issue. Step 2 is where your schedule goes, so budget for it.
Hermes V1, opt-in
Hermes V1 brings compiler and VM changes. In 0.82 it is experimental, and you must build React Native from source to use it. The team measured it on Expensify:
| 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 |
To try it, force the compiler version, then enable it per platform:
{
"overrides": { "hermes-compiler": "250829098.0.1" }
}
# android/gradle.properties gets hermesV1Enabled=true
# iOS, without RCT_USE_PREBUILT_RNCORE:
RCT_HERMES_V1_ENABLED=1 bundle exec pod install
Android also needs a dependencySubstitution block in settings.gradle that points at the source build. Check the running engine from JavaScript:
HermesInternal.getRuntimeProperties()["OSS Release Version"];
// "250829098.0.1" on Hermes V1
V1 leaves out JS-to-native compilation, once called Static Hermes, and the JIT that Meta showed at React Native EU 2023. Four months later, 0.84 made V1 the default.
Refs return DOM-like nodes
Refs to native components now return nodes with web-style APIs. You can walk the tree with parentNode, children and childNodes, measure with getBoundingClientRect(), and look up a view with ownerDocument.getElementById(). Text creates leaf text nodes, and each root gets a document node. The old measure and setNativeProps methods still work.
useEffect(() => {
const el = ref.current;
const box = el.getBoundingClientRect();
const header = el.ownerDocument.getElementById("header");
}, []);
If you share layout code with a web app, you can drop part of the platform branching.
A faster debug build for Android
The new debugOptimized build type turns on C++ optimizations and keeps React Native DevTools for JavaScript debugging. You lose native C++ debuggers, which still work in debug. In the team's animation sample, debug ran at about 20 FPS and debugOptimized at about 60.
npx react-native run-android --mode debugOptimized
npx expo run:android --variant debugOptimized
The team backported it to 0.81 and Expo SDK 54, so you can use it before you upgrade.
A breaking change that floods your error tracker
Until 0.82, a bug made React Native swallow uncaught promise rejections. They now go through the error path added in 0.81 and raise console.error. Rejections your app swallowed on 0.81 will land in your crash reporter the day you ship. The team warns about the surge. Tell whoever watches alerts before the release goes out, and triage the new reports as old bugs.
Other changes:
Appearance.setColorScheme()no longer acceptsnullorundefined. Pass'unspecified'to reset.ReactNativeFeatureFlagsmoved undersrc/private.- Android removed
JSONArgumentsand stubbedMessageQueueThreadPerfStats. Gradle moved from 8.x to 9.0.0. - C++ removed the compatibility headers for
CallbackWrapper.handLongLivedObject.h. Include them fromreact/bridging/.
React syncs to 19.1.1. Owner stacks now work even with @babel/plugin-transform-function-name, and useDeferredValue with startTransition inside Suspense stops showing the fallback by mistake. Web Performance APIs such as PerformanceObserver, performance.mark and long task entries ship in canary only.
This week
- Run your app on 0.81 with the New Architecture on. List the libraries that fail, with an owner and a fix date.
- Switch local Android development to
debugOptimized. It works on 0.81 too. - Grep for
setColorScheme(null)and the removed C++ headers. - Warn your on-call rotation about the promise rejection reports, and tag them so they don't hide new regressions.
Expo users get 0.82 through expo@canary. Expo SDK 55 targets 0.83.
Volodymyr Chornous

