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

The cross-platform mobile development ecosystem has taken another significant step forward with the official release of React Native 0.87. This milestone update brings a series of foundational shifts designed to modernise the developer experience, enhance code reliability, and streamline native tooling configurations across both iOS and Android platforms. Chief among the changes in version 0.87 is the elevation of the Strict TypeScript API to the default JavaScript interface, alongside experimental integration for the Swift Package Manager (SwiftPM) and upgraded core toolchain baselines that require modern developer environments.
As mobile applications grow in complexity, the demand for robust type safety and performant build pipelines has intensified. React Native 0.87 directly addresses these concerns by altering defaults that have governed the framework for years. The release is the culmination of months of community collaboration, refinement, and testing, building upon foundations laid earlier in the 0.8x product lifecycle.
Main Facts and Core Updates
At the heart of React Native 0.87 are three primary engineering achievements: making the Strict TypeScript API the default, updating the Metro bundler to version 0.87, and introducing experimental Swift Package Manager support for Appleās operating systems.
The transition of the Strict TypeScript API to the default setting marks an ecosystem-wide evolution. Originally introduced as an opt-in preview in version 0.80 alongside the deprecation of deep imports, the Strict API forces intentional breaking changes across the public JavaScript surface area to deliver superior type definitions. Developers working with core components such as TextInput will immediately notice enhanced documentation directly within their integrated development environments (IDEs) upon hovering over symbols. This improvement is powered by comprehensive doc comments embedded across the vast majority of library symbols, providing immediate glanceable context without requiring external documentation lookups.
To ease the friction of this transition, the React Native core team has collaborated closely with library maintainers and community partners to resolve incompatibilities. Furthermore, agent-driven workflows can leverage dedicated migration tooling, such as the /migrate-to-strict-api skill, which operates in tandem with existing ESLint fixers. Recognising that large enterprise codebases may require additional time to adapt, maintainers have provided a temporary opt-in bridge via a custom condition ("react-native-legacy-deep-imports") in tsconfig.json. This bridge is slated to remain supported through version 0.88 before legacy types are permanently removed in a subsequent release.

Concurrently, the Metro bundler has been updated from version 0.84 to 0.87. This update introduces performance enhancements, faster incremental builds, and a leaner runtime profile designed to scale efficiently with large-scale commercial codebases.
Chronology and Background Context
The journey toward React Native 0.87 reflects a methodical roadmap aimed at purging technical debt and aligning the framework with modern native platform standards. The foundational work began with the 0.80 release cycle in mid-2025, which first signalled the deprecation of deep imports and laid the groundwork for strict typing. By gathering telemetry and feedback from early adopters over subsequent minor releases, the core team refined root exports and ironed out friction points with third-party libraries.
Concurrently, the introduction of experimental Swift Package Manager support represents a multi-year desire from the iOS development community to move away from legacy dependency managers. Traditionally, CocoaPods has served as the default package manager for iOS targets within React Native applications. While CocoaPods remains fully supported and functions as the default path in version 0.87, SwiftPM offers an alternative native-first approach that relies entirely on Xcode.
To make SwiftPM viable, core engineers had to fundamentally restructure how precompiled binaries of React Native are shipped. Because SwiftPM enforces stricter rules regarding XCFramework structures and header locations than CocoaPods, the framework now utilizes dedicated header-only frameworks. This ensures standard header search path mechanics resolve correctly, giving every namespace a singular physical home. Developers adopting this experimental workflow execute a single terminal command (npx react-native spm --deintegrate) to inject package references directly into their existing .xcodeproj files without disrupting project signing, build phases, or existing capabilities.
Toolchain Requirements and Android Upgrades
In lockstep with desktop and mobile platform evolution, React Native 0.87 enforces higher minimum toolchain requirements. Developers must now use Node.js 22, Android Gradle Plugin (AGP) version 9, and Kotlin 2.0 or higher.

The adoption of AGP 9 represents a major upgrade for Android builds, introducing significant API and architectural shifts. Because AGP 9 brings structural changes to Gradle build pipelines, the React Native team recommends that existing applications temporarily opt out of built-in Kotlin and the new domain-specific language (DSL) behavior introduced by the plugin. Developers can achieve this by specifying android.builtInKotlin=false and android.newDsl=false within their android/gradle.properties files. These opt-out flags serve as a temporary bridge until ecosystem-wide adoption of AGP 9 matures in future releases, as detailed in community proposals.
Official Responses and Community Collaboration
The release of React Native 0.87 underscores the collaborative nature of open-source software development at scale. According to official release metrics, version 0.87 incorporates 265 distinct commits contributed by 74 individual developers from across the global tech community.
Maintainers have expressed gratitude to the numerous external contributors who dedicated time to testing pre-releases, filing bug reports, and submitting patches for edge cases related to the strict typing rollout and binary restructuring. The active participation of enterprise partners and independent library authors alike has ensured that critical ecosystem packages could be updated ahead of the stable release, minimising disruption for teams upgrading production applications.
Broader Impact and Technical Implications
The long-term implications of React Native 0.87 point toward a faster, more predictable, and strictly typed development lifecycle. By phasing out legacy deep imports and enforcing strict TypeScript boundaries, the framework reduces runtime errors caused by misconfigured props or unhandled type mismatches. Furthermore, the inclusion of experimental SwiftPM support signals a potential future where iOS builds require fewer third-party Ruby dependencies, simplifying continuous integration (CI) pipelines and reducing setup friction for new team members.
For teams maintaining large applications, the upgrade path requires careful planning, particularly regarding the validation of third-party dependencies against the new Strict TypeScript API and the updated AGP 9 toolchain. However, the inclusion of comprehensive migration guides, automated tooling, and temporary compatibility bridges ensures that engineering teams can transition at a sustainable pace. As version 0.87 establishes itself as the new stable standardāconcurrently moving version 0.84 into unsupported statusāthe React Native ecosystem solidifies its position as a mature, enterprise-ready framework capable of leveraging the absolute latest advancements in native mobile engineering.







