React Native 0.87 – Strict TypeScript API, Metro Update, Swift Package Manager, AGP 9 Support

The release of React Native 0.87 marks a pivotal evolution in the architecture of one of the world’s most popular cross-platform development frameworks. By mandating a Strict TypeScript API as the default JavaScript interface and introducing experimental support for Apple’s Swift Package Manager (SwiftPM), the React Native team is signaling a transition toward a more type-safe, modular, and performant ecosystem. This update, which follows the 0.80 preview phase, represents the culmination of a long-term strategy to deprecate legacy deep imports and modernize the way developers interact with core components. Alongside these architectural shifts, the release enforces higher minimum toolchain requirements, specifically targeting Node.js 22, Android Gradle Plugin (AGP) 9, and Kotlin 2.0+.
The Shift Toward Type Safety and Developer Experience
For years, React Native relied on a flexible, albeit loosely typed, JavaScript API that allowed for deep imports—a practice that often led to brittle codebases and runtime errors. The introduction of the Strict TypeScript API as the default standard is designed to eliminate these ambiguities. During the initial opt-in preview period introduced in version 0.80, the core team worked extensively with community maintainers to resolve incompatibilities across the ecosystem.
The primary advantage of this shift is the enhanced developer experience. By utilizing comprehensive type definitions, developers now benefit from rich documentation and autocompletion directly within their integrated development environments (IDEs). For instance, hovering over a standard component like TextInput now surfaces full type information and contextual comments, a significant departure from the opaque symbols of the past. This change is not merely cosmetic; it is an ecosystem-wide architectural enforcement that ensures higher code quality and reduces the cognitive load on developers. While this transition necessitates breaking changes, the core team has provided an extensive migration guide and an agent-driven upgrade path to assist teams in transitioning their legacy codebases. For organizations unable to migrate immediately, a temporary opt-out mechanism remains available through the use of specific custom conditions in tsconfig.json, though this bridge is scheduled to be removed in version 0.88.

Modernizing the iOS Pipeline: The SwiftPM Experiment
Perhaps the most disruptive change in version 0.87 is the introduction of experimental support for Swift Package Manager (SwiftPM) on iOS. Historically, React Native has relied heavily on CocoaPods to manage native dependencies, a system that requires Ruby and additional build-time overhead. SwiftPM, being a first-party tool from Apple, offers a more integrated experience that streamlines the build process.
By moving toward SwiftPM, React Native is effectively reducing the dependency on the Ruby ecosystem, which has long been a source of frustration for mobile developers managing environment parity. The new implementation allows developers to inject Swift package references directly into their .xcodeproj files without needing to maintain complex Podfile configurations. This change is supported by a fundamental restructuring of how React Native ships its precompiled binaries. The team has introduced new "Headers only" XCFrameworks, which provide a more robust mechanism for resolving namespaces and header paths. While CocoaPods remains the supported, stable path for production applications, the experimental status of SwiftPM offers a glimpse into a future where React Native builds are faster, more native, and significantly easier to configure.
Aligning with Modern Android Toolchains
The update also brings support for the Android Gradle Plugin (AGP) 9, a major milestone that requires developers to adjust their build configurations. AGP 9 introduces significant changes to the Android build lifecycle, and React Native 0.87 is the first version to fully accommodate these updates. Given the complexity of the Android build ecosystem, the team has provided clear guidance on maintaining stability during this transition. Specifically, developers are advised to opt out of certain built-in Kotlin and new DSL behaviors that are still in their infancy within AGP 9. These configuration flags, placed within android/gradle.properties, serve as a buffer to ensure that existing projects do not break due to the aggressive evolution of the Android build tools. This careful approach reflects the framework’s commitment to maintaining backward compatibility while allowing the underlying native platforms to advance at their own pace.
Chronology of the 0.87 Release Cycle
The development of version 0.87 did not occur in isolation. It is the result of a deliberate, phased rollout that began with the initial previews of the Strict TypeScript API in version 0.80. Between version 0.80 and 0.87, the React Native community participated in several Request for Comments (RFC) processes, most notably regarding the integration of SwiftPM and the adoption of AGP 9.

- June 2025: Version 0.80 is released, introducing the Strict TypeScript API as an opt-in feature and initiating the deprecation of deep imports.
- Q3 2025: Community-wide testing begins, focusing on the compatibility of popular third-party libraries with the new strict types.
- Early 2026: RFC #0994 and RFC #1006 are finalized, outlining the design for SwiftPM support and AGP 9 adoption, respectively.
- Present: The formal release of version 0.87, marking the transition of these features from experimental or opt-in status to the new default standard.
Implications for the Broader Ecosystem
The move to version 0.87 suggests a shift in the philosophy of the React Native core team toward "opinionated defaults." By standardizing TypeScript, simplifying the iOS build process, and aligning with the latest Android toolchains, the team is reducing the number of ways a React Native project can be configured. This is a critical development for large-scale enterprise teams that rely on consistent tooling across hundreds of developers.
Furthermore, the focus on performance—exemplified by the Metro 0.87 update—ensures that these architectural changes do not come at the cost of build speed or development agility. Metro has undergone significant optimizations, which are expected to reduce build times and memory consumption during the bundling process. For developers, this means that the transition to stricter types and more modern native tooling is balanced by an improvement in the underlying developer experience.
Official Responses and Community Feedback
Initial feedback from the maintainer community has been largely positive, particularly regarding the move away from CocoaPods. Many senior engineers have expressed relief at the prospect of a native Swift-based dependency manager, which is expected to simplify CI/CD pipelines significantly. However, the requirement to upgrade to Node.js 22 and the breaking changes associated with the TypeScript migration are viewed as significant hurdles for legacy applications.
The core team has acknowledged these challenges, emphasizing that the "migration guide" is not merely a document but a collection of resources, including automated ESLint fixers and AI-driven migration skills. This proactive support system is indicative of a maturing framework that recognizes the difficulty of upgrading large-scale, mission-critical applications. As React Native continues to position itself as the primary choice for high-performance mobile development, version 0.87 serves as a foundational step, clearing away technical debt and preparing the codebase for the next generation of mobile computing requirements. With 265 commits from 74 contributors, the release highlights a robust, collaborative effort to stabilize and modernize the framework for the foreseeable future.







