React Native 0.87 Arrives with Strict TypeScript by Default, Swift Package Manager Support, and Higher Toolchain Requirements

The release of React Native 0.87 marks a significant milestone for the cross-platform framework, introducing the Strict TypeScript API as the default JavaScript environment alongside experimental support for the Swift Package Manager (SwiftPM) on iOS. This latest stable update also brings a major upgrade to Metro 0.87 and raises the foundational toolchain requirements for developers globally, phasing out support for older development environments. With 265 commits contributed by 74 developers, version 0.87 focuses heavily on type safety, modernization of native build pipelines, and ecosystem-wide alignment with contemporary mobile development standards.
Main Facts and Core Upgrades of Version 0.87
At the heart of the React Native 0.87 release is the transition of the framework’s public JavaScript API to the Strict TypeScript API. Originally introduced as an opt-in preview alongside the deprecation of deep imports in version 0.80, this strict typing system is now enabled by default for all new and upgraded projects. This ecosystem-wide shift introduces intentional breaking changes designed to clean up the API surface and provide developers with vastly improved tooling support, such as inline documentation and comprehensive type information visible upon hovering over components like TextInput.
To accommodate teams that require additional time to transition their codebases, the core maintainers have implemented a temporary opt-in bridge. Developers can revert to legacy types through version 0.88 by adding a custom condition ("react-native-legacy-deep-imports") to their tsconfig.json file. However, the legacy TypeScript types are scheduled for permanent removal in the subsequent release.
Concurrently, version 0.87 upgrades the Metro JavaScript bundler from version 0.84 to 0.87, bringing performance enhancements and a leaner execution footprint. On the mobile native side, the framework introduces experimental support for Swift Package Manager as an additive alternative to CocoaPods on iOS, alongside official support for the Android Gradle Plugin (AGP) version 9.

Chronology and Development Background
The journey toward React Native 0.87 has been shaped by a multi-phase architectural modernization effort spearheaded by Meta and the broader React Native community. The foundation for strict typing was laid several versions prior, notably in version 0.80, where deep imports were deprecated to encourage cleaner module consumption and prepare the ecosystem for strict type definitions. Throughout subsequent point releases, maintainers collaborated closely with library authors and corporate partners to resolve compatibility bottlenecks and finalize root exports.
The introduction of Swift Package Manager support stems from long-standing developer feedback regarding the complexity and friction of maintaining Ruby-based dependency management via CocoaPods in complex iOS projects. By adopting SwiftPM—which consumes the prebuilt XCFrameworks already published by React Native—the core team aims to streamline iOS project setup, requiring only Xcode without external dependencies like Ruby or Bundler.
Similarly, the integration of AGP 9 addresses the fast-moving Android build ecosystem. Because AGP 9 introduces significant API and breaking changes, the React Native team has recommended specific temporary flags (android.builtInKotlin=false and android.newDsl=false) within gradle.properties files to ensure a stable transition path ahead of AGP 10.
Raised Toolchain Requirements and Breaking Changes
To support modern language features and performance optimizations, React Native 0.87 enforces stricter minimum toolchain requirements across the board. Developers must now upgrade their development environments to Node.js 22, Android Gradle Plugin 9, and Kotlin 2.0 or higher. Furthermore, version 0.84.x has officially transitioned to an unsupported status in accordance with the project’s formal support policy, making 0.87 the current baseline for enterprise and independent production applications.
The architectural changes required to support Swift Package Manager also necessitated a restructuring of how precompiled binaries are delivered. Because SwiftPM enforces stricter validation rules regarding XCFramework structures and header locations compared to CocoaPods, maintainers introduced dedicated header-only frameworks. While these files are byte-identical to their source pod counterparts, developers must update their native Objective-C/C++ imports from bare-form angle brackets (e.g., #import <RCTAppDelegate.h>) to namespace-qualified paths (e.g., #import <React/RCTAppDelegate.h>).

Broader Impact and Implications for the Ecosystem
The enforcement of the Strict TypeScript API and the adoption of modern build tools signal a maturing ecosystem focused on long-term maintainability, developer ergonomics, and build reliability. Type-safe component props and rich IDE tooltips drastically reduce runtime errors and accelerate onboarding for developers working on large-scale applications.
The experimental integration of Swift Package Manager represents a potential paradigm shift for iOS development within the React Native ecosystem. By eliminating the necessity of CocoaPods for compatible workflows, teams can look forward to simplified continuous integration (CI) pipelines, reduced dependency resolution overhead, and a closer alignment with native Apple ecosystem tooling.
For Android developers, navigating the AGP 9 upgrade path lays the groundwork for leveraging upcoming Android Studio features and performance improvements, though migration planning remains crucial for projects with heavily customized native build scripts.
Upgrade Paths and Community Adoption
Upgrading existing projects to React Native 0.87 can be facilitated using the official React Native Upgrade Helper, which outlines necessary code modifications between versions. For automated migrations, agent-driven workflows can leverage specialized community skills such as /migrate-to-strict-api alongside standard ESLint fixers to streamline the transition to strict typing. New project initialization can be executed via the updated command line interface using npx @react-native-community/cli@latest init MyProject --version latest, while Expo users can anticipate integration through upcoming expo@canary release cycles.







