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

The release of React Native 0.87 marks a pivotal milestone in the evolution of the cross-platform framework, signaling a shift toward stricter development standards and modernized infrastructure. By establishing the Strict TypeScript API as the default JavaScript interface and integrating experimental support for the Swift Package Manager (SwiftPM), the development team is addressing long-standing complexities within the ecosystem. These updates, accompanied by significant revisions to the toolchain requirements—specifically the move to Node.js 22, Android Gradle Plugin (AGP) 9, and Kotlin 2.0—reflect a broader industry trend toward enhanced type safety and build performance.
The Evolution of the TypeScript API
The transition to the Strict TypeScript API as the standard represents the culmination of a multi-version development cycle. Originally introduced as an opt-in preview in React Native 0.80, the Strict TypeScript API was designed to replace the legacy type definitions that had become increasingly difficult to maintain as the framework matured. The move to make this the default across all projects in version 0.87 is intended to unify the developer experience, ensuring that type definitions are consistent, accurate, and better documented.
For developers, the primary benefit of this shift is the inclusion of comprehensive documentation comments directly within the type definitions. When hovering over components like TextInput, developers can now access detailed property information and usage context, a significant improvement over the sparse documentation provided by legacy types. This change is not merely cosmetic; it is an ecosystem-wide architectural adjustment that enforces better coding practices and reduces runtime errors by catching type mismatches during the development phase.
While the framework maintainers have worked extensively with third-party library authors to ensure compatibility, the shift inevitably introduces breaking changes. To mitigate friction, the team has provided a detailed migration guide and integrated support into the react-native-community tooling. For organizations unable to migrate immediately, a temporary opt-out mechanism is available by adding react-native-legacy-deep-imports to the customConditions field in the tsconfig.json file. However, this is strictly a bridge, with the maintenance team confirming that legacy types will be removed in the upcoming React Native 0.88 release.
Modernizing the iOS Build Pipeline: Swift Package Manager
Perhaps the most notable infrastructure change in version 0.87 is the introduction of experimental support for the Swift Package Manager (SwiftPM) as an alternative to the long-standing CocoaPods dependency manager. Since the inception of React Native, CocoaPods has been the de facto standard for managing native iOS dependencies, requiring Ruby and the Bundler ecosystem to function.

The integration of SwiftPM represents a significant simplification of the development environment. By utilizing native Xcode build mechanics, the requirement for Ruby and CocoaPods is eliminated, potentially reducing the frequency of environment-related build errors. The new system leverages prebuilt XCFrameworks, which the React Native team has restructured to comply with SwiftPM’s strict requirements regarding header locations and namespaces.
To facilitate this, the command npx react-native spm --deintegrate allows developers to remove CocoaPods and inject Swift package references directly into their project files. This change is additive and non-destructive, preserving existing signing configurations and build phases. While the team acknowledges that this is an experimental feature with known limitations—such as specific requirements for manual linking in complex scenarios—it serves as a clear signal of the framework’s move toward native alignment. The long-term goal is to make SwiftPM the preferred path, reducing the dependency on external, non-native package managers.
Android Infrastructure and AGP 9
The Android ecosystem within React Native also receives a substantial update with the adoption of Android Gradle Plugin (AGP) 9. As the framework strives to stay current with the latest Android development standards, this upgrade brings necessary performance optimizations but also mandates stricter build configurations.
AGP 9 represents a major shift in the Android build system, introducing breaking changes that necessitate careful configuration. In version 0.87, the recommended approach is to temporarily opt out of the built-in Kotlin and new DSL behaviors introduced by the plugin. By setting android.builtInKotlin=false and android.newDsl=false in the android/gradle.properties file, developers can maintain build stability while the ecosystem at large prepares for the full adoption of AGP 9. This proactive approach ensures that React Native remains compatible with the latest Android Studio features without forcing an immediate, disruptive overhaul of existing Gradle build scripts.
Toolchain Requirements and Performance Metrics
The move to higher minimum toolchain requirements is a calculated decision aimed at ensuring long-term security and performance. Node.js 22 is now required, ensuring that the development server benefits from the latest V8 engine improvements and performance patches. Similarly, the mandate for Kotlin 2.0 ensures that native Android modules can leverage modern language features, such as improved compiler speed and enhanced null safety.
Metro, the default JavaScript bundler for React Native, has also been upgraded from 0.84 to 0.87. This update is largely focused on refining the "leaner" architecture, improving cache invalidation strategies, and reducing the time required for incremental builds. These performance gains are critical for larger applications, where build times can significantly impact developer velocity.

Broader Implications and Strategic Context
The trajectory of React Native, as evidenced by version 0.87, indicates a shift toward "native-first" tooling. By embracing SwiftPM and strictly typed interfaces, the framework is reducing the abstraction layers that have historically separated JavaScript developers from native platform intricacies.
The decision to force a transition to the Strict TypeScript API suggests that the maintainers are prioritizing a standardized, high-quality developer experience over total backward compatibility. This is a common strategy in mature frameworks that have reached a critical mass of adoption. By eliminating legacy deep imports and enforcing strict types, the framework reduces the surface area for bugs and makes the codebase more maintainable for large teams.
Furthermore, the introduction of agent-driven upgrade tools, such as the migrate-to-strict-api skill, indicates an awareness of the "upgrade fatigue" that often plagues the React Native community. By providing programmatic solutions to complex migrations, the team is attempting to lower the barrier to entry for the latest releases.
A Community-Driven Milestone
The 0.87 release is the result of 265 individual commits from 74 contributors. This collaborative effort highlights the sustained health of the React Native ecosystem. The inclusion of an official support policy—moving 0.84.x to unsupported status—underscores the need for organizations to adopt a regular cadence of updates.
For many teams, the transition to 0.87 will be straightforward, provided they utilize the provided migration scripts. However, for those with deeply customized build configurations or extensive native codebases, the upgrade will require careful testing, particularly regarding the new XCFramework structures and the nuances of AGP 9.
In summary, React Native 0.87 is a release defined by refinement and modernization. It moves the framework away from the "legacy" era of loose typing and complex, non-native dependency management, pushing it toward a tighter, more cohesive integration with the underlying iOS and Android platforms. As the framework continues to evolve, these changes provide the necessary foundation for future optimizations, ensuring that React Native remains a competitive choice for high-performance, cross-platform mobile development in an increasingly demanding technological landscape.







