A Guide to React Native New Architecture

Unlock peak performance with our guide to the React Native New Architecture. Learn about Fabric, TurboModules, JSI, and proven migration strategies.

Martin Donadieu

Martin Donadieu

A Guide to React Native New Architecture

The React Native New Architecture represents a ground-up rewrite of the framework’s core. Think of it less as an update and more as a total engine swap. The goal? To rip out the old, sluggish “bridge” and replace it with a communication system built for speed, efficiency, and the demands of modern mobile apps. This change is easily the biggest leap forward in React Native’s history, unlocking synchronous execution and paving the way for truly fluid, responsive user experiences.

Why the New Architecture Is a Game Changer

To really get why the React Native New Architecture is such a big deal, you have to understand the old way of doing things. For a long time, React Native relied on a clever but ultimately limited system centered around the “bridge.” This bridge was the go-between for the JavaScript code we write and the native UI elements on an iOS or Android phone.

Picture two people who don’t speak the same language trying to have a fast-paced conversation through a single, overworked translator. You (the JavaScript side) say something, the translator writes it down, translates it, and hands the note to your colleague (the native side). They act on it, write a reply, and the whole process happens again in reverse.

That’s a pretty good picture of how the old bridge operated. Communication was asynchronous, and every message had to be bundled up into JSON strings before being sent across. While this setup kept the UI from completely locking up, it created a noticeable lag. For anything that required quick back-and-forth, like complex animations or fast scrolling, this translation bottleneck was a constant source of performance headaches.

The Bottlenecks of the Old Bridge

The asynchronous design of the bridge was its fatal flaw. It created a situation where the JavaScript thread and the native thread could never truly talk in real-time. This led to a few persistent problems that developers spent countless hours trying to solve:

  • UI Stutter and Jank: High-frequency events, like dragging an element or scrolling a long feed, could easily flood the bridge. The result? Dropped frames and that choppy, laggy feeling users hate.
  • Slow Startup Times: When an app first launched, it had to load the bridge and initialize every single native module, even if you weren’t going to use them right away. This added a frustrating delay to the app’s initial startup.
  • Synchronization Issues: Since the messages were flying back and forth asynchronously, it was easy for the JavaScript state and the native UI to get out of sync. This could cause strange visual bugs and unpredictable app behavior.

The core problem was simple: the bridge acted as a middleman, creating an unavoidable delay. For modern apps that demand 60 frames-per-second fluidity and instant responsiveness, this indirect communication model was no longer sustainable.

A Foundation Built for the Future

The React Native New Architecture throws that old model out the window. It’s a complete reimagining of the framework’s foundation, designed specifically to eliminate these bottlenecks for good. Instead of that slow, note-passing translator, the new system gives JavaScript a direct, synchronous line to the native side.

Image

This direct communication unlocks a new tier of performance that just wasn’t possible before. It makes complex UIs, buttery-smooth animations, and lightning-fast interactions the new standard. For those looking to understand the fundamentals, our guide on https://codepushgo.com/blog/building-apps-with-react-native/ provides essential background.

Ultimately, it sets the stage for modern React features to work seamlessly and ensures React Native can go toe-to-toe with fully native development on performance and user experience. If you’re just getting started, many developers find resources on building apps with React Native provide helpful context for these core concepts.

Understanding the Core Components

At the heart of the React Native New Architecture are three foundational pieces of tech working in concert to make apps faster and more responsive. Think of them as a highly specialized team where each member has a specific job, all designed to get rid of the old system’s sluggishness. These core components are the JavaScript Interface (JSI), TurboModules, and Fabric.

To really get what makes the new architecture so powerful, you need to understand how each of these parts works. Each one was built to solve a specific problem with the old bridge, from slow communication and clunky rendering to apps that took forever to start up. Let’s break them down.

This diagram helps visualize how these three pillars support the entire new architecture.

Infographic about react native new architecture

As you can see, JSI is the central highway that lets TurboModules and Fabric do their jobs seamlessly.

The JavaScript Interface (JSI)

The JavaScript Interface, or JSI, is probably the biggest game-changer here. It completely replaces the old, slow, asynchronous bridge. If the old bridge was like sending letters through the mail and waiting for a reply, the JSI is like having a direct phone line between your JavaScript code and the native side of the device.

