Vaibhav Pratap Singh

Inside React Native 0.80: API Surface Redefined, Legacy Frozen, and Performance Unleashed

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
To enable, update your 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 in package.json may affect module resolution in Metro and Jest. Update mocks and custom resolvers as needed.
  • Android: Deprecated classes (e.g., StandardCharsets) are removed. Use java.nio.charset.StandardCharsets instead. Several classes are now internal or migrated to Kotlin.
  • iOS: RCTFloorPixelValue is removed from RCTUtils.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.

References