Mobile Development

React Native 0.87 Released With Strict TypeScript Default and Experimental Swift Package Manager Support

The core engineering team behind React Native has officially announced the global release of version 0.87, introducing major infrastructural shifts, modernized toolchain requirements, and developer experience enhancements designed to streamline cross-platform mobile development. The latest stable update transitions the Strict TypeScript API to the default JavaScript interface, updates the Metro bundler to version 0.87, and brings experimental support for Swift Package Manager (SwiftPM) as an alternative to CocoaPods on Apple’s iOS ecosystem.

With this rollout, older versions such as 0.84.x have officially reached end-of-life and transitioned into unsupported status under the project’s standard lifecycle support policy. Delivering 265 distinct commits contributed by 74 independent developers worldwide, version 0.87 reflects a continuous, community-driven effort to modernize the framework’s internals, reduce build-time friction, and ensure strict type safety across large-scale mobile applications.

Background Context and Evolution of the Framework

Since its open-source debut by Meta, React Native has evolved from a novel paradigm for building native applications using JavaScript into a foundational pillar of modern mobile engineering. Over the past several years, the core contributors have embarked on a multi-phase architectural overhaul—often referred to as the New Architecture—which includes the introduction of the Hermes JavaScript engine, JSI (JavaScript Interface), and a concurrent rendering system.

Version 0.87 represents a continuation of this modernization trend, specifically targeting developer tooling, static analysis safety, and dependency management. Historically, JavaScript-to-native bridges relied on loose typings and dynamic resolution methods that frequently led to runtime errors, difficult-to-trace bugs, and sluggish IDE autocompletion. The journey toward strict typing began in earnest with version 0.80, which introduced the Strict TypeScript API as an opt-in preview alongside the deprecation of deep imports. By graduation to version 0.87, the framework has deemed this API mature enough to become the default standard for all newly initialized and upgraded projects.

Main Facts of the 0.87 Release

The headline feature of React Native 0.87 is the elevation of the Strict TypeScript API to the default setting. Originally previewed in mid-2025, this shift standardizes public JavaScript APIs and cleans up root exports, eliminating legacy deep-import patterns that previously fragmented module resolution. Developers hovering over core components—such as the ubiquitous TextInput element—will now experience comprehensive type information, rich doc-comments, and precise property definitions directly inside their integrated development environments (IDEs).

To accommodate teams requiring a transitional runway, the core team has implemented a temporary opt-out mechanism. By inserting the "react-native-legacy-deep-imports" custom condition inside their tsconfig.json compiler options, development teams can temporarily fall back on legacy types. However, framework maintainers have explicitly noted that this bridge is strictly temporary and will be entirely purged in the subsequent 0.88 release.

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

Parallel to the TypeScript updates, Metro—the JavaScript bundler optimized specifically for React Native—has been upgraded from version 0.84 to 0.87. This update delivers performance enhancements, improved memory management during bundling phases, and tighter integration with modern package exports.

Experimental Swift Package Manager Integration

Perhaps the most structurally significant addition for iOS developers in version 0.87 is the introduction of experimental support for Swift Package Manager (SwiftPM). For nearly a decade, CocoaPods has served as the undisputed standard for managing native iOS dependencies within the React Native ecosystem. While CocoaPods remains fully supported and functions as the default path for this release, SwiftPM offers a streamlined, native alternative that eliminates reliance on Ruby, Bundler, and external gem management.

The new SwiftPM integration requires only Xcode to manage and compile dependencies. Developers can transition an existing workspace by running a dedicated CLI command: npx react-native spm --deintegrate. This command safely strips CocoaPods out of the project and injects Swift package references directly into the existing .xcodeproj file without disrupting code signing configurations, project capabilities, or build phases. Furthermore, the integration is fully reversible via the npx react-native spm deinit command.

Under the hood, implementing SwiftPM required a fundamental rethinking of how precompiled React Native binaries are distributed. Because SwiftPM enforces much stricter structural requirements on XCFrameworks and header locations than CocoaPods, the framework team introduced dedicated header-only XCFrameworks. This guarantees that every namespace maintains a single physical home, resolving header files cleanly through standard framework search path mechanics. Consequently, developers must adopt standard angle-bracket namespace imports in their native Objective-C or C++ files—transitioning, for instance, from #import <RCTAppDelegate.h> to #import <React/RCTAppDelegate.h>.

Elevated Minimum Toolchain Requirements and Android Upgrades

In lockstep with its modernization of iOS tooling, React Native 0.87 raises the baseline requirements for developer toolchains across both major mobile platforms. To leverage the performance and security improvements of the latest build systems, the minimum required versions have been elevated to Node.js 22, the Android Gradle Plugin (AGP) version 9, and Kotlin 2.0 or higher.

The adoption of AGP 9 marks a notable milestone for Android developers. Because AGP 9 introduces substantial breaking changes and shifts in Gradle build APIs, the React Native core team has recommended an explicit opt-out strategy for built-in Kotlin and new DSL behaviors during the initial upgrade phase. Developers are advised to append specific flags—android.builtInKotlin=false and android.newDsl=false—to their android/gradle.properties files. These temporary flags ensure backward compatibility while the broader ecosystem transitions to native AGP 9 standards, with full removal anticipated in future AGP 10.x releases.

Chronology and Upgrade Path

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

The release cycle for version 0.87 follows a predictable cadence established by the React Native Working Group. Following months of testing in canary channels and community RFC discussions—specifically RFC #0994 regarding SwiftPM and RFC #1006 regarding AGP 9 adoption—the stable build was published to npm. Concurrently, version 0.84.x transitioned out of the active support window, leaving 0.87 as the primary supported stable release.

Upgrading existing applications requires careful coordination, particularly for projects heavily reliant on third-party native libraries that have not yet adopted the Strict TypeScript API or AGP 9. Engineers are encouraged to utilize the official React Native Upgrade Helper to audit diffs between versions. For automated migrations, agent-driven workflows can leverage specialized tooling, such as the /migrate-to-strict-api skill, which applies direct structural fixes alongside standard ESLint automation rules.

New projects can be initialized immediately using the updated command-line interface:
npx @react-native-community/cli@latest init MyProject --version latest
Meanwhile, developers working within the Expo ecosystem can anticipate React Native 0.87 integration rolling out through upcoming expo@canary and SDK release cycles.

Broader Industry Implications and Analysis

The release of React Native 0.87 underscores a broader industry-wide push toward type safety, developer velocity, and the reduction of configuration overhead in cross-platform development. By embedding strict typing into the core framework by default, Meta and the React Native open-source community are signaling that enterprise-grade reliability must take precedence over frictionless backward compatibility. This alignment brings React Native closer to the strict static analysis paradigms found in modern web development frameworks like Next.js and backend ecosystems built on TypeScript.

Simultaneously, the introduction of experimental Swift Package Manager support addresses long-standing developer friction points regarding iOS build environments. By removing the mandatory dependency on Ruby and CocoaPods, teams can onboard junior engineers and configure continuous integration (CI) pipelines with significantly fewer points of failure. While adoption of SwiftPM remains experimental in 0.87, its introduction points toward a future where native iOS integration for React Native mirrors the clean, native tooling native iOS developers expect.

As the mobile engineering landscape continues to prioritize faster compilation times, smaller bundle sizes, and robust type definitions, React Native 0.87 positions itself as a critical transitional milestone. It bridges legacy workflows with next-generation tooling, providing a stable, high-performance foundation for the next generation of cross-platform applications.

Related Articles

Leave a Reply

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

Back to top button