Mobile App Development

React Native New Architecture Migration: A Practical Plan for Older Apps

React Native 0.88 shipped on October 19, and the Legacy Architecture is gone from every supported version. Here is how to move an older app across, in what order, and what to check before you start.

Shumail RafiqueSenior Full Stack Developer
7 min read
React Native New Architecture Migration: A Practical Plan for Older Apps

A React Native New Architecture migration is no longer optional. React Native 0.88 shipped on October 19, 2026, every supported version now runs only on the New Architecture, and the old escape hatches are gone. If your app still runs on the Legacy Architecture, or on a version from before 2025, this guide gives you a practical order of work: how to audit the app, the official stepping-stone version, where the real effort hides, and how to decide between migrating and rebuilding.

It is written for founders, CTOs, and product leads who own a React Native app and need to know how big this job is before anyone starts it.

What changed, and why it matters now

React Native has been moving to the New Architecture (Fabric for rendering, TurboModules for native modules, and JSI in place of the old async bridge) for several years. Three releases turned that from a recommendation into a requirement:

  • 0.82, October 2025. The React Native 0.82 release post made the New Architecture the only architecture. Setting newArchEnabled=false on Android or RCT_NEW_ARCH_ENABLED=0 on iOS is now ignored.
  • 0.84, February 2026. Legacy Architecture code is compiled out of iOS builds by default, and several bridge-era Android classes were removed.
  • 0.88, October 2026. The 0.88 release moved 0.85 to unsupported and added support for Apple's UIScene lifecycle.

That last point is the one with a deadline. The 0.88 post notes that starting with the iOS 27 SDK, Apple requires the UIScene lifecycle, and UIKit apps built with Xcode 27 without it will fail to launch. Apple raises the minimum SDK for App Store uploads on a regular cycle: the iOS 26 SDK became mandatory on April 28, 2026. An app stuck on an old React Native version cannot pick up that support, so sooner or later it cannot ship updates. Android has the same pressure through the yearly target API level rule, which we covered in our Google Play target API level guide.

Step 1: Audit before you estimate

Nobody can give you an honest estimate for this migration without looking at the app. The size of the job comes from three things:

  1. 1.How far behind you are. An app on 0.79 is a different project from an app on 0.66.
  2. 2.Your third-party native libraries. Every package with native iOS or Android code has to support the New Architecture, or be replaced.
  3. 3.Your own native code. In-house native modules and native UI components written for the old bridge need porting.

A first pass takes an afternoon. Run these from the project root:

bash
# Current React Native version and environment
npx react-native info

# Is anything still forcing the old architecture?
grep -n "newArchEnabled" android/gradle.properties
grep -rn "RCT_NEW_ARCH_ENABLED" ios/Podfile

# How much custom native code do we own?
find ios android -name "*.m" -o -name "*.mm" -o -name "*.java" -o -name "*.kt" | grep -v node_modules | wc -l

# Expo projects: check dependencies against React Native Directory
npx expo-doctor@latest

Then put every dependency with native code into a list and look each one up on React Native Directory. The Expo New Architecture guide explains that expo-doctor checks your packages against that directory automatically and flags ones that are unmaintained or incompatible. Sort the list into three groups: supported, supported in a newer major version, and abandoned. The third group is where your budget goes.

Step 2: Use 0.81 as the stepping stone

The React Native team is specific about the safe route. If you have not migrated yet, upgrade to React Native 0.81 or Expo SDK 54 first. These are the last versions that still let you switch the Legacy Architecture on and off. Then:

  1. 1.Upgrade to 0.81 (or SDK 54) with the Legacy Architecture still enabled, and get the app stable.
  2. 2.Turn the New Architecture on in that same version and fix what breaks.
  3. 3.Only when the app is stable on the New Architecture in 0.81, move on to 0.82 and beyond.

This separates two kinds of failure. When something breaks during step 1, it is an upgrade problem. When it breaks in step 2, it is an architecture problem. Mixing them is how a two-week job turns into two months of guessing.

If you are many versions behind, do not jump straight from an old release to 0.81. Upgrade in stages, using the React Native Upgrade Helper to see the exact template changes between each pair of versions, and commit a working build at each stage.

Step 3: Deal with native modules and libraries

