React Native 0.87 Arrives with Default Strict TypeScript, Swift Package Manager Support, and Higher Toolchain Baselines

The cross-platform mobile development landscape is shifting once again as Meta and the open-source community officially release React Native version 0.87. This major update introduces significant structural enhancements, modernizes underlying toolchains, and streamlines native dependency management for both iOS and Android developers. Among the most notable updates in version 0.87 are the transition of the Strict TypeScript API to the default JavaScript configuration, an update to Metro 0.87, experimental integration with the Swift Package Manager (SwiftPM), and full alignment with the Android Gradle Plugin (AGP) version 9.
As mobile applications grow increasingly complex, developer experience, build performance, and type safety have emerged as paramount concerns for engineering teams. Version 0.87 addresses these demands directly by phasing out legacy code paths, elevating the minimum technical requirements for building applications, and introducing forward-looking architecture alternatives designed to reduce developer friction.
The Evolution of Type Safety: Strict TypeScript API by Default
One of the most consequential changes in React Native 0.87 is the promotion of the Strict TypeScript API to the default JavaScript interface. Initially introduced as an opt-in preview alongside the deprecation of deep imports in version 0.80, the Strict API is now the standard baseline for all new and upgraded projects.
This ecosystem-wide shift brings intentional breaking changes designed to clean up the public API surface. By transitioning to strict types, developers gain significantly improved documentation glanceability. For example, hovering over core components such as TextInput now displays comprehensive type information and native doc comments directly within modern integrated development environments (IDEs), a feature previously missing under legacy types.
The React Native core team has collaborated closely with community partners and library maintainers since the initial 0.80 preview to refine root exports and resolve incompatibilities across popular third-party modules. While many production applications will be able to transition with minimal errors, teams must review breaking changes outlined in the official migration documentation. To assist with this transition, automated tooling has been provided, including ESLint fixers and an agent-driven upgrade skill available via the /migrate-to-strict-api utility.
Recognizing that large-scale enterprise applications may require additional time to refactor their codebases, the core team has implemented a temporary opt-out mechanism. Developers can temporarily revert to legacy types by incorporating the "react-native-legacy-deep-imports" custom condition into their tsconfig.json compiler options. However, this bridge is strictly temporary; maintainers have confirmed that legacy TypeScript types will be permanently removed in the subsequent 0.88 release.
Streamlining iOS Development with Experimental Swift Package Manager Support

Historically, iOS development within the React Native ecosystem has relied heavily on CocoaPods for native dependency management. While robust, CocoaPods introduces complexities involving Ruby environments, Bundler configurations, and explicit post-install linking steps. React Native 0.87 challenges this paradigm by introducing experimental support for the Swift Package Manager (SwiftPM).
SwiftPM serves as an additive, opt-in alternative to CocoaPods, requiring only Xcode to function without the need for auxiliary Ruby dependencies. By leveraging the same prebuilt XCFrameworks already published by React Native, the newly introduced tooling injects Swift package references directly into existing .xcodeproj files rather than overwriting project architecture. User signing, capabilities, and build phases remain untouched throughout the integration process.
Developers can test this capability in existing or new applications by navigating to the iOS directory and executing the command npx react-native spm --deintegrate, which removes CocoaPods integration. The process is entirely reversible via npx react-native spm deinit. Crucially, this setup requires execution only once during initial migration; subsequent native package installations or removals are automatically detected by the project, handling autolinking without requiring manual execution of pod install.
To facilitate SwiftPM integration, the core engineering team overhauled how precompiled binaries are distributed. SwiftPM enforces stringent requirements regarding XCFramework structures and header file locations. Consequently, React Native 0.87 introduces header-only frameworks to ensure standard namespace resolution while maintaining byte-identical content to source pods. Developers adopting SwiftPM must update bare-form angle includes to explicitly reference namespaces—for example, shifting from #import <RCTAppDelegate.h> to #import <React/RCTAppDelegate.h>.
Modernizing Android Builds with Android Gradle Plugin 9
On the Android side of the ecosystem, React Native 0.87 marks the official adoption of the Android Gradle Plugin (AGP) version 9. AGP 9.0 represents a major milestone for the Android build system, introducing substantial API updates and breaking changes designed to improve build performance and modularity.
Because AGP 9 introduces fundamental shifts in Gradle build behavior, the React Native upgrade path recommends temporarily opting out of built-in Kotlin and the new DSL (Domain Specific Language) API features that ship with the plugin. Developers can maintain build stability by adding specific flags (android.builtInKotlin=false and android.newDsl=false) to their project’s android/gradle.properties file. These opt-outs serve as a temporary bridge and are scheduled for removal in subsequent AGP 10 releases as the broader Android ecosystem finalizes its adoption.
Simultaneously, the JavaScript bundler Metro has been updated from version 0.84 to 0.87, bringing performance improvements, reduced memory overhead, and faster asset resolution during local development cycles.
Raised Minimum Toolchain Requirements and Ecosystem Deprecations

To accommodate modern language features and performance optimizations, React Native 0.87 significantly raises the baseline toolchain requirements across the board. Engineering teams planning to upgrade must ensure their development environments and CI/CD pipelines meet the new minimum thresholds:
- Node.js version 22 or higher
- Android Gradle Plugin version 9
- Kotlin version 2.0 or higher
Furthermore, version 0.87 continues the systematic cleanup of legacy code by deprecating and removing various outdated APIs, packages, and tooling configurations. These proactive deprecations reduce maintenance overhead for the core team while encouraging developers to adopt modern, performant alternatives.
Community Contributions and Upgrade Pathways
The release of React Native 0.87 is the culmination of extensive collaborative effort across the global developer community. The version incorporates 265 individual commits contributed by 74 distinct authors. Project maintainers extended official acknowledgements to community members who delivered significant architectural improvements and bug fixes during this release cycle.
With the launch of version 0.87, the older 0.84.x release line officially transitions to unsupported status in accordance with React Native’s established support policy. Developers seeking to upgrade existing applications are advised to utilize the interactive React Native Upgrade Helper to inspect exact code differences between versions.
For developers initiating new projects, the latest version can be instantiated using the command npx @react-native-community/cli@latest init MyProject --version latest. Meanwhile, projects utilizing the Expo framework can expect React Native 0.87 support to roll out progressively through upcoming expo@canary releases.
As the React Native ecosystem matures, version 0.87 underscores a strategic commitment to native tooling standards, robust type definitions, and long-term maintainability. By bridging gaps with modern iOS and Android build ecosystems, the framework continues to cement its position as a premier choice for scalable, high-performance cross-platform application development.







