React Native 0.80: Deep Dive into the New Era of Mobile Development
Published: June 12, 2025
React Native 0.80 is a landmark release, introducing significant architectural changes, API surface refinements, and performance optimizations. This article provides a technical breakdown of the most impactful updates, migration strategies, and what they mean for advanced React Native projects.
1. JavaScript Deep Imports Deprecation
One of the most developer-impacting changes in 0.80 is the formal deprecation of deep imports from react-native
internals. Previously, it was common to import modules directly from subpaths, e.g.:
import { Alert } from 'react-native/Libraries/Alert/Alert';
With 0.80, this pattern is deprecated and will trigger ESLint and runtime warnings. The correct approach is now:
import { Alert } from 'react-native';
This change is enforced via the new exports
field in package.json
, which restricts module resolution to the public API. This not only reduces the surface area for breaking changes but also enables more aggressive internal refactoring by the core team. If your codebase or dependencies rely on deep imports, you must refactor or advocate for upstream changes. For test environments (e.g., Jest), you may need to update mocks and moduleNameMapper configurations.
2. Strict TypeScript API (Experimental)
React Native 0.80 introduces an opt-in Strict TypeScript API, generated directly from the source code. This provides:
- Improved type coverage and correctness
- Stronger compatibility guarantees for public APIs
- Isolation from internal file changes
tsconfig.json
:
{
"compilerOptions": {
"types": ["react-native/strict-types"]
}
}
This is a preview of the future stable API. Early adoption is encouraged for greenfield projects and library authors. Expect the strict API to become the default in a future release, synchronized with the removal of deep imports.
3. Legacy Architecture Freezing & Migration Path
The Legacy Architecture is now officially frozen. No new features or bugfixes will be backported, and CI coverage is discontinued. The New Architecture (Fabric, TurboModules, Codegen) is the default since 0.76 and is now the only path forward for long-term support.
If you are still using the Legacy Architecture, you will see warnings for APIs that will be removed in future releases. Migration is strongly recommended. Key steps include:
- Enable the New Architecture in
react-native.config.js
- Update all native modules to support TurboModules
- Refactor custom views to use Fabric
- Test for breaking changes in event handling and prop passing
4. Experimental: Prebuilt iOS Dependencies
React Native 0.80 introduces experimental support for prebuilt iOS dependencies via ReactNativeDependencies.xcframework
. This prebuilds third-party dependencies (e.g., Folly, GLog), reducing initial build times by ~12% on Apple Silicon. To enable:
RCT_USE_RN_DEP=1 bundle exec pod install
Or, set in your Podfile
:
ENV['RCT_USE_RN_DEP'] = '1'
This reduces build failures due to native dependency compilation and aligns iOS build workflows with Android’s prebuilt model. Note: Only third-party dependencies are prebuilt; React Native core is still built from source.
5. Android: Interprocedural Optimization (IPO) and Kotlin 2.1
Android builds now benefit from Interprocedural Optimization (IPO) for both React Native and Hermes, reducing APK size by ~1MB. No configuration is required—just upgrade to 0.80. Additionally, Kotlin is bumped to 2.1.20, enabling new language features and improved nullability handling. If you maintain custom native modules, review the Kotlin 2.1 release notes for migration tips.
6. Breaking Changes and Migration Notes
-
Exports Field: The
exports
field inpackage.json
may affect module resolution in Metro and Jest. Update mocks and custom resolvers as needed. -
Android: Deprecated classes (e.g.,
StandardCharsets
) are removed. Usejava.nio.charset.StandardCharsets
instead. Several classes are now internal or migrated to Kotlin. -
iOS:
RCTFloorPixelValue
is removed fromRCTUtils.h
. -
JS:
eslint-plugin-react-hooks
updated to v5.2.0. New lint errors may surface.
7. JSC Community Support Notice
React Native 0.80 is the last version with first-party JavaScriptCore (JSC) support. Future support will be via @react-native-community/javascriptcore
. Projects relying on JSC should plan migration to Hermes or community JSC.
8. New App Screen Redesign
The default app screen for new CLI projects is now a standalone package, with a modernized UI and improved support for large screens. This reduces boilerplate and improves onboarding for new projects.
Upgrade Strategy
For existing projects, use the React Native Upgrade Helper to review and apply code changes. For greenfield projects, React Native 0.80 is now the default. If you use Expo, support is available in the canary release of the Expo SDK.