This is where most of the effort sits. The JavaScript and React side of the app usually needs little change. The native side is different.

  • Third-party libraries. Most popular packages support the New Architecture now, often in a newer major version. Upgrading them can bring their own breaking API changes, so read each changelog. For abandoned packages, find a maintained replacement. Expo's guide lists a few common swaps, such as react-native-blob-util in place of rn-fetch-blob.
  • The interop layer. React Native includes an interop layer so many legacy native components and modules keep working on the New Architecture. The 0.82 post says it will stay in the codebase for the foreseeable future. Treat it as a bridge for the migration, not a permanent home: anything relying on it should be on your list to port.
  • Your own native modules. Port these to TurboModules and Fabric components. If you have a lot of them, consider moving to the Expo Modules API, which supports the New Architecture by default and is easier to maintain for a small team.
  • Removed Android classes. If your Android code imports or subclasses bridge-era classes such as CxxModuleWrapper or LazyReactPackage, it will fail to compile on 0.84 and later. The 0.84 release notes list every removed class.

Step 4: Test like it is a new release

The New Architecture changes how rendering and native calls work, so treat the migrated app as a new release, not a dependency bump.

  • Rendering and layout. Fabric renders synchronously in places where the old renderer did not. Walk every screen and look for layout jumps, flicker, and changed text measurement.
  • Native features. Test camera, location, push notifications, deep links, in-app purchases, and anything else that crosses into native code, on real devices for both platforms.
  • Performance. Measure startup time and scrolling on a mid-range Android phone before and after. Do not assume it got faster: check.
  • Staged release. Ship to internal testers, then use staged rollouts on Google Play and phased release on the App Store, with crash reporting on.

Once you are on a current version, adding UIScene support for iOS 27 is a contained change. The 0.88 post lists the steps: move the React Native entry point from AppDelegate to a SceneDelegate, forward URL and user-activity callbacks to RCTLinkingManager, and add a UIApplicationSceneManifest key to Info.plist.

Migrate or rebuild?

Most apps should migrate. A rebuild throws away working product logic, tested edge cases, and store history, and it carries its own risk. Migration is the right call when:

  • the product works and users are not asking for a different app,
  • the JavaScript and TypeScript code is in reasonable shape,
  • most native dependencies have maintained, New Architecture versions.

A rebuild is worth discussing only when several of these are true at once: the app is many versions behind, it depends on multiple abandoned native libraries with no replacement, the code has no tests and no one who knows it, and the product needs a redesign anyway. Even then, the backend, API contracts, and design system usually survive.

If you are reconsidering the framework itself as part of that decision, our comparison of Flutter vs React Native for startups covers when each one fits.

How we approach this at Code Nativex

When we take on React Native work through our mobile app development service, the platform question comes first, because it shapes cost, timeline, and how fast you can change things after launch. For an existing app, that means an audit before a quote: the version, the native dependency list, and the custom native code. That is what lets us send a fixed-scope, fixed-price proposal rather than an open-ended estimate.

We also keep the backend in view. Most of an app's complexity lives behind the screen, in auth, Postgres, payments, and the APIs the app talks to. A migration is a good moment to check that the app and any web product share one source of truth instead of drifting apart.

Conclusion

The Legacy Architecture is frozen, removed from current releases, and no longer supported anywhere new work happens. The good news is that the path is well documented: audit your dependencies, get stable on 0.81 or Expo SDK 54, switch the New Architecture on there, then move forward one version at a time. Start before an App Store or Google Play deadline forces the timing.

If you want a second opinion on how big your migration is, tell us about your app and we will look at the version and native dependencies before we quote.

Frequently asked questions

Can I still turn off the New Architecture in React Native?
Not on current versions. From React Native 0.82 onward, setting newArchEnabled=false on Android or RCT_NEW_ARCH_ENABLED=0 on iOS is ignored. React Native 0.81 and Expo SDK 54 are the last versions where the Legacy Architecture can be enabled.
Do I have to rewrite my app to move to the New Architecture?
Usually not. Your JavaScript and React code mostly carries over. The work sits in native modules, native UI components, and third-party libraries that were written for the old bridge. An interop layer lets many legacy components keep working while you migrate them.
How do I know if my libraries support the New Architecture?
Check each package on React Native Directory, which tracks New Architecture support. In Expo projects, npx expo-doctor checks your dependencies against that data automatically and flags unmaintained or incompatible packages.
How long does a React Native New Architecture migration take?
It depends on how far behind the app is and how much custom native code it has. An app on a recent version with well-maintained libraries can move in days. An app several versions behind, with abandoned packages or in-house native modules, can take weeks, so audit first and estimate second.
Is it worth migrating, or should we rebuild the app?
Migrate when the product works and the JavaScript code is healthy, even if the native layer is dated. Consider a rebuild only when the app is years behind, depends on several abandoned native libraries, and the product itself needs a redesign anyway.

Written by

Shumail Rafique

Senior full stack developer at Code Nativex, building scalable web applications with modern technologies.

Meet the team

Code Nativex

Typically replies instantly

👋 Hi there! Ready to build something amazing together? Chat with us on WhatsApp.

Start Conversation