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

The cross-platform mobile development landscape shifted this week with the official release of React Native 0.87, bringing major architectural updates, modern developer tooling requirements, and a streamlined approach to building native applications for iOS and Android. Led by Meta and supported by a robust global community of contributors, this latest stable version establishes the Strict TypeScript API as the default JavaScript interface, updates the Metro bundler to version 0.87, and introduces experimental integration for the Swift Package Manager (SwiftPM).
Alongside these major features, the release marks a significant raising of minimum toolchain requirements across the ecosystem. Developers targeting React Native 0.87 must now upgrade their environments to support Node.js 22, Android Gradle Plugin (AGP) 9, and Kotlin 2.0 or higher. With 265 commits contributed by 74 developers, version 0.87 represents a concerted push toward a more standardized, performant, and type-safe future for cross-platform application development.
Main Facts and Core Upgrades
The flagship enhancement in React Native 0.87 is the transition of the Strict TypeScript API from an opt-in preview—first introduced in version 0.80 alongside the deprecation of deep imports—to the absolute default for all newly initialized and upgraded projects. This ecosystem-wide change enforces intentional breaking changes across the public API surface, designed to improve code reliability, refactoring safety, and overall editor intelligence.
Under the new Strict API, components such as TextInput now feature comprehensive documentation and full type information directly within inline code editor hovers. This eliminates guesswork for developers by surfacing rich documentation directly inside integrated development environments (IDEs). To assist development teams with this transition, the React Native core team has published comprehensive migration guides and integrated a dedicated agent-driven upgrade skill (/migrate-to-strict-api) alongside existing ESLint fixers to automate much of the migration process.
Recognizing that large-scale enterprise codebases may require additional time to adopt these stricter type definitions, the maintainers have included a temporary opt-out mechanism. By adding the "react-native-legacy-deep-imports" custom condition to the compilerOptions within a project’s tsconfig.json file, development teams can temporarily revert to legacy types. However, this bridge is strictly temporary and is scheduled for permanent removal in React Native 0.88.

Chronology and Development Timeline
The path to React Native 0.87 has been shaped by incremental architectural evolution over the past year. The journey began with the conceptualization of cleaner import pathways and type safety measures during the 0.80 release cycle in mid-2025, where the Strict TypeScript API was first fielded as an optional preview. Community feedback, partnership testing, and iterative refinement of root exports throughout late 2025 allowed the core team to resolve incompatibilities with popular third-party libraries, paving the way for the mandatory default adoption seen in version 0.87.
Concurrently, the integration of Swift Package Manager has been developing through open proposals, notably documented in RFC #0994. The challenge of supporting SwiftPM required a fundamental rethinking of how precompiled binaries of React Native itself are distributed, given SwiftPM’s strict requirements regarding XCFramework structure and header locations. By introducing dedicated headers-only frameworks, the framework successfully unified namespace resolution and streamlined standard header search path mechanics.
Experimental Swift Package Manager Support for iOS
For iOS developers, React Native 0.87 delivers a long-awaited experimental alternative to CocoaPods in the form of Swift Package Manager (SwiftPM) integration. While CocoaPods remains the default and fully supported path, SwiftPM offers an additive, streamlined workflow that relies exclusively on Xcode without requiring Ruby, Bundler, or external pod managers.
To test this experimental feature in a React Native project, developers can execute a simple initialization command (npx react-native spm --deintegrate) within their iOS directory. This command injects Swift package references directly into the existing Xcode project file (.xcodeproj) without altering project settings, code signing configurations, or build phases. Reversing the process is similarly straightforward using the corresponding deinit command.
Unlike traditional CocoaPods workflows—which require running pod install every time native dependencies are added, removed, or modified—SwiftPM automates this overhead. Once initialized, developers simply install or remove native packages, and the project automatically detects changes and executes autolinking upon the next build. To accommodate this shift, developers migrating native modules may need to adjust bare-form angle imports to include their proper namespaces, changing legacy includes like #import <RCTAppDelegate.h> to standard framework paths such as #import <React/RCTAppDelegate.h>.
Android Gradle Plugin 9 and Toolchain Modernization
On the Android front, React Native 0.87 introduces support for the Android Gradle Plugin (AGP) 9, marking a major leap forward in build system architecture. Because AGP 9 brings substantial API and breaking changes to Gradle builds, the React Native core team recommends a measured approach for early adopters. Specifically, developers are advised to temporarily opt out of built-in Kotlin and the new Domain Specific Language (DSL) behavior introduced by AGP 9 by inserting configuration flags (android.builtInKotlin=false and android.newDsl=false) into their android/gradle.properties files. These temporary compatibility flags are slated for removal in upcoming AGP 10 releases, aligning with community-wide adoption tracked via RFC #1006.

To support these cutting-edge build tools and performance optimizations, the minimum toolchain requirements for React Native have been formally elevated. Version 0.87 mandates Node.js 22, Android Gradle Plugin 9, and Kotlin 2.0+. Consequently, older stable versions—specifically the 0.84.x release line—have officially transitioned to unsupported status in accordance with the project’s established support lifecycle policy.
Performance Enhancements and Metro 0.87
Complementing the language and build system updates, the JavaScript bundler Metro has been upgraded from version 0.84 to 0.87. This update delivers faster bundling times, lower memory consumption during heavy build processes, and improved dependency resolution algorithms. The leaner Metro implementation works in tandem with the updated TypeScript definitions to provide a more responsive local development loop, reducing feedback latency for engineers working on large-scale mobile applications.
Official Responses and Ecosystem Reactions
Community response to the 0.87 release has been overwhelmingly positive, particularly regarding the modernization of iOS and Android build pipelines. Ecosystem maintainers have praised the reduction of Ruby dependencies on macOS through the introduction of SwiftPM, citing significant improvements in onboarding speed for new junior and web-focused developers entering the mobile space.
Meanwhile, enterprise stakeholders have noted that while the enforcement of the Strict TypeScript API introduces upfront refactoring tasks, the long-term payoff in code quality, reduced runtime errors, and enhanced IDE autocompletion justifies the transition effort. Projects utilizing the Expo ecosystem can expect React Native 0.87 integration to roll out through upcoming expo@canary and stable SDK releases.
Broader Impact and Industry Implications
The release of React Native 0.87 underscores a broader industry trend toward strict type enforcement and native toolchain native alignment in cross-platform frameworks. By phasing out legacy deep imports and standardizing strict TypeScript definitions out-of-the-box, Meta is setting a higher baseline for code hygiene across the entire React Native ecosystem.
Furthermore, the experimental integration of Swift Package Manager signals a maturation of the iOS build architecture within React Native. By reducing reliance on Ruby-based tooling, the framework is lowering historical barriers to entry for Windows and Linux developers targeting iOS, while simultaneously aligning more closely with native Apple development standards. As development teams progressively adopt Node.js 22, AGP 9, and Kotlin 2.0+, React Native 0.87 establishes a high-performance foundation for the next generation of mobile applications.







