The React Native team released 0.83 on December 10, 2025. Alex Hunt and Riccardo Cipolleschi from Meta wrote the post with Gabriel Donadel Dall'Agnol and Alan Hughes from Expo. The team calls it the first React Native release with no user-facing breaking changes, so moving from 0.82 should need no app code edits. It took more than 594 commits from 56 contributors.
The upgrade costs little. The DevTools changes and two experimental iOS flags give you the reasons to schedule it.
React 19.2 and a security footnote
[email protected] depends on [email protected], and the team promised 19.2.1 in the next patch. You get <Activity> and useEffectEvent. Activity's hidden mode hides children, unmounts their effects and defers their updates while keeping state. On mobile, that lets you keep a tab's scroll position and form input without rendering it.
<Activity mode={tab === "search" ? "visible" : "hidden"}>
<SearchScreen />
</Activity>
The post also addresses CVE-2025-55182, the critical React Server Components flaw disclosed a week earlier. React Native doesn't depend on react-server-dom-webpack, -parcel or -turbopack, so apps aren't affected. If your monorepo holds a Next.js app next to the mobile app, those packages may sit in the same lockfile. Check them.
DevTools gets a network panel, a profiler and its own window
- requests the Network panel captures
- fetch, XHR, Image
- JS, React tracks, network and user timings
- 1 timeline
- needed to open DevTools now
- 0 browsers
The Network panel shows timings, headers and response previews for fetch(), XMLHttpRequest and <Image>. A new Initiator tab shows the line of code that sent each request. Custom stacks such as Expo Fetch come later. Expo apps keep a separate Expo Network panel that lacks the initiator and the profiler link.
Performance tracing records one session with JavaScript execution, React performance tracks, network events and your own performance.mark calls on a shared timeline. If you built a custom logger to answer "why does this screen take two seconds," try this first.
DevTools now launches as a notarized desktop app. Before, it opened a Chrome or Edge window. The app keeps zero-install setup, raises itself when you hit a breakpoint and restores your window layout. It also runs outside your browser profile, which fixes reports of Chrome extensions breaking DevTools. Behind a corporate firewall that blocks the download, it falls back to the browser flow.
Web Performance APIs go stable
The subset that arrived in 0.82 canary is now stable: performance.now(), PerformanceObserver, mark and measure, plus event and longtask entries. PerformanceObserver works in production builds, so you can report long tasks from real devices:
new PerformanceObserver((list) => {
for (const entry of list.getEntries()) {
analytics.track("long_task", { ms: entry.duration });
}
}).observe({ type: "longtask" });
IntersectionObserver also landed, in canary only.
Two experimental iOS flags
The first compiles the Legacy Architecture out of iOS builds. It only works for apps already on the New Architecture and needs a source build:
RCT_REMOVE_LEGACY_ARCH=1 bundle exec pod install
| Metric | Off | On |
|---|---|---|
| Build time | 73.0 s | 58.2 s |
| App size | 51.2 MB | 48.2 MB |
That is a 20% shorter build on an empty app. Your result depends on how many native libraries you carry. In 0.84 the team made this behavior the default.
The second flag, RCT_SYMBOLICATE_PREBUILT_FRAMEWORKS=1, makes CocoaPods download dSYMs for the precompiled core. Load them with add-dsym in the Xcode console and you can step into React Native code while keeping prebuilt binaries. Library maintainers get the most out of it.
Hermes V1 stays experimental in 0.83, with compiler version 250829098.0.4 and further gains over 0.82, per the team.
Deprecations, Android only
The team deprecated sendRequestInternal in networking, plus startOperationBatch and finishOperationBatch in animation. If a library calls them, open an issue now while the methods still work.
This week
- Upgrade from 0.82. With no breaking changes, keep the PR to the version bump and template diff.
- Grep your lockfile for
react-server-dom-*and patch it if a web app shares the repo. - Run one profiling session on your slowest screen in the new Performance panel, and delete custom timing code it replaces.
- Try
RCT_REMOVE_LEGACY_ARCH=1on a branch and record build time and IPA size before and after.
With 0.83 out, 0.80.x dropped from support. Expo SDK 55 ships 0.83 in January 2026.
Volodymyr Chornous

