React Native 0.87 Arrives With Strict TypeScript API By Default and Experimental Swift Package Manager Support

The core development team behind React Native has officially announced the global release of React Native version 0.87, introducing a series of foundational updates designed to modernize the framework’s architecture, tighten type safety, and streamline native tooling across both iOS and Android platforms. Highlighting this release is the transition of the Strict TypeScript API to the default JavaScript interface, alongside updates to Metro, experimental integration with the Swift Package Manager (SwiftPM), and support for the Android Gradle Plugin 9. As the framework evolves to meet modern development standards, version 0.87 also enforces higher minimum toolchain requirements, establishing a new baseline for enterprise and independent developers alike.
Background Context and Evolution of the Framework
Since its open-source debut by Meta, React Native has grown from a novel approach to cross-platform mobile development into an industry standard powering thousands of commercial applications. Over the years, the maintainers have focused heavily on bridging the gap between JavaScript logic and native capabilities, culminating in the recent architecture overloads that introduced features like the New Architecture, TurboModules, and Fabric.
Version 0.87 builds directly upon the roadmap established in earlier preview iterations. The journey toward stricter type definitions began in earnest with React Native 0.80, which initially rolled out the Strict TypeScript API as an opt-in preview alongside the deprecation of deep imports. By listening to community feedback, refining root exports, and resolving compatibility hurdles with popular third-party libraries, the core team has spent successive quarters smoothing out edge cases. The culmination of this iterative process is version 0.87, where strict typing is no longer optional for new projects, signaling a maturation of the ecosystem toward robust, scalable codebases.
Strict TypeScript API Becomes the Default Standard
The most visible change for JavaScript and TypeScript developers in React Native 0.87 is the elevation of the Strict TypeScript API to the default public JavaScript API. Originally previewed in version 0.80, this shift mandates intentional, ecosystem-wide adjustments across the API surface.
Under the new strict paradigm, developers will immediately notice enhanced developer ergonomics. For instance, hovering over core components like TextInput now yields comprehensive documentation and precise type information directly within modern IDEs, replacing the sparse or missing type definitions of legacy releases. Doc comments are now embedded across the vast majority of symbols, offering instant clarity without requiring developers to leave their code editors or consult external documentation.
While the long-term benefits include significantly reduced runtime errors, improved autocompletion, and cleaner code maintainability, the transition does introduce breaking changes. Many applications will upgrade smoothly, but projects relying on outdated patterns will need to consult the official migration guide. To ease the burden on engineering teams, the community has introduced specialized tooling, including the /migrate-to-strict-api agent-driven upgrade skill, which pairs with existing ESLint fixers to automate much of the refactoring process.

Recognizing that large-scale enterprise applications require time to refactor complex codebases, the core team has implemented a temporary opt-out mechanism. Developers who are not yet ready to migrate can revert to legacy types through version 0.88 by adding the "react-native-legacy-deep-imports" custom condition to their tsconfig.json compiler options. However, maintainers have emphasized that this bridge is strictly temporary, with complete removal of legacy TypeScript types scheduled for the subsequent release.
Experimental Swift Package Manager Support for iOS
On the iOS front, React Native 0.87 introduces experimental support for the Swift Package Manager (SwiftPM) as an alternative to CocoaPods. This additive, opt-in feature allows developers to consume the same prebuilt XCFrameworks that React Native already publishes, effectively bypassing the traditional Ruby and CocoaPods toolchain.
Historically, iOS development within the React Native ecosystem has relied heavily on CocoaPods for dependency management, requiring Ruby, Bundler, and frequent pod install executions after modifying native libraries. With SwiftPM integration, developers only require Xcode. By executing a single command (npx react-native spm --deintegrate), engineers can inject Swift package references directly into their existing .xcodeproj files without disrupting project signing, build phases, or capabilities. Furthermore, subsequent native dependency additions or removals are handled automatically by the project build system, eliminating the need to manually execute pod synchronization commands.
To facilitate SwiftPM integration, the core engineering team had to fundamentally rethink how precompiled binaries are packaged and distributed. Because SwiftPM enforces stricter rules regarding XCFramework structures and header locations than CocoaPods, the release introduces dedicated header-only frameworks. This structural adjustment ensures that headers resolve seamlessly through standard framework and header search path mechanics. Consumers migrating to this workflow will note a minor syntax change: bare-form angle includes must now include their namespace (e.g., changing #import <RCTAppDelegate.h> to #import <React/RCTAppDelegate.h>).
While CocoaPods remains the default and fully supported path for this release, the introduction of SwiftPM represents a significant step toward modernizing the iOS developer experience and aligning React Native closer to native Apple development paradigms.
Android Ecosystem Updates and Toolchain Requirements
For Android developers, React Native 0.87 marks the official adoption of the Android Gradle Plugin (AGP) version 9. As a major release from Google, AGP 9 brings substantial API adjustments and architectural changes to Gradle builds.
To ensure stability during the transition period, the React Native maintainers recommend that developers temporarily opt out of the built-in Kotlin and new DSL behavior bundled with AGP 9. By adding specific flags (android.builtInKotlin=false and android.newDsl=false) to the android/gradle.properties file, teams can maintain build stability while ecosystem-wide adoption of AGP 9 progresses. These opt-out mechanisms are planned for deprecation alongside the rollout of AGP 10.

In tandem with these platform upgrades, version 0.87 raises the minimum toolchain requirements across the board. Projects upgrading to this version must now run on Node.js 22, AGP 9, and Kotlin 2.0 or higher. These elevated requirements reflect the broader industry movement toward faster, more secure runtime environments and modern language features, ensuring that React Native applications can leverage the latest compiler optimizations and security patches.
Performance Improvements and Metro 0.87
Under the hood, Metro—the JavaScript bundler built specifically for React Native—has been updated from version 0.84 to 0.87. This update brings under-the-hood performance enhancements, faster incremental bundling speeds, and leaner memory footprints during development cycles. By optimizing the bundling pipeline, the update aims to reduce feedback loops for developers working on massive enterprise codebases, keeping hot-reloading responsive even as application logic scales.
Community Contributions and Upgrade Pathways
The release of React Native 0.87 is the result of a collaborative global effort, comprising 265 commits contributed by 74 independent developers and corporate partners. This continuous stream of community-driven patches highlights the health and vibrancy of the React Native ecosystem.
With the launch of version 0.87, the older 0.84.x branch officially transitions into unsupported status, aligning with the project’s formal support policy. Developers seeking to upgrade existing applications are encouraged to utilize the official React Native Upgrade Helper to inspect exact code diffs and migration requirements. New projects can be initialized immediately via the command line interface using npx @react-native-community/cli@latest init MyProject --version latest, while Expo users can anticipate integration through upcoming expo@canary releases.
As mobile development continues to demand higher performance, tighter type safety, and streamlined tooling, React Native 0.87 establishes a sturdy technical foundation for the next generation of cross-platform applications.







