React Native 0.78 - React 19 and more
Key Points
- React 19 available in RN 0.78
- Android XML drawables supported
- New iOS RCTReactNativeFactory for brownfield
Summary
React Native 0.78 ships React 19, improvements to build-time optimizations (React Compiler), opt-in JavaScript log streaming in Metro, native Android XML drawable support, and a simpler iOS brownfield integration with RCTReactNativeFactory. This release also introduces a new cadence to ship smaller, more frequent releases and includes several breaking changes you should review before upgrading.
Key Points
- React 19
- React 19 is now supported in React Native. It removes some APIs (for example
propTypes) and adds new primitives such as Actions,useActionState,useOptimistic,use, and first-classref-as-prop behavior. Follow the React 19 migration guide when upgrading.
- React 19 is now supported in React Native. It removes some APIs (for example
- React Compiler (simplified enablement)
- Enabling the React Compiler now requires only installing the compiler and configuring the Babel plugin (no separate runtime package). Verify with DevTools: memoized components show the "Memo ✨" tag.
- Metro opt-in logs
- JavaScript log streaming via Metro is available again as an opt-in flag:
npx @react-native-community/cli start --client-logs. This remains off by default and will be removed in a future release.
- JavaScript log streaming via Metro is available again as an opt-in flag:
- Android XML drawables
- You can now import Android XML drawables (vector/shape) via the existing
Imagecomponent, e.g.Image source={require('./img/my_icon.xml')}orimport MyIcon from './img/my_icon.xml'. - Constraints: XML drawables must be referenced at Android build time (AAPT), cannot be loaded over the network, require explicit width/height (default 0x0), and are less customizable at runtime than SVGs.
- You can now import Android XML drawables (vector/shape) via the existing
- iOS brownfield: RCTReactNativeFactory
- New
RCTReactNativeFactorylets you create React Native instances inside aUIViewControllerwithout anAppDelegate, simplifying Brownfield integrations. Provide a delegate that supplies the bundle URL.
- New
- Release process and stability
- The team will ship smaller, more frequent stable releases in 2025 to reduce breaking changes and get fixes to users faster.
Breaking changes & compatibility
- React 19 API removals (e.g.
propTypes) require code changes; follow the upgrade guide. - DevTools: removed FuseboxClient CDP domain.
- Codegen: separate component-array and command-array types.
- Android: nullability changes from migrating
RootViewto Kotlin; several classes moved to internal or removed (see full changelog for exact class names). - iOS (Old Architecture): image load event size changed from logical to pixel values.
Upgrade notes (practical steps)
- Use the React Native Upgrade Helper and read the Upgrading docs before starting.
- Upgrade React to 19 and address removed APIs and any migration steps from the React 19 blog.
- Enable React Compiler: install the compiler and add the Babel plugin; confirm memoization in DevTools.
- To opt-in to Metro logs:
npx @react-native-community/cli start --client-logs(can be aliased in npm scripts). - To use Android XML drawables: add XML resources to your Android project, import with
require()orimport, set explicitwidth/height, and rebuild the Android app after renaming or moving resources. - For iOS Brownfield: instantiate
RCTReactNativeFactoryin a view controller and provide a delegate that returns the JS bundle URL.
Resources
- Use the React 19 release post, React Compiler docs, React Native Upgrade Helper, and the Upgrading docs for detailed migration steps.