I ship a production astrology app on React Native 0.85.3 with Expo SDK 56. Every claim below comes from release notes I had to act on, not from skimming a changelog. Some of these upgrades were free wins. One of them broke builds across the ecosystem the week it landed.

Timeline of React Native 0.82 to 0.86: New Architecture only, DevTools panels, Hermes V1 and precompiled iOS builds, bridge-era plumbing removed, edge-to-edge fixes

1. Precompiled iOS builds are on by default (0.84)

React Native 0.84 stopped compiling the core framework from source on iOS. pod install now downloads prebuilt .xcframework binaries instead. When this shipped experimentally in 0.81, Meta and Expo measured compile times cut by up to 10x in apps where RN is the primary dependency.

If you have ever watched Xcode chew through RN core for eight minutes on a cold CI runner, this is the single biggest quality-of-life change in years. It also shipped with sharp edges. react-native-firebase apps hit compile errors under the new default (invertase/react-native-firebase#8883), because Firebase's static-linking requirement clashes with the prebuilt core. The escape hatch is one environment variable:

# Opt out if a native library chokes on the prebuilt core
      RCT_USE_PREBUILT_RNCORE=0 pod install
      

Check your native dependencies' issue trackers before you upgrade, then flip it back on. The build-time win is too big to leave on the table.

2. Hermes V1 is the default JavaScript engine (0.84)

React Native 0.84 made Hermes V1 the default engine on both iOS and Android. You get faster execution and lower memory with zero migration work, because the bytecode and integration surface stay compatible with the Hermes you already run.

It arrived quietly: opt-in experimental in 0.82, matured in 0.83, default in 0.84. My app took it with no code changes at all, which is exactly how an engine swap should feel. The more ambitious cousin, Static Hermes, which compiles typed JavaScript ahead of time to native code, is still a Meta research project with no shipping date.

3. The New Architecture is now the only architecture (0.82 → 0.85)

Since 0.82, the New Architecture is the only architecture, and 0.85 tore out the last major pieces of bridge-era plumbing. Android's core bridge class CatalystInstanceImpl is gone and NativeViewHierarchyManager is fully stubbed out. The release notes never declare "the bridge is dead" in so many words, but nothing bridge-shaped survives for your code to depend on. The newArchEnabled flag still exists in your config, and it stopped doing anything months ago:

# android/gradle.properties
      # Since RN 0.82 this line is a no-op. There is no going back.
      newArchEnabled=false
      

Why does this matter to you? Third-party libraries. A package that last saw a commit in 2023 and still assumes the old UIManager is not "legacy but working" anymore. It is dead weight. Jump straight from 0.7x to 0.8x without an audit and the build failure you hit will look unrelated, until you trace it to one zombie dependency. Check your package.json against each library's New Architecture support before you schedule the upgrade, not after CI goes red.

4. Layout props finally animate on the native driver (0.85.1)

React Native 0.85.1 shipped a shared animation backend, built with Software Mansion, that lets both Animated and Reanimated drive layout props natively. Animating width, height, flex, or position with useNativeDriver: true used to throw. Now it runs off the JS thread:

Animated.timing(width, {
        toValue: 320,
        duration: 200,
        useNativeDriver: true, // no longer throws for layout props
      }).start();
      

Devs have asked for natively driven height animation for close to a decade. The opt-in is heavier than a config flag: you enable React Native's experimental release channel to get it, so treat it as a preview, not a production tool. But it is the first time "can I animate height without jank?" has a yes that doesn't route through a worklet workaround.

5. DevTools grew a network inspector and a performance timeline (0.83)

React Native DevTools now includes a Network panel (timings, headers, response previews, request initiators) and a Performance panel with a unified JS, React, and network timeline. Both landed in 0.83, alongside a standalone desktop app that replaces the Chrome-tab launcher.

Debugging a failing API call used to mean console.log or a proxy like Charles. Now it's the same motion as opening the Network tab in a browser. And since 0.85, DevTools accepts multiple simultaneous debugger connections, so your editor, the DevTools app, and an AI coding agent can attach to the same device at once.

What I'm still waiting for: Server Components you can ship

React Server Components on native are still in beta, and Expo explicitly recommends against production use. EAS Update does not work with them yet, and Server Functions calling other Server Functions is unsupported on Hermes. On the web, RSC is the stable default in Next.js. On native, it remains a demo.

I want this badly. My app streams personalized LLM content that would map cleanly to server-rendered sections. In 2026, that still means an API layer and client rendering.

What I'm still waiting for: React Compiler in existing apps

React Compiler is stable, and new Expo apps scaffolded on SDK 54 or later ship with it enabled. Existing apps get nothing automatically. Mine came from an older template, so flipping the flag and retesting render behavior is on me:

// app.json
      {
        "expo": {
          "experiments": {
            "reactCompiler": true
          }
        }
      }
      

The flag still lives under experiments in the config schema, and bare React Native has no auto-enable at all. The day the compiler runs in every app, new and old, thousands of hand-written useMemo calls die. Greenfield Expo projects got that day with SDK 54. The rest of us are still migrating toward it.

Should you upgrade?

Upgrade checklist: audit dependencies, fix Android insets, jump to 0.86 in one move, re-enable the fast paths

Yes, and this window is friendlier than it looks. The pain was front-loaded: 0.81 forced edge-to-edge on Android with no opt-out, and 0.82 removed the architecture flag. The payoff came later: 0.83 shipped with zero user-facing breaking changes, 0.84 delivered the build wins, and 0.86 fixed the long tail of edge-to-edge layout bugs. If you are on anything past 0.81, catching up to 0.86 is mostly a dependency audit. If you are coming from 0.7x, budget real time for the architecture jump and the Android inset changes, then take the whole window in one move.


I write these from real work at astraedus.dev, where I build apps and tools. Building something, or stuck on something like this? Reach me at astraedus.dev or [email protected].

Get the next one in your inbox → subscribe at astraedus.dev.