Mobile Development

React Native 0.87 Arrives with Strict TypeScript Defaults, SwiftPM Support, and Elevated Toolchain Requirements

The release of React Native 0.87 marks another pivotal step forward for the widely adopted cross-platform mobile development framework maintained by Meta and its open-source community. Available now as the latest stable version, this update introduces critical architectural shifts, modernizes internal tooling, and raises minimum requirements across both Android and iOS ecosystems. Most notably, version 0.87 transitions the Strict TypeScript API to the default JavaScript interface, introduces experimental integration with the Swift Package Manager (SwiftPM), upgrades Metro to version 0.87, and adds official support for the Android Gradle Plugin (AGP) version 9. Concurrently, version 0.84.x has officially reached its end-of-support lifecycle, pushing developers to transition to the newly minted standard.

Main Facts and Core Upgrades

At the core of the React Native 0.87 release is a deliberate push toward stronger typing, cleaner build pipelines, and faster dependency management. The headline feature is the widespread adoption of the Strict TypeScript API as the default for all new and existing projects. Originally introduced as an opt-in preview alongside the deprecation of deep imports in version 0.80, this strict typing format is now baked directly into the public JavaScript API.

The transition brings enhanced IDE experiences, providing rich doc comments on symbols such as the TextInput component, which now surfaces full type information and contextual documentation directly on hover. To assist development teams with this transition, maintainers have provided both ESLint fixers and an agent-driven upgrade skill via /migrate-to-strict-api. However, recognizing that enterprise applications and third-party libraries require time to adapt, the core team has implemented a temporary opt-in bridge. Developers can temporarily revert to legacy types by injecting the "react-native-legacy-deep-imports" custom condition into their tsconfig.json file, though this escape hatch is scheduled for removal in version 0.88.

Parallel to the TypeScript updates, version 0.87 elevates underlying performance through Metro 0.87, delivering a faster and leaner bundling engine. On the mobile platform fronts, iOS developers receive an experimental, additive alternative to CocoaPods via Swift Package Manager (SwiftPM). By leveraging prebuilt XCFrameworks, SwiftPM integration eliminates the need for Ruby, Bundler, and CocoaPods entirely, requiring only Xcode to manage native dependencies. Developers can execute a simple npx react-native spm --deintegrate command to transition existing projects without disrupting native signing, capabilities, or build phases. Subsequent native package installations automatically trigger autolinking without requiring manual pod install executions.

Chronology and Background Context

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

The journey toward React Native 0.87 has been shaped by months of community-driven proposals and architectural reviews. The groundwork for the Strict TypeScript API was laid in mid-2025 with the release of version 0.80, which signaled the systematic deprecation of deep imports and invited early adopters to test strict typing paradigms. Over subsequent minor releases, the core team collaborated closely with ecosystem partners to resolve incompatibilities across popular third-party libraries, culminating in the mandatory default status seen in version 0.87.

Similarly, the introduction of Swift Package Manager support stems from long-standing discussions within the iOS developer community regarding build times, dependency resolution bottlenecks, and the heavy dependency tree associated with Ruby and CocoaPods. Detailed in RFC #0994, the SwiftPM integration required a structural redesign of how React Native ships its precompiled binaries, dividing headers into dedicated frameworks to comply with SwiftPM’s rigorous module and header search path requirements.

On the Android side, the adoption of Android Gradle Plugin (AGP) 9 represents the framework’s ongoing synchronization with upstream Android development tooling. Because AGP 9 introduces fundamental breaking changes to Gradle build APIs, version 0.87 advises developers to temporarily opt out of built-in Kotlin and new DSL behaviors by configuring specific flags within their android/gradle.properties files. This transitional strategy aligns with RFC #1006, which tracks the broader ecosystem adaptation to AGP 9 ahead of its mandatory enforcement in future AGP 10.x releases.

Supporting Data and Ecosystem Metrics

React Native 0.87 is the collaborative product of 74 distinct contributors who collectively authored 265 commits for this release cycle. This high volume of contributions highlights the ongoing health and active engagement of the open-source community surrounding the framework.

To accommodate these modernizations, the minimum toolchain requirements have been systematically elevated. Developers upgrading to version 0.87 must ensure their development environments are equipped with Node.js 22, Android Gradle Plugin 9, and Kotlin 2.0 or higher. Furthermore, the sunsetting of version 0.84.x adheres to the established release and support policy maintained by the React Native Working Group, ensuring that core engineering resources remain concentrated on secure, modern, and high-performance iterations of the framework.

Broader Impact and Technical Implications

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

The architectural adjustments in React Native 0.87 carry significant implications for the broader mobile application development landscape. By shifting the Strict TypeScript API to the default setting, Meta is enforcing a higher standard of code predictability and developer ergonomics across the ecosystem. Strict typing reduces runtime errors, improves code maintainability in large-scale enterprise codebases, and bridges the gap between JavaScript development and native systems programming.

The experimental inclusion of Swift Package Manager is perhaps the most consequential structural change for iOS developers in recent years. For teams encumbered by CocoaPods’ Ruby runtime dependencies and intermittent installation failures, SwiftPM offers a streamlined, native-first alternative that integrates directly into Xcode project files. While still labeled as experimental—with known limitations regarding static library configurations and specific third-party module maps—this move signals a future where React Native development on macOS relies less on external package managers and more on Apple’s native toolchain standards.

Concurrently, the readiness for AGP 9 ensures that Android engineers can leverage the latest performance improvements from Google’s Android build ecosystem without lagging behind on framework updates. Although transitional flags like android.builtInKotlin=false and android.newDsl=false are currently required, they provide a necessary bridge for developers to refactor custom Gradle scripts before AGP 10 makes these behaviors permanent.

Upgrading and Getting Started

Projects seeking to migrate to React Native 0.87 are encouraged to utilize the official React Native Upgrade Helper to inspect diffs and manage breaking changes effectively. Developers initiating brand-new applications can initialize their projects via the command line using npx @react-native-community/cli@latest init MyProject --version latest. Meanwhile, the Expo ecosystem is slated to incorporate React Native 0.87 within its upcoming canary release channels, ensuring that managed workflow users will soon have access to these foundational enhancements.

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button