New Architecture¶
The New Architecture is enabled by default in Expo SDK 53+. It replaces the legacy bridge with a faster, synchronous communication layer between JavaScript and native code.
Documentation¶
Full guide: https://docs.expo.dev/guides/new-architecture/
What Changed¶
- JSI (JavaScript Interface) — Direct synchronous calls between JS and native
- Fabric — New rendering system with concurrent features
- TurboModules — Lazy-loaded native modules with type safety
SDK Compatibility¶
| SDK Version | New Architecture Status |
|---|---|
| SDK 55+ | Only option — Legacy Architecture fully dropped |
| SDK 54 | Default, last SDK to support Legacy Architecture |
| SDK 53 | Enabled by default |
| SDK 52 | Opt-in via app.json |
| SDK 51- | Experimental |
Configuration¶
SDK 55+¶
The newArchEnabled config option has been removed. The New Architecture is the only option — no opt-out is possible. Remove any newArchEnabled field from your app.json.
SDK 53-54¶
New Architecture is enabled by default. To disable (SDK 54 is the last SDK where this works):
Expo Go¶
Expo Go only supports the New Architecture as of SDK 53. Apps using the old architecture must use development builds.
Common Migration Issues¶
Native Module Compatibility¶
Some older native modules may not support the New Architecture. Check:
- Module documentation for New Architecture support
- GitHub issues for compatibility discussions
- Consider alternatives if module is unmaintained
The interop layer remains part of React Native, so Legacy Architecture libraries should still work through it.
Reanimated¶
React Native Reanimated v4 (SDK 54+) only supports the New Architecture and requires react-native-worklets:
If you need Legacy Architecture support on SDK 54, you can stay on Reanimated v3 — see https://github.com/expo/fyi/blob/main/expo-54-reanimated.md
Layout Animations¶
Some layout animations behave differently. Test thoroughly after upgrading.
Verifying New Architecture¶
Check if New Architecture is active:
Verify from the command line: bunx xcobra expo eval "_IS_FABRIC" -> true
Troubleshooting¶
- Clear caches —
npx expo start --clear - Clean prebuild —
npx expo prebuild --clean - Check native modules — Ensure all dependencies support New Architecture
- Review console warnings — Legacy modules log compatibility warnings
- Autolinking resolution — In SDK 55+ monorepos,
autolinkingModuleResolutionis enabled by default and helps resolve duplicate native modules