At its core, JSI is a lean C++ layer that lets JavaScript hold a direct reference to native objects and call methods on them. This communication is synchronous—no more packaging up data into JSON strings, sending it across the bridge, and waiting. It’s immediate.

This direct line of communication is a massive deal for a few reasons:

  • Near-Instant Calls: The overhead of crossing the bridge is basically gone. JavaScript can now talk to native code almost like it’s calling a local function, which is a lifesaver for anything that needs to be fast.
  • Easier Debugging: When things go wrong, direct access makes it much easier to figure out why. You get clearer stack traces that aren’t muddled by the old bridge’s asynchronous nature.
  • Platform Agnostic: Since JSI is written in C++, it gives developers a consistent interface for both iOS and Android. This makes building cross-platform native modules a whole lot simpler.

TurboModules for On-Demand Loading

Building directly on the JSI’s instant communication, we have TurboModules. They’re a much smarter way to handle native modules. With the old architecture, every single native module your app could possibly use had to be loaded into memory the moment the app started.

It was like turning on every light in your house just to walk into the kitchen—a huge waste of resources. TurboModules fix this by loading native modules lazily, or “on-demand.”

A native module is only loaded into memory the very first time it’s actually used by your JavaScript code. This simple change leads to significant improvements in app startup time and reduces initial memory consumption.

With TurboModules, your app only pays the performance price for the features the user is actually engaging with. If you want to dive deeper into creating these, you can explore our detailed guides on React Native modules. This approach not only makes the initial launch snappier but also helps keep the app’s memory footprint from getting out of control.

Fabric: The New Rendering System

The final piece of the puzzle is Fabric, the new rendering system that completely changes how your app’s UI gets drawn on the screen. The old system, UIManager, worked asynchronously over the bridge, which was a common cause of UI glitches and dropped frames, especially during complex animations.

Fabric, on the other hand, uses the JSI to create a rendering pipeline that is both synchronous and incredibly efficient. Think of it as a perfectly tuned assembly line. Instead of sending instructions and waiting for confirmation, Fabric can create and modify UI elements in real-time, from any thread.

This synchronous power unlocks a few key benefits:

  • Smoother Animations: With direct control over the UI, animations feel more fluid and responsive. Hitting a consistent 60 frames-per-second is now much more achievable.
  • Concurrent Rendering: Fabric allows React 18’s concurrent features to work properly in React Native. This means your UI can stay responsive even when heavy tasks are running in the background.
  • Improved UI Consistency: By closing the asynchronous communication gap, the risk of your JavaScript state and the native UI falling out of sync is massively reduced.

Together, these three components deliver on the promise of the react native new architecture. The results are already speaking for themselves. Early benchmarks show startup times cut by up to 40%, memory usage dropping by 20-30%, and frame rates holding steady at 60fps. This isn’t just a minor update; it’s a fundamental leap toward delivering truly native-feeling performance.

Comparing the Old vs. New Architecture

To really get why the New Architecture is such a big deal, you have to look at it side-by-side with the old way of doing things. Putting the two systems head-to-head makes the benefits a lot less theoretical and much more real. You can clearly see what changed under the hood and, more importantly, why those changes lead to apps that are faster, smoother, and more reliable.

The overhaul really comes down to three key areas: how JavaScript talks to native code, how the UI gets drawn on the screen, and how native modules are handled. Each one was completely re-imagined, tossing out old, inefficient methods for modern, high-performance replacements. This wasn’t just a minor update; it’s a fundamental shift in how React Native works from the ground up.

An image comparing the old and new React Native architectures

So, let’s break down the practical differences.

Communication: The Bridge vs. JSI

The biggest and most impactful change is in the communication layer. The old architecture was built entirely around the asynchronous bridge. Think of it as a single-lane tunnel where all communication between your JavaScript code and the native side had to be bundled up, converted into JSON strings, and sent across. This process was slow and created a major bottleneck, often leading to noticeable delays in UI interactions.

The New Architecture scraps that entirely and introduces the JavaScript Interface (JSI). This isn’t another bridge; it’s a direct, synchronous communication channel written in C++. It allows your JavaScript code to hold a direct reference to a native object and call its methods instantly. All the overhead of serializing and deserializing data is just gone. This direct line is the secret sauce to unlocking a whole new level of responsiveness.

Rendering: UIManager vs. Fabric

