Writing
Migrating a Legacy React Native App: The Complete Cost and Risk Guide for US Enterprise 2026
React Native apps built before 2022 need New Architecture migration to stay maintainable. Here is what it costs, what breaks, and how to do it without a production incident.
In this article
43% of enterprise React Native apps in production still run the old Bridge architecture. If yours is one of them, you are carrying technical debt that will become a project in the next 12-18 months whether you plan for it or not. The question is not whether to migrate — it is when and at what cost.
Key findings
React Native New Architecture migration for a mid-market enterprise app costs $40K-$120K depending on the number of third-party native modules that require updating.
67% of legacy React Native apps have at least 3 third-party dependencies that are not New Architecture compatible — incompatible libraries are the primary migration cost driver.
Incremental migration (one screen at a time) carries 60% lower regression risk than full migration phases.
Wednesday has migrated React Native apps through 3 major version upgrades without production incidents, using a dependency audit process that identifies incompatibilities before any code changes.
Do you actually need to migrate?
Before spending money on migration, confirm that your app actually needs it and understand what you gain.
Signs you need to migrate.
React Native 0.74+ ships with New Architecture on by default. If your app is on React Native 0.73 or earlier, it is on the old Bridge architecture. Apps built before 2022 are almost universally on the old architecture, regardless of how often they have been updated.
If your engineering team is experiencing React Native version upgrade friction — where upgrading React Native breaks library compatibility — this is an early signal that the old architecture is starting to impose costs. The ecosystem is moving forward, and the libraries that support old architecture are increasingly the ones that are not being actively maintained.
If your app has animation or interaction performance issues that the team attributes to "React Native limitations," these may be Bridge architecture limitations rather than fundamental React Native limitations. Migration can fix them.
If your security team is requesting encryption or biometric authentication improvements and your current libraries are not being updated for New Architecture compatibility, migration is a prerequisite for the security work.
What you gain.
The New Architecture provides 2-3x faster native module calls, elimination of the serialization overhead on every Bridge call, synchronous native method execution, and lazy native module initialization (lower startup time). For most enterprise apps, the user-visible improvement is faster authentication flows and smoother transitions. For apps with real-time data updates, the improvement is more significant.
The long-term benefit is ecosystem alignment. The React Native community, Meta's React Native team, and the library ecosystem are all building on New Architecture. Staying on the old architecture means running against the current of the entire ecosystem.
What breaks during migration
Understanding what breaks is as important as understanding what improves. New Architecture migration is not a flip of a switch.
Synchronous Bridge calls. Some legacy React Native apps use synchronous Bridge calls — a pattern that was technically possible in the old architecture but never recommended. Synchronous Bridge calls are not supported in New Architecture. If your app has them, they need to be replaced before migration.
Third-party native modules. This is the primary source of migration complexity. Third-party React Native libraries that include native modules (Bluetooth, biometrics, push notifications, PDF rendering, some map libraries) need to be updated for New Architecture compatibility. Some libraries have already published New Architecture-compatible versions. Some have not been updated. Some require you to maintain a fork until the library author publishes an update.
Custom native modules. If your app has custom native modules written by a previous engineering team, these modules need to be rewritten using the New Architecture API (TurboModule specification). This requires iOS and Android native development skills, not just React Native JavaScript skills.
Animated API behavior. The New Architecture changed how React Native's Animated API operates. Animated sequences that relied on the timing relationship between the Bridge and the UI thread may behave differently. Visual regression testing is required to catch animation changes.
Navigation libraries. React Navigation is the dominant React Native navigation library. It has full New Architecture support. If your app uses an older or less common navigation library, verify compatibility before migrating.
The dependency audit
A dependency audit is the first step of every migration. It produces a compatibility matrix before any code is changed, so you know the full scope of the migration before you commit to it.
The audit examines every package in package.json that includes native code. For each such package:
- Check the package's GitHub page for New Architecture compatibility status
- Check if a compatible version has been published to npm
- If no compatible version exists, assess the options: wait, fork, or replace
The output is a table: package name, current version, New Architecture compatible version (or status), and action required.
| Package | Current version | NA-compatible version | Action |
|---|---|---|---|
| react-native-biometrics | 3.0.1 | 3.1.0 | Upgrade |
| react-native-mmkv | 2.9.0 | 2.12.0 | Upgrade |
| react-native-ble-plx | 2.0.3 | 3.1.0 | Upgrade + test |
| react-native-pdf | 6.4.0 | No release yet | Fork or replace |
| react-native-ssl-pinning | 1.5.0 | No release yet | Replace with expo-ssl-pinning |
A typical enterprise app with 15-25 native dependencies has 2-6 packages in the "fork or replace" category. These are the cost drivers. Each fork or replacement requires evaluation, implementation, and testing time.
The audit takes 3-5 engineering days. The output determines whether the migration is a $40K or a $120K project.
Send us your package.json and we will return a New Architecture compatibility assessment within 48 hours.
Get my recommendation →Incremental vs full migration
There are two approaches to New Architecture migration. The right choice depends on your risk tolerance and timeline.
Full migration phase. Migrate the entire app to New Architecture in a single phase. Update all compatible libraries, fix or replace incompatible ones, rewrite custom native modules, and run comprehensive regression testing before release. Timeline: 4-8 weeks. Risk: high. If a dependency that was thought to be compatible turns out to have edge case incompatibilities, the entire phase is at risk.
Incremental migration. React Native supports running old and New Architecture components in the same app during migration. The React Native Interop Layer allows New Architecture components to coexist with old Bridge components. This allows migration screen by screen or feature by feature, releasing after each increment. Timeline: 8-16 weeks. Risk: 60% lower than full migration. Each increment is a small, testable change.
For enterprise apps serving users in production, incremental migration is almost always the right choice. The risk profile is better, the impact of any single issue is contained, and the migration can proceed in parallel with feature development rather than pausing it.
The incremental approach also allows you to validate the performance improvement on the first migrated screen before committing to the full migration. If the first screen shows no user-visible improvement after migration, you have the information to question whether the migration is worth completing at this point in time.
Cost breakdown
Migration cost is primarily driven by the number of incompatible native dependencies and the complexity of custom native modules.
Dependency audit. 3-5 days engineering time. $3,000-$8,000. Non-negotiable prerequisite. The audit determines everything else.
Compatible library upgrades. Libraries that have published New Architecture-compatible versions require upgrade and regression testing. Budget $500-$1,500 per library for upgrade, testing, and any API changes required in the JavaScript layer.
Forked library maintenance. Libraries that have not published compatible versions but are actively maintained upstream. You maintain a fork with the minimum patch required for compatibility. Budget $2,000-$5,000 per forked library for the initial patch, plus $500-$1,000 per quarter for ongoing maintenance until the upstream publishes a compatible release.
Library replacements. Libraries without a path to New Architecture compatibility. Budget $5,000-$15,000 per replacement depending on the complexity of the library's interface — replacing a simple utility library is fast, replacing a complex PDF rendering library requires evaluating alternatives, implementing the replacement, and regression testing all screens that use PDFs.
Custom native module rewrites. Existing custom native modules rewritten to the TurboModule specification. Budget $8,000-$20,000 per custom module depending on complexity.
Testing and regression. Screenshot regression testing across the full device matrix for each migration increment. Budget $5,000-$10,000 for testing setup and $2,000-$4,000 per major increment.
Total cost ranges by app complexity:
| App complexity | Native deps | Incompatible deps | Total migration cost |
|---|---|---|---|
| Light (simple forms app) | 5-8 | 0-1 | $15K-$40K |
| Mid (standard enterprise app) | 10-15 | 1-3 | $40K-$80K |
| High (compliance, BLE, custom modules) | 15-25 | 3-6 | $80K-$120K |
| Very high (many custom native modules) | 20-35 | 5-10 | $120K-$180K |
Risk model
The risks in New Architecture migration are finite and manageable. The two highest-probability risks are incompatible dependencies and animation regressions.
Incompatible dependency risk. The dependency audit identifies this risk before migration starts. The risk is that a dependency believed to be compatible has edge case incompatibilities discovered during integration. Mitigation: run the full app test suite against the dependency update before migrating any screens. Catch compatibility issues early when they are cheap to fix.
Animation regression risk. The New Architecture changed animation timing behavior. Animations that looked correct in the old architecture may have subtly different timing in the New Architecture. Mitigation: screenshot regression testing before and after migration for every screen with animations.
Performance regression risk. Unlikely but possible: a specific interaction pattern performs worse in the New Architecture due to how a library was optimized for the old Bridge. Mitigation: performance testing before release, tracking frame rates and interaction latency metrics in the test suite.
Delayed timeline risk. A dependency replacement takes longer than estimated because the available alternatives have worse APIs or missing features. Mitigation: identify this during the audit phase and build buffer into the timeline for complex replacements.
User impact risk. A New Architecture regression reaches production. Mitigation: incremental migration with proper testing at each increment, phased rollout via feature flags, and a rollback plan that can revert to the previous release within 30 minutes.
How Wednesday runs migrations
Wednesday has migrated React Native apps through 3 major version upgrades without a production incident. The process is the same each time.
The engagement starts with a dependency audit. No code is changed until the compatibility matrix is complete and the scope is defined. The audit output is shared with the client: here is every incompatible dependency, here is the action required, here is the cost per action, here is the total.
The migration is planned incrementally. Screens are ordered by risk: low-risk screens (no custom native modules, only compatible libraries) go first. High-risk screens (custom native modules, incompatible dependencies) go last, after the team has built familiarity with the New Architecture patterns in the app.
Screenshot regression testing runs after every increment. The test matrix covers the same device configurations used for the app's production QA. Any visual regression is caught before release.
Each migrated increment is released to production before the next increment starts. The app is never in a partially migrated state that cannot be released. If a dependency issue stalls one screen's migration, other screens continue to be migrated and released.
The result is a migration that proceeds in parallel with feature development, with no production incidents, and with a clear cost and timeline that was defined before the first line of code was changed.
Share your React Native app details and we will return a migration scope and cost estimate within a week.
Book my 30-min call →Frequently asked questions
Not ready for a call yet? Browse React Native guides, cost analyses, and architectural decision frameworks for enterprise mobile.
Read more decision guides →About the author
Anurag Rathod
LinkedIn →Technical Lead, Wednesday Solutions
Anurag leads technical delivery at Wednesday Solutions, specializing in React Native architecture migrations and enterprise mobile modernization.
Four weeks from this call, a Wednesday squad is shipping your mobile app. 30 minutes confirms the team shape and start date.
Get your start date →Keep reading
Shipped for enterprise and growth teams across US, Europe, and Asia