icon

React Native 0.87: Key Features and Updates Developers Should Know

Full-width decorative image

A React Native upgrade can fail at the toolchain level before it reaches your code. You bump the version, and the build fails on a Node check, a Gradle flag, or a TypeScript error in a file nobody has opened for a year. React Native 0.87 follows that pattern. It adds several features while raising the minimum requirements for every project.

Five checks cover the React Native 0.87 breaking changes that can affect your build, types, runtime code, and iOS code. Run them in this order: Node.js 22.13 or higher, the two AGP 9 flags in gradle.properties, deep imports that now cause type errors, calls to the removed InteractionManager, and bare header imports in native iOS code. The sections below explain how to address each issue.

 

What’s New in React Native 0.87?

React Native 0.87 shipped on August 11, 2026, with 265 commits from 74 contributors. The release post highlights four major changes: the Strict TypeScript API becoming the default, Metro 0.87, experimental Swift Package Manager support for iOS, and support for Android Gradle Plugin (AGP) 9.

If you are running 0.84.x, that version is now unsupported. The release post also states that 0.87 would reach Expo projects through expo@canary releases.

One more release matters. The legacy TypeScript opt-out will remain available through 0.88 and is planned for removal in the following release. Teams should use this period to complete the migration.

 

Key Features and Improvements

Strict TypeScript API

The types now come directly from React Native’s source code. Previously, maintainers wrote them separately, which meant they could drift from the actual implementation. The API covers only what React Native exports from its root, so changes to internal files no longer affect the types. Refs also get dedicated types, such as ViewInstance and TextInputInstance.

Metro 0.87

The release post reports that source map generation is 2x faster and memory usage is reduced by half. It also links the faster source maps to quicker React Native DevTools loads. These are figures reported in the release post, not independent benchmarks, so measure the impact on your own repository. Configuration files can now use TypeScript or ESM, such as metro.config.mts. YAML configuration files and .es6 files are no longer supported.

Swift Package Manager

In an existing app, run npx react-native spm --deintegrate once to remove the existing CocoaPods integration and set up Swift Package Manager. After a fresh clone or in CI, run npx react-native spm before building. This removes the need for Ruby, Bundler, and CocoaPods for the Swift Package Manager setup.

The release post marks Swift Package Manager support as experimental and recommends keeping it out of production for now. CocoaPods remains the default. A community library must include a Package.swift file to work with Swift Package Manager. If it does not, you can generate one with npx react-native spm scaffold. Test the setup on a separate branch before using it in your main project.

AGP 9

React Native 0.87 is the first release with support for AGP 9. The React Native team currently recommends opting out of two AGP 9 behaviors.

 

Changes Developers Should Consider

Run these five checks in order.

  1. Node and Kotlin. Node.js 22.13.0 or higher is required. Update your CI images first. On Android, Kotlin 2.0 or higher is required, and compileSdk and buildTools must be set to 37.
  2. Gradle flags. Add the two AGP 9 lines mentioned above. Library authors must target compileSdk 34 or higher.
  3. Deep imports. Imports from react-native/Libraries/* now cause type errors. Update these imports to use supported public APIs. If you cannot migrate immediately, you can set customConditions in tsconfig.json. This opt-out affects TypeScript analysis in your own project, while apps and libraries can migrate independently. Replace *Properties aliases, such as ViewProperties, with the corresponding *Props types.
  4. Removed APIs. InteractionManager has been removed, so use requestIdleCallback instead. The animated prop on Modal, the backgroundColor and translucent props on StatusBar, and boolean values for keyboardShouldPersistTaps have also been removed. useColorScheme() now returns a color scheme name or null and no longer returns 'unspecified'. ImageBackground is deprecated but has not been removed. Consider using a View with an absolutely positioned Image instead.
  5. iOS headers. Native modules that import React Native headers without the required namespace must be updated. For example, change #import <RCTAppDelegate.h> to #import <React/RCTAppDelegate.h>.
Tooling has changed as well. The rn-get-polyfills package has been removed, so use @react-native/js-polyfills instead. Connecting the standalone react-devtools package over WebSocket is no longer supported. Use React Native DevTools instead. You should also check your Jest setup. The old fallback for the Jest preset has been removed, so install @react-native/jest-preset as a package.

Before changing your app code, check your dependencies and use the React Native Upgrade Helper to review the file differences between versions. Libraries add support on their own schedules, so check the compatibility requirements for your major dependencies before upgrading.

 

Choosing the Right Approach for a React Native Upgrade

React Native upgrades can affect both the JavaScript codebase and the native Android and iOS projects. Before moving to 0.87, it helps to check the current React Native version, dependencies, build tools, and native configurations.

Appzoc is a native app development company in India, based in Kochi that develops native iOS and Android applications for different business requirements.

As a mobile app development company, Appzoc also develops cross-platform applications using technologies such as React Native and Flutter. For existing React Native projects, reviewing the current dependencies, build configuration, and native setup before an upgrade can help identify compatibility issues and ensure a smoother migration to React Native 0.87.

 

Conclusion

React Native 0.87 is primarily a maintenance-focused release, and that is fine. The change that matters most is that the Strict TypeScript API is now enabled by default, making TypeScript type checking stricter without additional setup. On the tooling side, iOS gets opt-in, experimental Swift Package Manager support, while CocoaPods remains the default. React Native 0.87 is also the first release with support for Android Gradle Plugin 9.

Some APIs have also changed. InteractionManager has been removed in favour of requestIdleCallback, while ImageBackground is deprecated. Check how your project uses these APIs before upgrading. It is also worth running your types against the new API and checking whether your dependencies, including libraries such as Reanimated, support React Native 0.87 before committing to the upgrade.

WhatsApp