How the user interface gets rendered was another major pain point in the old system. The legacy UIManager also had to communicate asynchronously over the bridge. This meant that when your JavaScript code wanted to update the UI, the message had to wait in line. This delay could cause the UI to fall out of sync with your app’s logic, resulting in those frustrating visual stutters and “jank” we all hate.

Enter Fabric, the completely re-engineered rendering system. Because it uses the JSI, Fabric can perform UI updates synchronously. This gives React direct control over the native UI, allowing it to prioritize updates and execute them with incredibly low latency. The result is buttery-smooth animations and a UI that feels instantly connected to the user’s touch. It also introduces concurrent rendering, so the app stays responsive even during heavy screen updates.

By moving from an asynchronous, indirect rendering model to a synchronous, direct one, Fabric ensures that what the user sees on screen is a true reflection of the app’s current state, moment by moment.

Module Loading: Eager vs. On-Demand

Finally, the way native modules are handled has been completely rethought. In the old days, every single native module your app might possibly use had to be initialized and loaded into memory the moment the app started. This “eager” loading added serious weight to your app’s startup time and initial memory footprint, even if a user never touched the features that needed those modules.

The New Architecture brings us TurboModules, which use a much smarter “lazy” or on-demand approach. A module is only loaded into memory the very first time it’s actually needed. This one change delivers a massive boost to startup performance and helps keep the app’s memory usage lean. If you want to dive deeper into how this impacts the user, you can learn more through an overview of React Native performance monitoring to see where these improvements really shine.


To make these differences crystal clear, here’s a quick comparison table that lays it all out.

React Native Architecture Old vs New

This table gives you a snapshot of the core changes, highlighting the leap from the legacy system to the modern, more powerful New Architecture.

FeatureOld Architecture (Bridge)New Architecture (JSI, Fabric, TurboModules)
CommunicationAsynchronous Bridge (JSON serialization)Synchronous JSI (Direct C++ calls)
Rendering SystemUIManager (Asynchronous)Fabric (Synchronous & Concurrent)
Module LoadingEager (All at startup)On-Demand (Lazy loading)
Performance ImpactProne to UI jank and slow startupHigh performance, smoother UI, faster startup

As you can see, every core component was redesigned with performance and efficiency in mind, directly addressing the main bottlenecks that held back older versions of React Native.

How to Migrate Your App

Moving an existing app to the React Native New Architecture sounds like a huge project, but it’s not an all-or-nothing leap of faith. The team behind React Native smartly designed the migration path to be gradual. This means you can adopt the new foundation piece by piece, without having to pause your development sprints or miss a release.

The whole idea is to be pragmatic and iterative. Forget about risky, big-bang rewrites. Instead, you can flip on the New Architecture and let your existing code run through an interoperability layer. This “compatibility mode” gets the ball rolling while most of your app works just as it always has.

From there, you can start converting your app one component and one module at a time. It’s a much safer and more manageable way to tackle the transition, especially if you’re dealing with a large, complex codebase.

Kicking Off the Migration Process

The first real step is enabling the New Architecture in your project. The process is a little different for iOS and Android, but it’s straightforward. For iOS, you just need to run a command. For Android, you’ll flip a switch in your gradle.properties file.

  1. For iOS: In your ios directory, run RCT_NEW_ARCH_ENABLED=1 bundle exec pod install. This command tells CocoaPods to set up your dependencies for the New Architecture.
  2. For Android: Open your android/gradle.properties file and switch the newArchEnabled property from false to true.

Once that’s done, rebuild your app. On the surface, it will look and feel the same, but you’ve just swapped out the entire engine underneath. It’s now running on Fabric and TurboModules.

Addressing Common Migration Challenges

With the new architecture running, it’s time to see what needs updating. The biggest hurdle for most developers is dependencies. A lot of third-party libraries were built for the old bridge, and not all of them have been updated yet.

Here’s what you’ll likely run into:

  • Library Compatibility: Your top priority is checking if your dependencies support the New Architecture. Websites like the React Native Directory have compatibility lists that can save you a ton of time.
  • Custom Native Code: If you’ve written your own native modules or UI components, you’ll need to update them. To get the full performance boost, they need to be migrated to the new JSI-based systems—TurboModules and Fabric Components.
  • Updating Your App Logic: The new architecture also unlocks modern React features like concurrent rendering. To use them, you’ll need to update your app’s logic to follow React 18 patterns, which usually means some thoughtful refactoring.

