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

The release of React Native 0.87 marks a pivotal milestone in the framework’s evolution, signaling a move toward more robust type safety and streamlined build processes. By establishing the Strict TypeScript API as the default JavaScript interface and introducing experimental support for Swift Package Manager (SwiftPM), the React Native team is positioning the platform to better align with modern mobile development standards. This update, which follows the 0.80 preview phase, arrives with heightened toolchain requirements, necessitating that developers update their environments to Node.js 22, Android Gradle Plugin (AGP) 9, and Kotlin 2.0 or higher.
A New Era for Type Safety
The transition to a Strict TypeScript API as the default behavior represents the culmination of a multi-version effort to reduce runtime errors and improve developer ergonomics. Initially introduced in version 0.80 as an opt-in preview, the strict API system was designed to address long-standing issues surrounding the reliability of component props and API surface definitions.
For the React Native ecosystem, this shift is more than a syntax change; it is a fundamental architectural transition. The strict API provides full type information and integrated documentation for components such as TextInput and View, which appear directly in the developer’s editor upon hovering. This enhancement significantly reduces the "context switching" previously required to consult documentation. Furthermore, the migration eliminates reliance on legacy deep imports, a practice that historically led to brittle codebases and inconsistent build behavior.
For developers concerned about the immediate impact on existing projects, the core team has provided a temporary bridge. Projects can opt out of these strict types through the end of the 0.88 release cycle by adding the react-native-legacy-deep-imports condition to their tsconfig.json. However, this is intended strictly as a stop-gap measure, as the legacy types are slated for permanent removal in the following release, emphasizing the industry-wide push toward type-first development.
Revolutionizing iOS Builds with Swift Package Manager
Perhaps the most notable architectural addition in version 0.87 is the experimental support for Swift Package Manager (SwiftPM). Since the framework’s inception, CocoaPods has served as the de facto dependency manager for iOS builds within React Native. While functional, CocoaPods relies on Ruby and often creates complex, opaque project configurations that can be difficult to debug.
The integration of SwiftPM offers a modern alternative that interacts directly with Xcode. By moving to a SwiftPM-based workflow, developers can eliminate the need for Ruby and Bundler entirely, simplifying the local environment setup. The mechanism works by injecting Swift package references into existing .xcodeproj files, ensuring that developer settings—such as signing configurations and custom build phases—remain intact.

This transition necessitated a significant overhaul of how React Native distributes its precompiled binaries. The team has restructured its XCFrameworks, creating "headers-only" frameworks to ensure that namespaces resolve correctly within the strict environment of SwiftPM. This represents a significant optimization for the build pipeline, as it eliminates the pod install step, which has historically been a source of friction during dependency updates. As the ecosystem adapts, developers will need to update their header imports to reflect the new namespace-consistent paths, such as changing #import <RCTAppDelegate.h> to #import <React/RCTAppDelegate.h>.
Android Infrastructure and AGP 9
The 0.87 release also addresses the Android ecosystem, marking the first time React Native has officially supported the Android Gradle Plugin (AGP) 9. This update brings substantial changes to the Gradle build lifecycle. Because AGP 9 introduces a new DSL (Domain Specific Language) and stricter Kotlin integration, the React Native team has issued specific guidance for maintaining stability.
Developers are currently advised to opt out of the built-in Kotlin and the new DSL behaviors provided by AGP 9 to ensure compatibility with existing native modules. By setting android.builtInKotlin=false and android.newDsl=false in their gradle.properties files, teams can continue to leverage the performance gains of the newer plugin without immediate, widespread breakage. This phased approach to adoption reflects a broader trend in the React Native community: providing cutting-edge features while ensuring that large-scale enterprise applications have a clear, documented path to stability.
Chronology of the Update
The journey to 0.87 has been characterized by consistent, iterative improvements rather than isolated changes.
- Version 0.80 (June 2025): The introduction of the Strict TypeScript API as an opt-in preview, accompanied by the formal deprecation of deep imports. This established the foundation for the current shift.
- Version 0.84: A period of refinement for Metro, the JavaScript bundler, which saw increased performance metrics and decreased memory overhead.
- Version 0.87 (Current): The official transition of the Strict TypeScript API to default status, the introduction of experimental SwiftPM support, and the elevation of toolchain requirements to current industry standards.
Implications for the Ecosystem
The move toward stricter typing and simplified native dependency management is a strategic response to the increasing complexity of modern mobile applications. As apps grow in size and the number of third-party modules increases, the overhead of maintaining legacy build systems like CocoaPods or loose JavaScript types becomes a significant technical debt.
By enforcing stricter TypeScript standards, the React Native team is effectively standardizing the "language" of the framework, making it easier for libraries to interact with the core without compatibility issues. Furthermore, by embracing SwiftPM, the framework is future-proofing itself against the eventual deprecation or decline of Ruby-based dependency management in the Apple ecosystem.
Data and Community Impact
The 0.87 release is the result of a massive collaborative effort, featuring 265 distinct commits from 74 individual contributors. This level of participation underscores the continued vitality of the React Native open-source project. With the transition of 0.84.x to unsupported status, the release of 0.87 serves as the new baseline for stable development.

The emphasis on developer experience (DX) is evident in the updated toolsets provided. For instance, the migration process is bolstered by automated ESLint fixers and the "migrate-to-strict-api" skill available through community-driven educational platforms. These resources aim to minimize the labor-intensive nature of upgrading large codebases.
Broader Industry Context
React Native’s decision to tighten its API and adopt SwiftPM mirrors shifts occurring across the wider JavaScript and mobile development landscape. The industry is moving away from loosely typed, configuration-heavy setups toward environments that prioritize static analysis and native-first tooling.
By raising the minimum toolchain requirements—specifically the move to Node.js 22—the React Native team is ensuring that the framework benefits from the performance improvements and security patches provided by the latest runtime environments. This, combined with the jump to Kotlin 2.0, ensures that developers have access to the latest language features and compiler optimizations.
Looking Ahead
As the React Native ecosystem moves toward version 0.88 and beyond, the focus will likely remain on refining these new experimental features. The SwiftPM integration, while currently in an experimental state, is expected to become the preferred method for managing iOS dependencies once the edge cases regarding complex project structures are fully resolved. Similarly, the removal of legacy TypeScript support in the next cycle will signal the completion of the type-safety initiative.
For developers and organizations currently maintaining React Native applications, the 0.87 update is a call to action. The migration, while requiring significant attention to detail, offers a path toward a more predictable, performant, and maintainable codebase. The official upgrade path remains through the React Native Upgrade Helper, a tool that has become indispensable for managing the delta between versions. As the community moves forward, the success of this release will likely be measured by how quickly and effectively the ecosystem adopts these new standards, ultimately leading to a more unified and robust development experience for mobile engineers worldwide.







