Unity to React Native migration for cruise apps: a 2026 rebuild plan

TL;DR
A Unity to React Native migration for a cruise guest app in 2026 is a rebuild. No tool turns Unity scenes and C# scripts into React Native screens, so what carries over is your API contracts, data and store listing. Rebuild one module at a time and keep the live Unity app patched until the new binary replaces it.
- Four security and store deadlines from October 2025 to February 2027 each force a new Unity build.
- React Native 0.82 runs only on the New Architecture, so a rebuild started now carries no migration debt.
- An over-the-air update fixes JavaScript in minutes. A Unity fix waits for store review.
- Mercury Development's ReactJS spa platform for OneSpaWorld has run on over 160 ships since 2018.
Why cruise guest apps are leaving Unity
Cruise lines carried 37.2 million ocean passengers in 2025, per CLIA's 2026 report as summarized by TravelPulse. For most of them the guest app is the front desk.
If your app runs on Unity, a 3D feature probably came first: a deck map, a ship tour, a game. Unity draws its own interface, and that is the root of the trouble. Its IL2CPP back end compiles C# into native code inside the binary, which Unity says increases build time and app size. Its screens stay silent to VoiceOver and TalkBack until a developer builds a separate accessibility tree by hand.
One cruise product team gave us the verdict in a sentence: Unity is the wrong platform for a cruise line's mobile app. They did not want the live app shipped in React Native as it was, either. They wanted a rebuild and faster releases.
The industry is rebuilding too. DECODE reports a React Native crew app for 70,000 Royal Caribbean crew members on 40 ships, and Virgin Voyages replaced its Sailor App with a rebuilt app in 2025.
Four deadlines that force a Unity engine upgrade
Three rules arrived within eleven months; a fourth lands in February 2027. Each means a fresh Unity build, most on a newer editor.
- October 2, 2025. Unity patched CVE-2025-59489, a high-severity flaw in apps built with Unity 2017.1 and later that can allow code execution on Android.
- April 28, 2026. App Store Connect stopped accepting uploads built without Xcode 26 and the iOS 26 SDK.
- August 31, 2026. Google Play updates must target Android 16, API level 36.
- February 1, 2027. Google Play stops releasing updates without 16 KB page size support for apps targeting Android 15 and higher, which after August 31 means every update. Unity says its 4 KB builds do not run on 16 KB devices, and only its 2021 Extended Support, 2022 LTS and Unity 6 lines got the fix.
Each is a rebuild plus full regression, spent on an app you plan to retire. Budget the patches, then stop paying them.
How we built this plan
The pages that rank for this query, the dev.family tutorial, the GitNation write-up and the @azesmway/react-native-unity package, explain how to embed Unity inside React Native. None covers replacing a live Unity app, or a ship.
Platform rules here come from vendor documentation read in October 2026, cruise patterns from programs Mercury Development has worked on. We sell this work; read it as an interested view.
Port, hybrid or rebuild at a glance
| Path | What carries over | First public release | Main risk | Fits |
|---|---|---|---|---|
| Port screens one to one | The old design debt | After every screen | Old dead ends ship again | No app we know |
| React Native shell, Unity as a Library | 3D modules, for now | Shell plus first module | Extra memory | One 3D feature worth keeping |
| New app beside the old one | Backend and accounts | First slice | Guests install twice | Zero risk to the live app |
| Module-by-module rebuild, same listing | Contracts, stored data, ratings | Foundation plus pre-cruise | Scope creep in module one | Most guest apps |
Why a one-to-one port does not exist
There is no converter. Unity screens are scenes and prefabs driven by C# scripts. React Native screens are TypeScript components that render native views. Not one line of UI code moves across.
What moves across is the part guests never see:
- API contracts. Write contract tests against every endpoint the Unity app calls before the first screen.
- Business rules hidden in C#.
- Analytics event names, so dashboards survive the switch.
- Deep links, translations, image assets and the store listing.
A port also copies the design. The cruise briefs we have seen complained of dead-end screens, endless scrolling and broken login. Port those and you ship the same failures in a newer framework. Redesign each module first, the way Mercury Development's Distiller rebuild settled the design before React Native engineering began. The case against a one-shot rewrite is in our big bang rewrite guide.
Keep the live Unity app shipping while you rebuild
Freeze it. Unity gets security and compliance fixes only. New features go into React Native, or the two never converge.
Ship one last Unity release with a version gate: a minimum version set on the server and an update screen. Without it, old builds stay on guests' phones and your backend serves them forever.
Then pick where the new app lives. Virgin Voyages chose a separate listing; the old Sailor App stayed in use while the new one filled in features. Safest route, and every guest installs twice.
The other route is an update under the same bundle ID, which keeps installs and ratings. Unity's PlayerPrefs live in NSUserDefaults on iOS and SharedPreferences on Android, so the new app can carry settings over on first launch. They are unencrypted, so move secrets into the Keychain or Keystore. Release through Apple's phased release, which starts at 1% of users, and Google Play's staged rollout.
Rebuild module by module, pre-cruise first
Order the work by where the guest is, not by which screen looks worst.
- Foundation. React Native on the New Architecture, design tokens, accessibility, secure sessions and an update client.
- Pre-cruise. Booking lookup, check-in, documents and boarding pass. It runs ashore, so it is the easiest to test and the first thing guests open.
- Onboard. Daily schedule, dining reservations, deck map and chat, built for ship Wi-Fi as covered in our offline-first guide for ships.
- Revenue. Packages, internet plans and orders, inside PCI DSS scope.
- Retirement. Remove the last Unity view and the Unity framework with it.
Two traps sit in the onboard estimate. A token issued ashore may mean nothing to the ship's network, so design that handover first. And ship time is not phone time: ships reset clocks across time zones, so store schedules in ship time with an explicit offset.
A 3D deck map that must survive can live inside React Native through Unity as a Library. Unity lists the cost: one runtime per app, full-screen rendering only on mobile, and 80 to 180 MB held after unloading. A bridge, nothing more.
Faster releases come from over-the-air updates
A React Native app has two layers: a reviewed native binary and the JavaScript bundle it loads. Expo's EAS Update replaces that bundle in minutes, which App Store Review Guideline 2.5.2 and Google Play's interpreter exception allow for fixes. New features still go through review.
A Unity app has no equivalent: IL2CPP compiles C# into the binary, so every fix is a store build. CodePush, the old React Native route, closed with Microsoft App Center on March 31, 2025.
The rest is pipeline: Mercury Development's Distiller rebuild added CI/CD for both stores. Ship the update client in your first binary, since builds already on phones cannot gain one.
Accessibility goes into the first module
Before Unity 2023.2, Unity's own blog says, a screen reader user could not interact with a Unity app until the screen reader was off. Unity 6 ships an Accessibility module, but developers maintain its tree by hand.
React Native maps its accessibility props to VoiceOver and TalkBack, and text follows the system font size by default. Test bottom sheets early: accessibilityViewIsModal works only on iOS, and Android needs importantForAccessibility to hide background content. WCAG 2.2 criterion 1.4.4 asks for text that resizes to 200% without losing content.
The legal floor is real. In Spector v. Norwegian Cruise Line, the Supreme Court held in 2005 that Title III of the ADA applies to foreign-flag cruise ships in US waters. The European Accessibility Act has covered apps of waterborne passenger transport services since June 28, 2025. Mercury Development builds to WCAG 2 AA and ADA requirements and lists ADA compliant apps for passenger transport services.
How the current cruise apps score on accessibility is shown in our cruise mobile apps report.
Which migration path fits your app
- Mostly lists, forms and bookings: rebuild module by module on the same listing.
- One 3D feature guests love: rebuild the rest and embed that feature through Unity as a Library for now.
- An unstable Unity app: freeze it, ship the version gate, release the foundation and pre-cruise first.
- A Swift and Kotlin team: a native rebuild is a fair call, at the cost of one codebase and over-the-air fixes.
- The app is a game: keep Unity. React Native is the wrong tool for that job.
What each path costs, module by module, is broken down in our guide to cruise app development cost.
What our cruise programs show
From Mercury Development's records for two programs.
OneSpaWorld describes itself as the operator of health and wellness centers onboard cruise ships. Mercury Development's platform for its spa staff has been in production since 2018 on over 160 ships operated by multiple cruise lines. It runs as ReactJS web applications on onboard servers with no external internet, with middleware to each line's APIs. The program's E-Forms platform has a TypeScript and React front end, runs on more than 1,000 devices and syncs over low or sporadic bandwidth.
Since late 2021, Mercury Development has built React Native food and beverage apps for a major cruise line it cannot name under NDA, plus dining host and tableside ordering tools and a middleware that aggregates dozens of legacy microservices for passenger apps.
Port the contracts, not the screens
A live guest app's value sits in what it talks to and who installed it. The Unity interface is the cheapest part to throw away and the most expensive to copy. A port spends the budget on the copy.
So change the vendor interview. Ask: "Which contract tests will you write against our APIs before the first screen?" A team that rebuilds well answers with a list. A team that ports answers with a screen count.
And own what you pay for. Mercury Development's About page states that all work is work-for-hire and the customer owns the code and all underlying IP.
Written by Alexey Rodionov, Lead Front-end Developer at Mercury Development since 2020. Alexey is a Google Developer Expert in Web Technologies and a Chromium contributor whose code ships in Chrome DevTools, Google's Bubblewrap and Microsoft PWABuilder. The architecture notes behind this article draw on React and React Native projects he has worked on at Mercury Development.
Replacing a Unity guest app? Start with a module map
Send us the screens your current app has and the APIs it calls. We will sort them into modules, mark what carries over and what gets rebuilt, and show which module can ship first while your Unity app stays live.