React Native 0.87.0
Remember when React Native shipped with a JavaScript API that barely had types, and the bridge was the only game in town? 0.87.0 closes that era for good. This is the release where the Strict TypeScript API becomes the default surface of the framework, and the legacy architecture keeps getting carved out of the codebase.
The Big Shift: Strict TypeScript by Default
Since the new architecture landed in 0.74, the momentum has been one-directional: typed, modern, lean. With 0.87.0, React Native's default JavaScript API is the Strict TypeScript API. Deep imports to react-native/src/private/... are no longer visible to TypeScript, and the legacy NativeMethods and NativeMethodsMixin types are gone. If you need the old escape hatch, opt out with customConditions: ["react-native-legacy-deep-imports"].
Breaking Changes to Plan For
- Node.js >= 22.13.0 is now required
- useColorScheme() return type is now ColorSchemeName | null — the "unspecified" sentinel is gone
- Legacy Hermes removed from the C++ codebase; Hermes V1 bumped to 250829098.0.13 with the "hermes-stable" transform profile as default
- StatusBar deprecated props (backgroundColor, translucent, networkActivityIndicatorVisible) and their setter methods are removed
- ScrollView no longer accepts boolean values for keyboardShouldPersistTaps
- SceneTracker removed; runApplication no longer sets the active scene
- NativeDialogManagerAndroid export removed; undocumented Touchable root export removed (use ViewProps)
- Polyfills & Jest: rn-get-polyfills replaced by the js-polyfills package; the jest-preset file must be migrated to the package
- DevTools: standalone react-devtools WebSocket connections are no longer supported
- core-cli-utils is no longer published as a package
What Was Added
- StatusBar barStyle="auto" follows the current color scheme
- Text gains textAlign start/end plus full textDecorationStyle support (solid, double, dotted, dashed, wavy)
- MapBuffer adds IntBuffer and DoubleBuffer entry types; TurboModules gain ArrayBuffer support in both C++ and ObjC
- Yoga implements CSS Flexbox automatic minimum sizing (opt-in via YGErrataMinSizeUndefinedInsteadOfAuto)
- Animated supports native-driven interpolation easing, with flush-queue debouncing and the C++ animated flag on by default
Android and iOS Notes
Android adopts AGP v9 with compileSdk and buildTools 37, and requests ACCESS_LOCAL_NETWORK so the dev server stays reachable on Android 17. iOS ships version-stamped prebuilt core artifacts and fails closed with an actionable error if the SwiftPM autolinking config command fails.
What began as a bridge-based mobile SDK has become a typed, new-architecture framework. 0.87.0 is the release where that transition stops being optional for most teams. Use the Upgrade Helper, and budget time for the breaking changes — especially the strict TypeScript surface.