Mobile Development

React Native 0.87 Arrives with Strict TypeScript by Default, SwiftPM Support, and Raised Toolchain Baselines

The cross-platform mobile development landscape is shifting once again as the React Native core team officially announces the release of version 0.87. This major update brings several foundational changes aimed at modernizing the developer experience, improving performance, and aligning the framework with contemporary native ecosystem standards. Among the most notable updates in version 0.87 are the promotion of the Strict TypeScript API as the default JavaScript interface, an update to the Metro bundler, experimental integration for the Swift Package Manager (SwiftPM) on iOS, and essential bumps to minimum toolchain requirements across both Android and iOS environments.

As mobile applications grow increasingly complex, the demand for robust type safety, streamlined build tools, and simplified dependency management has never been higher. Version 0.87 addresses these demands head-on, reflecting months of collaborative engineering between core maintainers, community partners, and enterprise contributors. With 265 commits contributed by 74 developers, this release signifies a concerted push toward a more standardized, performant, and type-safe ecosystem.

Main Facts and Core Upgrades of Version 0.87

At the heart of the React Native 0.87 release is a series of structural enhancements designed to remove technical debt and enforce modern coding practices. The transition of the Strict TypeScript API from an opt-in preview—first introduced in version 0.80 alongside the deprecation of deep imports—to the default JavaScript API stands out as the most impactful change for application developers.

By making the Strict API the default, the core team is enforcing intentional breaking changes across the public API surface. This shift brings significant engineering payoffs, most notably enhanced IDE tooling and documentation support. Developers hovering over components such as TextInput will now see comprehensive type information and integrated documentation comments directly within their development environments, eliminating the guesswork often associated with legacy dynamic types.

To ease the transition for large-scale codebases that cannot migrate immediately, maintainers have included a temporary opt-out mechanism. By incorporating the "react-native-legacy-deep-imports" custom condition into the compilerOptions of a project’s tsconfig.json file, teams can temporarily revert to legacy types. However, this bridge is strictly temporary; the core team has confirmed that legacy TypeScript types will be permanently removed in the subsequent 0.88 release. Furthermore, agent-driven upgrades can leverage specialized migration skills, such as the /migrate-to-strict-api command, to automate the application of ESLint fixers and direct code refactoring.

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

In addition to TypeScript enhancements, version 0.87 updates the Metro bundler from version 0.84 to 0.87. This update delivers a faster, leaner bundling experience, reducing build latency and improving memory efficiency during local development and production compilation cycles.

Experimental Swift Package Manager Support Transforms iOS Workflows

For iOS developers, React Native 0.87 introduces a highly anticipated experimental feature: native support for the Swift Package Manager (SwiftPM) as an alternative to CocoaPods. Historically, React Native projects on Apple platforms have relied heavily on CocoaPods for native dependency management, a system that requires Ruby, Bundler, and a separate pod install execution step after every dependency modification.

The new SwiftPM integration is fully additive and opt-in, allowing CocoaPods to remain the default supported path for the time being. However, the introduction of SwiftPM offers a streamlined alternative that interacts directly with prebuilt XCFrameworks published by React Native. By running a single command (npx react-native spm --deintegrate), developers can inject Swift package references directly into their existing .xcodeproj files without disrupting code signing, app capabilities, or build phases.

A major advantage of this experimental workflow is the elimination of repetitive dependency installation commands. Once initialized, adding or removing a native package automatically triggers autolinking during the standard build process, removing the need to remember manual post-installation steps. To accommodate this architectural shift, React Native has restructured its precompiled binaries, introducing header-only frameworks to satisfy SwiftPM’s strict requirements regarding XCFramework structure and header locations. While the content of these headers remains byte-identical to legacy pods, developers utilizing bare-form angle brackets for imports will need to update their syntax to include standard namespace prefixes (e.g., changing #import <RCTAppDelegate.h> to #import <React/RCTAppDelegate.h>).

Android Ecosystem Evolution: Android Gradle Plugin 9

On the Android side of the ecosystem, React Native 0.87 marks the official introduction of support for the Android Gradle Plugin (AGP) 9.0. As a major release from Google, AGP 9 brings a series of profound API updates and breaking changes to Gradle build mechanics.

Because AGP 9 introduces fundamental shifts in how builds are processed, the React Native core team recommends that developers temporarily opt out of built-in Kotlin and new Domain-Specific Language (DSL) behaviors shipped natively with AGP 9. Projects can achieve this stability by appending specific property flags—android.builtInKotlin=false and android.newDsl=false—into their android/gradle.properties configuration files. Maintainers have noted that these opt-out bridges will be phased out in future AGP 10.x releases as ecosystem-wide adoption solidifies.

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

Minimum Toolchain Requirements and Breaking Changes

To support modern APIs and performance optimizations, version 0.87 raises the minimum toolchain requirements across the board. Developers must now upgrade their development environments to meet higher baselines:

  • Node.js: Minimum version raised to Node.js 22.
  • Android Development: Android Gradle Plugin (AGP) upgraded to version 9, alongside mandatory adoption of Kotlin 2.0 or higher.
  • iOS Development: Aligned with modern Xcode toolchain standards to support SwiftPM integration.

Alongside these baseline shifts, version 0.87 implements several API removals and deprecations to clean up the framework’s internal architecture. Outdated modules and legacy bridging utilities that have lingered through previous deprecation cycles have been permanently purged. These removals are designed to reduce the overall binary footprint of React Native applications and improve runtime execution speeds on both mobile operating systems.

Chronology, Upgrade Paths, and Industry Implications

The release of React Native 0.87 follows a predictable yet accelerated release cadence maintained by the core engineering group. Following the initial preview of the Strict TypeScript API in version 0.80, community feedback and extensive testing paved the way for its mandatory default status in this current build. With version 0.87 now reigning as the latest stable release, the older 0.84.x branch has officially transitioned to an unsupported status in accordance with the project’s formal support lifecycle policy.

For engineering teams looking to adopt version 0.87, the upgrade path involves a combination of automated tooling and manual code adjustments. Existing projects are advised to utilize the official React Native Upgrade Helper to inspect exact code diffs between versions. New projects can be initialized immediately via the command line interface using npx @react-native-community/cli@latest init MyProject --version latest, while developers utilizing the Expo ecosystem can anticipate integration within upcoming expo@canary releases.

The broader implications of React Native 0.87 point toward a more disciplined, type-safe, and tooling-agnostic future for cross-platform mobile development. By embracing modern JavaScript typing standards, reducing reliance on legacy Ruby-based dependency managers on iOS, and staying synchronized with the latest Android build pipelines, the React Native maintainers are ensuring that the framework remains competitive against native development and alternative cross-platform ecosystems. As enterprises increasingly demand robust maintainability and high performance, updates like version 0.87 provide the necessary structural integrity to build scalable, long-lasting mobile applications.

Related Articles

Leave a Reply

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

Back to top button