React Native 0.86 - Edge-to-Edge and DevTools Improvements, no breaking changes · React Native
Skip to main content<br>Re-watch the latest React Native Keynote from React Conf 2025
Today we are excited to release React Native 0.86!
This release includes comprehensive edge-to-edge support on Android 15+ and improvements in React Native DevTools.
Following 0.83, this is the second React Native release with no user-facing breaking changes, reflecting our continued commitment to making upgrades more predictable and seamless.
Highlights
A New Home for React Native
Edge-to-Edge on Android
React Native DevTools Improvements
A New Home for React Native
The React Native repository, together with React, Metro, Yoga and the React Native Website, has moved from the facebook GitHub organization to the react organization. This move reflects the transition of React and React Native to the React Foundation, an independent foundation dedicated to the long-term stewardship of the React ecosystem.
GitHub will automatically redirect all existing URLs, issues and PRs to the new location, so no action is required on your part.
Edge-to-Edge on Android
React Native 0.86 ships comprehensive fixes for Android 15+ edge-to-edge mode, including when it's enforced by the OS but not explicitly enabled via the edgeToEdgeEnabled Gradle property.
Key fixes include:
measureInWindow now returns correct coordinates when edge-to-edge is enabled.
KeyboardAvoidingView works correctly on Android 15+ with edgeToEdgeEnabled.
Dimensions window values are accurate on Android versions prior to 15 when edge-to-edge is enabled.
StatusBar now supports updating status bar style and visibility while a Modal is open.
Navigation bar contrast respects the theme's enforceNavigationBarContrast attribute.
React Native DevTools Improvements
React Native DevTools now supports light/dark mode emulation via Emulation.setEmulatedMedia, allowing you to test your app's appearance mode handling directly from DevTools without changing your device settings. Use cmd/ctrl + shift + P to access from the Command Palette.
As with the web, this is a temporary switch that will reset when DevTools is disconnected.
Breaking Changes
React Native 0.86 has no user-facing breaking changes .
If you are on React Native 0.85, you should be able to upgrade your app to React Native 0.86 without any changes to your app code.
To learn more about what we consider a breaking change, have a look at this article.
Deprecations
The following APIs have been deprecated and are due for removal in a future release of React Native:
ViewUtil.getUIManagerType : As part of the removal of the legacy architecture, this API is now deprecated. You can inline UIManagerType.Fabric directly or remove the checks on the UIManagerType altogether.
AppRegistry : The second argument of AppRegistry.setComponentProviderInstrumentationHook is now deprecated and will warn if used.
Other Changes
Runtime & Web Spec Alignment
ExceptionsManager.reportErrorsAsExceptions strictness : Setting reportErrorsAsExceptions to anything other than false no longer does anything. Previously, any falsy value (like 0, null or "") would disable error-to-exception conversion. Now only the explicit boolean false opts out, making the API less error-prone.
PerformanceObserver default durationThreshold : observe({type: 'event'}) now correctly defaults durationThreshold to 104ms per the W3C Event Timing spec, instead of reporting all events. This aligns React Native's Performance API with web standards and reduces noise from very short events.
Rendering, Layout & Animation
Modal Components style prop : The style prop is now forwarded to Modal's inner container View, allowing custom styling (e.g., padding, background colors) without overriding transparent or backdropColor behavior.
Animated mounting layer sync : Enabled a mounting layer synchronization so Native Animated synchronous updates are not overridden by later React commits. This fixes a flicker where animated views could briefly jump back to their pre-animation values.
Text measurement crash : Fixed a crash when measuring text on a surface that had already been stopped.
Non-invertible transform touch fix : Views with non-invertible transforms (e.g., scaleX: 0 or scaleY: 0) no longer receive touches on Android or iOS. Hit-testing now detects when a transform matrix can't be inverted and skips those views.
Yoga Layout fixes : Fixed several layout regressions related to Yoga such as text wrapping in absolutely positioned elements on Android (#56651), a crash with Android's BoringLayout.isBoring() with a negative width (#56007) and fixed ownership of nodes with display: contents nodes (#56422).
Accessibility
Unresolved promises : Fixed AccessibilityInfo.isDarkerSystemColorsEnabled, isHighTextContrastEnabled and prefersCrossFadeTransitions returning promises that never resolved on unsupported platforms. They now resolve to false instead of hanging...