A thorough dependency upgrade is often the best place to start. For a deeper dive, our guide on the React Native upgrade helper gives you a structured way to get your project up to speed.

A Pragmatic and Staged Rollout

A successful migration all comes down to good planning. Don’t even think about trying to do it all at once. A staged approach that focuses on stability and steady progress is the way to go. If you want to see what this looks like in practice, it can be helpful to explore technology roadmap examples to see how other teams plan complex technical projects.

The best strategy is to migrate incrementally. Pick a non-critical feature or screen to start with. Convert its components, test it like crazy, and learn from the process. This creates a tight feedback loop that will make tackling the bigger parts of your app much easier.

This iterative method lets you start seeing the benefits of the React Native New Architecture right away while keeping your app stable for users. By moving screen by screen, you can isolate problems, test changes properly, and build momentum toward a fully migrated, high-performance app.

Lessons from a Real-World Migration

It’s one thing to talk about theoretical benefits, but it’s another thing entirely to see the React Native New Architecture hold up under the pressure of a massive, real-world application. For that, we can look to one of the best case studies out there: Shopify’s successful migration.

This wasn’t some minor side project. We’re talking about their core, business-critical mobile apps, which they managed to transition without breaking their rapid weekly release schedule.

Between 2024-2025, Shopify moved two of its biggest apps—Shopify Mobile and Shopify Point of Sale (POS)—over to the New Architecture. What’s truly impressive is that they did this without missing a beat in their release cadence or disrupting the user experience. Their entire approach was built on making minimal initial changes to get things working, then circling back to refactor once the new foundation was in place. You can read more about Shopify’s impressive migration strategy and the technical details involved.

An image illustrating a real-world migration to the React Native New Architecture

This case study is proof that a well-planned, step-by-step migration isn’t just possible—it’s a highly effective strategy, even for apps at an enterprise scale.

The Strategy: Minimizing Risk

Shopify’s strategy was beautifully simple: make the smallest change possible to get the app running on the New Architecture. They completely avoided the temptation to rewrite and perfect everything from the get-go.

The first goal was just to flip the switch, enable the new architecture, and make sure the app would still build and run. For this, they relied heavily on the built-in compatibility layers.

This “do no harm first” mindset gave them a few critical advantages:

  • It isolated the problem. By only changing one huge variable—the architecture itself—they could easily track down any immediate build or runtime errors.
  • It kept the team moving. Developers could continue shipping features and bug fixes on their regular schedule, which was a non-negotiable business requirement.
  • It separated the work. They cleanly divided the migration from the optimization. The team knew they’d come back to refactor native modules and components down the road.

An Iterative Refactoring Process

Once their apps were running stably on the new foundation, the real work began. But instead of a giant, project-stopping rewrite, Shopify started converting their custom native modules and components piece by piece.

This gradual process let them tackle complexity in small, manageable chunks. They could test each change thoroughly and keep delivering value without bringing development to a halt.

Shopify’s journey proves a crucial point: migrating to the React Native New Architecture is not a monolithic task. It’s a process that can be integrated into your existing development lifecycle, allowing you to reap the benefits without stopping the presses.

Their success managing a huge number of native modules and complex dependencies gives other large organizations a clear roadmap to follow. It shows that with a practical, iterative approach, even the most tangled applications can make the switch. In a similar vein, teams looking to speed up their release cycles can also explore how to implement a React Native live update strategy to push out changes even faster.

By taking it one step at a time, Shopify didn’t just pull off a successful technical migration. They created a powerful blueprint for managing huge architectural changes in a fast-moving environment. Their story is a compelling testament to just how ready the New Architecture is for prime time.

Adopting React Native’s New Architecture is a huge step forward, but let’s be real—it’s not always a walk in the park. This isn’t just an update; it’s a fundamental change in how things work under the hood. Like any major shift, the tools and libraries we all rely on need some time to catch up.

The core technologies themselves—JSI, Fabric, and TurboModules—are solid and ready for production. The main bottleneck for most developers right now is third-party library compatibility. A lot of the libraries we know and love were built for the old bridge, and the community is hustling to get them updated. But not everything is there yet.

The State of Adoption

This transition phase has led to some expected growing pains. For example, a 2025 State of React Native survey found that while nearly half of developers were using the New Architecture, many hit roadblocks with library issues and unexpected regressions. These hurdles often slowed down a full-scale switch.

