Skip to content
useffect.sh
Book 30 min with a senior
Architecture

New Architecture

The rewrite of React Native internals (Fabric, Turbo Modules, JSI), on by default since 0.76 and the only architecture since 0.82.

Definition

The New Architecture is the rewrite of React Native’s internals that replaces the asynchronous bridge (serialized JSON messages between JavaScript and native) with JSI, a C++ interface where JavaScript holds direct references to native objects. It bundles three pieces: Fabric, the renderer written in C++; Turbo Modules, native modules loaded on demand; and Codegen, which generates the glue code from TypeScript specs. Available as an experimental opt-in since React Native 0.68, it became the default in 0.76 (October 2024) and the only architecture in 0.82 (October 2025), where the newArchEnabled=false and RCT_NEW_ARCH_ENABLED=0 flags are ignored. It comes up on every React Native upgrade, every time you pick a native library, and whenever a crash points at a native view. In practice it brings synchronous layout, React’s concurrent features, and a much cheaper native call.

In a real app

In a project, the architecture setting lives in two places: newArchEnabled in android/gradle.properties and the RCT_NEW_ARCH_ENABLED variable read by the Podfile. On an Expo project managed with prebuild, the newArchEnabled key in app.json used to drive both files. Since 0.82 these settings no longer disable anything, but you still find them in projects that have been through several upgrades, and they mislead people about what is actually running.

The real migration work is in dependencies. A library written against the bridge goes through the interop layer, which the React Native team keeps around “for the foreseeable future” with no removal date. It runs, but it hides bugs: dropped events, measure returning zeros, untyped props arriving in the wrong shape. The useful tool is still reactnative.directory (opens in a new window) with its New Architecture filter, then the changelog of every native dependency. React Native 0.81 and Expo SDK 54 are the last versions that still accept the Legacy Architecture; that is the recommended stop to migrate on before going higher.

What I check in an audit: the React Native version, whether the project is on react-native-reanimated 4 (which requires the New Architecture) or 3, and the Legacy Architecture warnings in the Metro logs on first launch. From 0.84, Legacy Architecture code is no longer compiled into iOS builds, which cuts binary size and build time. An app still blocked by an unsupported library has to replace it, contact the maintainer, or stay on 0.81 knowingly.

Our services on this

Sources

All 35 glossary terms

One of these is blocking your app?

30 minutes with a senior to look at the problem in your code. Free.