Skip to content
RN/APPS

posts/new-architecture-is-the-release-train.md · 2026-09-29

New Architecture Is the Release Train Now

Not financial advice. Verify claims independently.

If you still treat the New Architecture as a flag you will flip "after launch," the calendar has already moved. Expo's SDK 54 notes are plain about it: that SDK is the last one that can still run React Native's Legacy Architecture. React Native 0.82, released in October 2025, is the first stable React Native that runs only on the New Architecture. The migration advice that shipped with those notes was deliberate. Land on SDK 54 and React Native 0.81 first, prove the app, then step forward, because 0.82 removes the opt-out.

That sequencing matters more for a trading UI than for a content app. Watchlists, quote flashes, and gesture-driven charts sit on two libraries that have already left the old runtime behind.

What actually closed the opt-out

Reanimated 4 introduces react-native-worklets and supports the New Architecture only. Expo called out the same constraint for @shopify/flash-list v2 when it told teams that SDK 54 was the last Legacy stop. By the SDK 53 era, Expo reported that about three quarters of EAS builds were already on the New Architecture, which is why the remaining opt-out was a migration aid, not a long-term plan.

If a paper-trading client still pins Reanimated 3 solely to keep the new architecture off, it is freezing the list and animation stack the rest of the ecosystem is shipping against. You can stay on Reanimated 3 for a while. You cannot stay there and also take the current list and chart libraries.

The order we use on RN/APPS builds is boring on purpose:

  1. Upgrade to SDK 54 while still on the Legacy Architecture, and ship a development build. Do not combine this step with the architecture flip.
  2. Turn the New Architecture on in a second development build. Keep Reanimated on v3 until that build is green on device.
  3. Move Reanimated 3 to 4 only after Fabric is the runtime you are testing. Expo's babel preset wires the worklets plugin. Do not hand-edit babel.config.js the way bare-app upgrade notes suggest.
  4. Swap FlatList, or FlashList 1, for FlashList 2 once you are no longer maintaining a Legacy binary.

Doing all four in one pull request produces a red TestFlight and no suspect. Separate binaries tell you whether the regression is SDK 54, Fabric, or Reanimated 4. Expo's own upgrade guide makes the same point: if you change both at once, you cannot tell which one broke the quote flash.

Hermes V1 is a measurement, not a slogan

React Native 0.82 also offers an experimental opt-in to Hermes V1, and it bumps React to 19.1.1. Meta's published numbers are modest and device-dependent, which is the useful kind of benchmark:

  • Bundle load: about 3.2% faster on a low-end Android phone, about 9% faster on iOS.
  • Total time to interactive: about 7.6% on that Android profile, about 2.5% on iOS.
  • Content time to interactive: about 7.2% Android, about 7.5% iOS.

Those figures come from Meta's own apps. The 0.82 post is explicit that the gain depends on the bundle in front of you. While Hermes V1 is experimental, trying it means building React Native from source. For a quote app, do not chase it until the New Architecture migration is boring. A release build that actually ships Hermes bytecode already moves startup more than an experimental VM on a team that has not profiled time to interactive on a physical phone.

What we measure before we call it done

A Fabric migration that looks fine on a simulator fails on a warm mid-tier Android after the cash open. Before we tag a release channel we want four numbers, not a vibe:

  • Cold start to first watchlist paint, release build, on a physical SE-class iPhone and a low-end Android.
  • A thirty-minute soak on a live socket, with the Hermes heap trending flat rather than climbing.
  • Quote flashes driven by Reanimated shared values, not by setState on every tick.
  • estimatedItemSize taken from the device, not from a Figma frame. FlashList will recycle badly if that guess is wrong, and the New Architecture will not rescue a bad estimate.

The New Architecture does not batch your websocket for you. It removes a bridge tax and then exposes whatever allocation you were hiding behind it. If every tick still clones the watchlist object, Fabric will commit that clone faster. Faster commits of the same waste is not a win. Coalesce ticks on a 100 to 250ms budget, write the store once, and let the row compare on symbol and last price only.

Rehearse the client, not the flag

Architecture flags are a means. The product question is whether a paper ticket still feels instant when the tape is busy. We keep a reference build of that client, Expo Router plus a virtualized watchlist and worklet-driven flashes, at Stock Picks. Open it on the device class you actually ship to. If the flash janks there, it will jank in the client you are migrating. Fix the list and the tick coalesce before you flip another flag. The release train is the New Architecture. The thing you are shipping is still the quote.

cta/stockspicks.sh

Put it into practice

Rehearse on Stock Picks — the Expo fintech app from the team behind RN/APPS.

$ open stockspicks →