Skip to content

Commit 0e43212

Browse files
committed
Add React Native 0.86 release blog post
Covers edge-to-edge improvements on Android 15+, DevTools light/dark mode emulation, deprecations, and other changes including JSI API additions, networking fixes and accessibility improvements.
1 parent f5bb54d commit 0e43212

1 file changed

Lines changed: 146 additions & 0 deletions

File tree

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
---
2+
title: 'React Native 0.86 - Edge-to-Edge and DevTools Improvements, no breaking changes'
3+
authors: [fabriziocucci, zoontek, gabrieldonadel]
4+
tags: [announcement, release]
5+
date: 2026-06-10
6+
---
7+
8+
# React Native 0.86 - Edge-to-Edge and DevTools Improvements, no breaking changes
9+
10+
Today we are excited to release React Native 0.86!
11+
12+
This release includes comprehensive edge-to-edge support on Android 15+ and performance tracing improvements in React Native DevTools.
13+
14+
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.
15+
16+
### Highlights
17+
18+
- [Edge-to-Edge on Android](/blog/2026/06/10/react-native-0.86#edge-to-edge-on-android)
19+
- [React Native DevTools: Performance Tracing](/blog/2026/06/10/react-native-0.86#react-native-devtools-performance-tracing)
20+
21+
{/* truncate */}
22+
23+
## Highlights
24+
25+
### Edge-to-Edge on Android
26+
27+
React Native 0.86 ships comprehensive fixes for Android 15+ edge-to-edge mode, where the system enforces edge-to-edge display even when apps don't explicitly opt in.
28+
29+
Key fixes include:
30+
31+
- **`measureInWindow`** now returns correct coordinates when edge-to-edge is enabled.
32+
- **`KeyboardAvoidingView`** works correctly on Android 15+ with `edgeToEdgeEnabled`.
33+
- **`Dimensions`** window values are accurate on Android versions prior to 15 when edge-to-edge is enabled.
34+
- **`StatusBar`** now supports updating status bar style and visibility while a Modal is open.
35+
- **Navigation bar** contrast respects the theme's `enforceNavigationBarContrast` attribute.
36+
37+
React Native now also handles edge-to-edge correctly when it's enforced by the OS (Android 15+) but not explicitly enabled via the `edgeToEdgeEnabled` Gradle property.
38+
39+
### React Native DevTools: Performance Tracing
40+
41+
React Native DevTools now support **light/dark mode emulation** via `Emulation.setEmulatedMedia`, allowing you to test your app's appearance mode handling directly from the DevTools without changing your device settings.
42+
43+
## Breaking Changes
44+
45+
React Native 0.86 has **no user-facing breaking changes**.
46+
47+
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.
48+
49+
To learn more about what we consider a breaking change, have a look at [this article](/docs/releases/versioning-policy#what-is-a-breaking-change).
50+
51+
## Deprecations
52+
53+
The following APIs have been removed and are due for removal in a future release of React Native:
54+
55+
- **`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.
56+
- **`AppRegistry`**: The second argument of `AppRegistry.setComponentProviderInstrumentationHook` is now deprecated and will warn if used.
57+
58+
## Other Changes
59+
60+
### Runtime & Web Spec Alignment
61+
62+
- **`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.
63+
- **`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.
64+
65+
### Rendering, Layout & Animation
66+
67+
- **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.
68+
- **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.
69+
- **Text measurement crash**: Fixed a crash when measuring text on a surface that had already been stopped.
70+
- **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.
71+
- **Yoga Layout fixes**: Fixed several layout regressions related to Yoga such as text wrapping in absolutely positioned elements on Android ([#56651](https://github.com/facebook/react-native/pull/56651)), a crash with Android's `BoringLayout.isBoring()` with a negative width ([#56007](https://github.com/facebook/react-native/pull/56007)) and fixed ownership of nodes with `display: contents` nodes ([#56422](https://github.com/facebook/react-native/pull/56422)).
72+
73+
### Accessibility
74+
75+
- **Unresolved promises**: Fixed `AccessibilityInfo.isDarkerSystemColorsEnabled`, `isHighTextContrastEnabled` and `prefersCrossFadeTransitions` returning promises that never resolved on unsupported platforms. They now resolve to `false` instead of hanging indefinitely.
76+
77+
### Infrastructure & Dependencies
78+
79+
- **Metro `^0.84.2`**: Updated Metro bundler dependency.
80+
- **`HeadlessJsTaskSupportModule` auto-registration**: This module is now registered in the `CoreReactPackage`, so apps that use headless JS tasks on Android no longer need to ensure this module is manually registered.
81+
82+
### JSI (Native Interface)
83+
84+
New JSI APIs added to make the C++ interface between native modules and the JS engine more capable:
85+
86+
- **`IRuntime` interface**: Makes previously protected `Runtime` methods public, enabling new JSI functionality without cascading interface versions.
87+
- **`TypedArray` / `Uint8Array`**: First-class support for typed arrays, including creation, buffer access, offset and length queries.
88+
- **`ArrayBuffer.detached`**: Check whether an `ArrayBuffer` has been detached.
89+
- **`Array.push`**: Append elements to arrays (previously array size was immutable after creation).
90+
- **`String.length`**: Get string length in UTF-16 code units without converting to a full string.
91+
- **`isInteger`**: Check if a `jsi::Value` is an integer without calling into the runtime.
92+
- **Error creation APIs**: Factory methods for all standard JS error types (`TypeError`, `RangeError`, `ReferenceError`, `SyntaxError`, `EvalError`, `URIError`).
93+
94+
### Android Input & Navigation
95+
96+
- **BackHandler event object**: `hardwareBackPress` events now pass an event object with a `timeStamp` property from the native event, enabling timing analysis and event correlation. Existing callbacks that ignore the argument are unaffected.
97+
- **BackHandler resume fix on API 36+**: `BackHandler` callbacks stopped working after the app was resumed from the background on Android API 36+. The fix ensures the back button handler is properly re-registered during `onHostResume`.
98+
- **LogBox/RedBox back button dismiss**: LogBox notification toasts and the inspector overlay can now be dismissed via the Android hardware back button.
99+
- **TextInput `setAutoCapitalize` Samsung fix**: Fixed `setAutoCapitalize` stripping `TYPE_NUMBER_FLAG_SIGNED` and `TYPE_NUMBER_FLAG_DECIMAL` flags on Samsung keyboards, which prevented users from typing minus signs in numeric inputs.
100+
- **TextInput/KeyboardAvoidingView IME height**: `KeyboardAvoidingView` and TextInput auto-scroll now respond correctly to IME height changes, such as toggling between the keyboard and emoji panel or when the predictive text bar appears.
101+
102+
### Android Networking
103+
104+
- **`OutOfMemoryError` handling**: `NetworkingModule` now correctly handles very large HTTP responses and will not OOM or crash.
105+
- **WebSocket `Cookie` header**: `WebSocketModule` no longer strips a `Cookie` header passed via the WebSocket constructor's `headers` option, allowing authentication cookies to be sent over WebSocket connections.
106+
- **Blob content provider with New Architecture**: The Blob content provider (used for `blob:` URLs to access binary data) now works correctly with the New Architecture.
107+
108+
## Acknowledgements
109+
110+
React Native 0.86 contains over 596 commits from 97 contributors. Thanks for all your hard work!
111+
112+
{/* alex ignore special white */}
113+
114+
We want to send a special thank you to those community members that shipped significant contributions in this release.
115+
116+
- [Mathieu Acthernoene](https://github.com/zoontek) for edge-to-edge support on Android and StatusBar improvements
117+
- [Rubén Norte](https://github.com/rubennorte) for React Native DevTools performance tracing
118+
- [Jakub Piasecki](https://github.com/j-piasecki) for ShadowTree and Yoga fixes
119+
- [Nick Gerleman](https://github.com/NickGerleman) for Text rendering fixes
120+
- [Peter Abbondanzo](https://github.com/Abbondanzo) for LogBox, ScrollView and Image fixes
121+
122+
Moreover, we also want to thank the additional authors that worked on documenting features in this release post:
123+
124+
{/* TODO: Add blog post co-authors */}
125+
126+
## Upgrade to 0.86
127+
128+
:::info
129+
130+
0.86 is now the latest stable version of React Native and 0.83.x moves to unsupported. For more information see [React Native's support policy](https://github.com/reactwg/react-native-releases/blob/main/docs/support.md).
131+
132+
:::
133+
134+
#### Upgrading
135+
136+
Please use the [React Native Upgrade Helper](https://react-native-community.github.io/upgrade-helper/) to view code changes between React Native versions for existing projects, in addition to the [Upgrading docs](/docs/upgrading).
137+
138+
#### Create a new project
139+
140+
```sh
141+
npx @react-native-community/cli@latest init MyProject --version latest
142+
```
143+
144+
#### Expo
145+
146+
For Expo projects, React Native 0.86 will be available as part of the `expo@canary` releases.

0 commit comments

Comments
 (0)