Cordova → React Native
Weeks High riskA two-hop migration: stabilise on Capacitor first, then port screen-by-screen to React Native. This is the safest path if your Cordova app is non-trivial, because it lets you ship features the whole time instead of feature-freezing for a full rewrite.
If your app is small (a handful of screens, no deep native plugin dependencies) you can skip the Capacitor stop and port directly to RN — see the Direct path section below.
This guide composes two existing guides. Read them in order: Cordova → Capacitor first, then Capacitor → React Native. Mushi stays mounted on the same project the whole way through.
Why migrate
You’re on Cordova and want to end up on React Native because:
- Performance. WebView-based shells hit a ceiling on chat scrolls, large lists, and animations. RN’s JS-to-native bridge clears it.
- Native API access. Modern iOS / Android APIs (App Intents, WidgetKit, Health, etc.) ship to RN faster than to Cordova or Capacitor.
- Hiring. RN engineers are easier to find in 2026 than Cordova ones.
You should NOT migrate if:
- You ship daily and cannot afford a feature freeze on the mobile surface.
- Your differentiator is web-first SEO (RN Web is OK, but Next.js is better).
- Your app is mostly a thin wrapper around a great mobile web experience.
Two paths
Path A: Cordova → Capacitor → React Native (recommended)
Lower-risk because you stay shippable at every step.
- Week 1-2. Migrate Cordova → Capacitor following that guide. Ship to production. This alone is a meaningful win (better debugging, modern WebView, modern plugin ecosystem).
- Week 3-8. Migrate Capacitor → React Native following that guide. Dual-ship for a couple of weeks before sunsetting the Capacitor build.
This is what we recommend for any app with > ~10 screens or > 5 native plugins.
Path B: Direct Cordova → React Native
Faster end-to-end, riskier mid-migration. Use only when:
- Your app has a small surface area (≤ 10 screens, ≤ 5 native plugins).
- You’re comfortable feature-freezing the mobile surface for the full migration window.
- Your React/JS code is already well-isolated from Cordova plugin calls (you can swap call sites to RN equivalents directly).
Mushi during the migration
Identical to the Capacitor → React Native § 7
plan: same project, same apiKey, dual-ship Cordova/Capacitor and RN at the
same time, sunset the legacy build only after the RN one has been stable for
a week in beta.
You’ll touch the Mushi SDK exactly once per hop:
- Hop 1 (Cordova → Capacitor): swap the legacy Cordova plugin for
@mushi-mushi/capacitorand callMushi.configure({ projectId, apiKey }). - Hop 2 (Capacitor → React Native): swap that for
@mushi-mushi/react-nativeand mount<MushiProvider projectId apiKey>at the app root.
Migration checklist (Path A)
- Step 01Audit Cordova plugins (per the Cap→RN plugin map)
- Step 02Hop 1: complete Cordova → Capacitor
- Step 03Verify Mushi reports flow on the Capacitor build
- Step 04Hop 2: bootstrap the RN project (RN 0.83+, New Architecture)
- Step 05Port screens one at a time
- Step 06Mount @mushi-mushi/react-native + smoke-test
- Step 07Dual-ship Capacitor + RN for ≥ 2 weeks
- Step 08Sunset the Cordova/Capacitor build
Migration checklist (Path B — direct)
- Step 01Plugin audit (lower tolerance — every Cordova plugin needs an RN answer)
- Step 02Bootstrap RN 0.83 with the New Architecture
- Step 03Port your design system to RN primitives or a kit (NativeWind / Tamagui)
- Step 04Port screens — feature freeze the Cordova build
- Step 05Mount @mushi-mushi/react-native (same projectId / apiKey)
- Step 06Closed beta on TestFlight / Play Internal
- Step 07Cutover and sunset Cordova
Verification
- Mushi inbox shows reports tagged with the new SDK on a real device.
- Cold-start time on a mid-tier Android device drops by ≥ 30 % vs the Cordova baseline (rough sanity check; varies by app).
- Crash rate is ≤ 0.5 % for the first 7 days of beta.
Rollback
The strength of Path A is that rollback is trivial at any step: if the RN build hits a wall in week 5, you simply keep shipping the Capacitor build and pause RN work. The Cordova build is also still in your git history if hop 1 itself goes sideways (rare but possible).
References
- Cordova → Capacitor (hop 1)
- Capacitor → React Native (hop 2, full plan)
@mushi-mushi/react-nativeSDK reference