Janzer says the team is testing the new architecture in production at Facebook to find bugs before releasing it to the open-source community. The plan has three phases: a type-safe native module system, a new renderer, and a faster initialization path. At the time of the talk, the team expected the first pieces to reach developers in early 2020.
The New React Native
Speaker
Emily Janzer, a member of Facebook’s React Native core team, outlines React Native’s planned architecture changes at React Native EU 2019.
The new native module system, called TurboModules, aims to improve type safety, reduce call overhead, and initialize modules only when needed. Fabric is a C++ rewrite of the UI layer that supports synchronous layout and measurement, which Janzer says could improve native integration and components such as TextInput and ScrollView. Both were being tested at Facebook, with releases planned for 2020.
React Native’s existing bridge sends messages asynchronously in batches and serializes objects as JSON. Janzer says this adds overhead, especially for large objects. The new architecture uses JavaScript Interface, or JSI, to let C++ and JavaScript call functions and access JavaScript objects more directly.
The planned initialization path removes bridge setup and other work the new architecture no longer needs. Janzer says lazy native module initialization had improved startup by about 400 milliseconds at Facebook. The team also planned to move some setup, including timer and error handling, from JavaScript into C++ so it could happen before JavaScript runs.
Janzer says the architecture aims to improve native interop, performance, reliability, and type safety, while supporting future capabilities such as Concurrent Mode. Developers need not wait for it to improve their apps: she recommends fetching data in parallel with startup, enabling Hermes on Android, and using Flow or TypeScript. She also asks developers to share feedback, especially about brownfield apps and other platforms.
Takeaways
- Treat TurboModules, Fabric, and the new initialization path as separate phases with different release timelines.
- Initialize native modules lazily to avoid startup work for modules an app does not use.
- Keep network requests running in parallel with app startup to improve time to interaction.
- Use Hermes on Android and add Flow or TypeScript to prepare for stronger JavaScript-to-native type contracts.
- Share unusual integration constraints early, especially for brownfield apps and nonstandard platforms.
Mentioned in this talk
Search inside this talk
What was claimed 11
- role atEmily Janzer is member of the React Native core team at
Meta
“I'm a member of the React Native core team at Facebook.”
YouTube Unverified1 source· Talk
- previously atEmily Janzer previously at
Meta
“Last year, I joined the React Native core team at Facebook”
YouTube Unverified1 source· Talk
- previously atEmily Janzer previously at Oculus
“From there, I went to Oculus”
YouTube Unverified1 source· Talk
- featureReact Native: The new architecture is planned in three phases: TurboModules, Fabric, and a faster initialization path.
“The new architecture is going to come to you in three phases.”
YouTube Unverified1 source· Talk
- featureTurboModules: Provides improved type safety between JavaScript and native code, with lazy native module initialization.
“This offers improved type safety between JavaScript and native code.”
YouTube Unverified1 source· Talk
- featureFabric: C++ renderer that enables native interop and synchronous layout and measurement APIs.
“This is a C++ rewrite of React Native's UI layer.”
YouTube Unverified1 source· Talk
- featureReact Native bridge: Communication is asynchronous, batched, and serialized; objects are sent as JSON.
“All communication through the bridge is asynchronous, batched, and serialized”
YouTube Unverified1 source· Talk
- usesJSI uses
Hermes Agent
“it works for JavaScriptCore and Hermes”
YouTube Unverified1 source· Talk
- usesJSI uses JavaScript
“it works for JavaScriptCore and Hermes”
YouTube Unverified1 source· Talk
- metricReact Native: Enabling lazy initialization for native modules improved startup by around 400 milliseconds at Facebook.
“we saw around a 400-millisecond improvement”
YouTube Unverified1 source· Talk
- feature
Hermes Agent: Recommended as an option to improve performance in Android apps.
“enable Hermes in your Android app”
YouTube Unverified1 source· Talk





