patterntypescriptreact-nativeMajor
React Native New Architecture: Enabling Fabric and TurboModules
Viewed 0 times
React Native 0.73+ (opt-in), 0.76+ (default)
fabricturbomodulesJSInew architecturebridgeperformancesynchronous
Error Messages
Problem
The old React Native bridge is asynchronous and serializes all JS-to-native communication through JSON, causing performance bottlenecks and preventing synchronous access to native APIs.
Solution
Enable the New Architecture (Fabric renderer + TurboModules) in your app. In React Native 0.73+ it is opt-in; in 0.76+ it is the default. For Expo, set
newArchEnabled: true in app.json. For bare RN, set newArchEnabled=true in gradle.properties and enable Fabric in AppDelegate for iOS.Why
Fabric uses JSI (JavaScript Interface) for synchronous, direct JS-to-native calls without serialization. TurboModules load lazily and share the same JSI layer. This eliminates the bridge bottleneck for rendering and native module calls.
Gotchas
- Not all third-party libraries support the New Architecture; check react-native-directory.dev for compatibility
- The interop layer in RN 0.74+ lets old-arch libraries run on new arch, but with caveats
- Fabric changes the way ref forwarding and layout effects work in some edge cases
- CodegenNativeComponent and CodegenNativeCommands are required for custom Fabric components
Code Snippets
Enable New Architecture in Expo
// app.json (Expo)
{
"expo": {
"newArchEnabled": true
}
}Enable New Architecture in bare Android
# android/gradle.properties
newArchEnabled=trueRevisions (0)
No revisions yet.