As noted in the full React Native survey findings, the tools and compatibility layers are getting better with every release, with big improvements expected throughout 2025. The bottom line is that the success of your migration heavily depends on the readiness of the specific libraries your app uses. The good news? This is a known problem with a lot of smart people working on it.

The ecosystem is in a state of rapid evolution. The path to adoption is getting smoother with each release as more libraries get updated and the core team continues to polish the interoperability layers.

Better Tooling and a Brighter Outlook

Thankfully, you’re not on your own. The community and major players in the React Native space are building tools to make this transition much less painful.

Here’s a look at how the ecosystem is smoothing the path forward:

  • Expo’s Heavy Lifting: The team at Expo has been a massive force for good here. They offer fantastic support for the New Architecture, handling a ton of the tricky configuration details behind the scenes so you can focus on building.
  • Built-in Compatibility: React Native ships with an interoperability layer. This clever piece of tech allows many older, bridge-based libraries to work on the New Architecture without needing an immediate rewrite. It’s a temporary crutch, but a crucial one for a step-by-step migration.
  • Strong Community Momentum: If you look at the most popular and well-maintained libraries, you’ll see most have already been updated or have public roadmaps for getting there. The collective push is quickly closing the compatibility gap.

So, yes, there are some hurdles. But they’re temporary. The long-term outlook for the React Native New Architecture is incredibly bright, promising to set a new bar for both performance and developer experience. By staying informed and using tools like Expo, you can navigate the current landscape with confidence.

Frequently Asked Questions

Jumping into a major architectural shift like this always kicks up a few questions. Let’s tackle some of the most common ones developers have about React Native’s New Architecture so you can move forward with confidence.

Should I Start a New Project with It?

Without a doubt, yes. If you’re spinning up a new app today, building it on the New Architecture is the way to go. It’s where the entire framework is headed, giving you the best possible performance from day one and putting your project on solid, future-proof ground.

While it’s true that some third-party libraries are still playing catch-up, the core is solid and the community is moving fast. Starting with it now means you won’t have to face a massive migration project later on.

What Is the Biggest Migration Challenge?

For existing apps, the most common roadblock is third-party library compatibility. A lot of older or unmaintained packages were built specifically for the old bridge and simply won’t work out of the box with the new system.

Before you even think about migrating, you need to do a thorough audit of your package.json. Go through your dependencies one by one and see which ones have been updated for Fabric and TurboModules. You may need to hunt for modern replacements or use the compatibility layer as a temporary crutch for some.

A migration’s success often comes down to how well you vet your dependencies upfront. Finding those incompatible libraries early saves you from hitting a brick wall halfway through the process.

How Much Performance Improvement Can I Expect?

The performance boost can be huge, but it really depends on what your app does. If your application is heavy on complex animations, long, interactive lists, or has a ton of back-and-forth between JavaScript and the native side, you’ll see the most significant gains.

Benchmarks have shown some apps cut their startup time by up to 40%. More importantly, UI interactions feel smoother, consistently hitting that buttery-smooth 60fps target. Getting rid of the old asynchronous bridge is a game-changer that makes just about everything feel more responsive and truly native.


Accelerate your development cycle and deliver flawless updates instantly. With CodePushGo, you can bypass app store reviews and push code changes directly to your users’ devices, ensuring they always have the latest, most stable version of your app. Explore how our secure, over-the-air update solution can transform your release process at https://codepushgo.com.

Instant Updates for React Native Apps

Push updates, fixes, and features instantly to your React Native apps without app store delays. Experience seamless integration, end-to-end encryption, and real-time updates with CodePushGo.

Latest from news

CodePushGo gives you the best insights you need to create a truly professional mobile app.

A Guide to Agile Mobile App Development
agile mobile app development,mobile app development,agile methodology,react native agile,ci/cd pipeline
June 25, 2025

A Guide to Agile Mobile App Development

Best Alternatives to Jenkins for Modern CI/CD Workflows
alternatives to jenkins,ci/cd tools,devops tools,github actions,gitlab ci
October 02, 2025

Best Alternatives to Jenkins for Modern CI/CD Workflows

Analytics for React Native: Your Complete Success Guide
analytics for react native,react native analytics,mobile app analytics,react native performance,app development insights
June 13, 2025

Analytics for React Native: Your Complete Success Guide