React Native 0.87 Arrives with Strict TypeScript as Default and Experimental Swift Package Manager Support

The cross-platform mobile development landscape shifted this week with the official release of React Native 0.87. This major update brings several foundational changes to how developers build applications for iOS and Android, headlined by the transition of the Strict TypeScript API into the default JavaScript interface. Alongside this modernization of type safety, the framework introduces a significant modernization of its underlying tooling, updating the Metro bundler to version 0.87, adding experimental support for the Swift Package Manager (SwiftPM) on Apple platforms, and raising minimum toolchain requirements across the board to include Node.js 22, Android Gradle Plugin (AGP) 9, and Kotlin 2.0 or higher.
The release marks the culmination of months of community collaboration, rigorous testing, and phased deprecations designed to align React Native with modern JavaScript and native ecosystem standards. According to project maintainers, version 0.87 features contributions from 74 developers who committed 265 code changes, reflecting the continued momentum of the open-source framework originally created by Meta.
Transitioning to Strict TypeScript as the Default
The most prominent developer-facing change in React Native 0.87 is the promotion of the Strict TypeScript API to the default JavaScript interface. Originally introduced as an opt-in preview in version 0.80 alongside the deprecation of deep imports, the Strict API is now mandatory for all new and upgraded projects unless developers explicitly opt out.
This ecosystem-wide transition carries intentional breaking changes across the API surface, designed to improve code reliability, autocomplete accuracy, and documentation visibility within Integrated Development Environments (IDEs). For instance, hovering over core components like TextInput under the new strict types now displays comprehensive inline documentation and type signatures—a stark contrast to legacy setups where symbols often lacked detailed metadata.
To ease the migration burden for development teams, the React Native core team has worked closely with community partners to finalize root exports and resolve compatibility issues with widely used third-party libraries. Furthermore, to assist with large-scale codebases, the ecosystem has introduced automated tooling, including an agent-driven upgrade skill available via /migrate-to-strict-api, which works in tandem with existing ESLint fixers to automate much of the refactoring process.
For organizations requiring more time to adapt their codebases, maintainers have provided a temporary escape hatch. Developers can maintain legacy deep imports through the 0.88 release cycle by adding the "react-native-legacy-deep-imports" custom condition to their tsconfig.json file. However, project maintainers have emphasized that this bridge is strictly temporary, with complete removal of the legacy types scheduled for the subsequent major release.
Modernizing iOS Integration with Experimental Swift Package Manager Support
On the iOS front, React Native 0.87 introduces experimental support for the Swift Package Manager (SwiftPM) as an alternative to CocoaPods. This represents a major architectural milestone for iOS builds, offering a native dependency management solution that eliminates the need for Ruby, Bundler, and CocoaPods entirely, relying solely on Xcode.

The SwiftPM integration is implemented as an additive, opt-in feature rather than a forced replacement. Developers can transition an existing or new project by running a single command (npx react-native spm --deintegrate), which injects Swift package references directly into the existing .xcodeproj file without disrupting user-defined code signing configurations, capabilities, or custom build phases. Reversing the operation is equally straightforward via a corresponding initialization command.
A key advantage of this new integration workflow is the elimination of repetitive build commands. Unlike CocoaPods, which typically requires developers to execute pod install whenever native dependencies change, the SwiftPM integration relies on project-level detection to automatically trigger autolinking during the standard build process.
To achieve seamless compatibility with SwiftPM—which enforces stricter validation rules regarding XCFramework structures and header paths than CocoaPods—the React Native core team re-engineered how precompiled binaries are distributed. This restructure introduced new header-only XCFrameworks designed to normalize search paths and ensure every namespace maintains a single physical home. Consequently, developers adopting the new packaging may need to update their Objective-C or C++ import statements from bare-form angle brackets (such as #import <RCTAppDelegate.h>) to their fully qualified namespace equivalents (such as #import <React/RCTAppDelegate.h>).
Android Toolchain Evolution and AGP 9 Support
Android developers also see substantial changes in version 0.87, which marks the framework’s inaugural support for the Android Gradle Plugin (AGP) 9. As a major release in the Android build ecosystem, AGP 9 introduces significant API adjustments and breaking build changes.
To ensure a smooth upgrade path and prevent immediate build regressions across existing applications, the React Native team recommends that developers temporarily opt out of AGP 9’s built-in Kotlin support and new DSL behavior. By appending specific flags (android.builtInKotlin=false and android.newDsl=false) to the android/gradle.properties file, teams can maintain build stability while the broader React Native community works toward full, native adoption of AGP 9 standards, an initiative tracked publicly under RFC #1006.
Alongside AGP 9 support, version 0.87 raises baseline requirements across the entire build toolchain. Minimum supported versions now officially stand at Node.js 22 and Kotlin 2.0+, reflecting a broader industry push toward modern runtimes and language features that offer superior performance, enhanced security patches, and advanced compiler optimizations.
Performance Enhancements via Metro 0.87
Under the hood, the Metro JavaScript bundler has been upgraded from version 0.84 to 0.87. This update brings incremental performance improvements to bundling speeds, reduced memory overhead during hot reloading, and better asset resolution handling. The leaner bundling pipeline is designed to mitigate the compilation bottlenecks often encountered in large-scale enterprise applications containing thousands of modules.
Background Context and Chronology of the Release Cycle
The release of React Native 0.87 follows a predictable cadence established by the React Native release working group, which aims to deliver frequent, predictable updates that progressively modernize the framework’s core architecture. Version 0.84, which served as the previous stable standard, has now officially transitioned to unsupported status in accordance with the project’s formal support lifecycle policy.

The journey toward Strict TypeScript began in mid-2025 with version 0.80, which laid the groundwork by deprecating deep imports and introducing the preview types. Over the subsequent minor releases, feedback from major ecosystem stakeholders—including Expo, Shopify, and Microsoft—helped refine the type definitions and eliminate edge-case compilation errors.
Concurrently, the exploration of SwiftPM addresses long-standing developer pain points related to CocoaPods maintenance, Ruby environment management, and Xcode workspace synchronization issues that have historically complicated iOS onboarding for cross-platform developers.
Implications for the Cross-Platform Development Ecosystem
The enforcement of stricter type definitions and the elevation of minimum toolchain requirements signal a maturing ecosystem where developer ergonomics and build-time safety take precedence over backwards compatibility with legacy configurations.
While the transition to Strict TypeScript and AGP 9 may require engineering teams to allocate dedicated sprint time for refactoring and dependency audits, the long-term implications are overwhelmingly positive. Enhanced IDE autocomplete, fewer runtime type errors, and leaner build pipelines directly address developer productivity bottlenecks. Furthermore, the introduction of SwiftPM paves the way for a more streamlined, Ruby-free iOS build infrastructure that aligns more closely with native Apple development paradigms.
Upgrading and Availability
React Native 0.87 is available immediately as the latest stable release. Existing projects can plan their migration by utilizing the official React Native Upgrade Helper to identify targeted code changes, alongside documentation for addressing breaking changes and API removals.
For developers initiating new projects, initialization is supported via the updated command line interface (npx @react-native-community/cli@latest init MyProject --version latest). Meanwhile, users of the Expo ecosystem can expect React Native 0.87 integration to roll out through upcoming expo@canary and stable SDK release channels.







