Skip to Content
v1.33.8 · shipped One-screen report · Looks like your app Read the changelog →
Migration guidesReact Native CLI ↔ Expo

React Native CLI ↔ Expo

Days Low risk

Both directions covered. Pick one based on what you need:

  • CLI → Expo if you want EAS Build, OTA updates, and the Expo SDK package family.
  • Expo → CLI (expo prebuild) if you need a native module Expo Go doesn’t allow, or you want to fully own the ios/ and android/ folders.

You may not need to choose. You can run a bare React Native CLI app and run npx install-expo-modules@latest to pull in just the Expo SDK packages you want. That hybrid setup is what § 5.2 of the Capacitor → RN plan  recommends for cost-conscious teams. Mushi Mushi works the same in all three setups.

Direction A: React Native CLI → Expo (managed-with-dev-client)

Why

  • Cloud builds via EAS Build (free tier; paid plans from $19/mo, see expo.dev/pricing ): no Mac mini, no Fastlane, no GitHub Actions YAML.
  • OTA updates via EAS Update, for JavaScript-only changes, without a new store build.
  • Expo SDK packages are released together for each SDK version.

Migration checklist

Migration checklist
6 required steps
  1. Step 01
    Audit native modules for Expo compatibility
  2. Step 02
    Install Expo packages alongside RN
  3. Step 03
    Create app.json / app.config.ts
  4. Step 04
    Build a dev client
  5. Step 05
    Mushi Mushi: no code changes needed
  6. Step 06
    Move CI to EAS Build (optional)

Direction B: Expo → bare React Native CLI (expo prebuild)

Why

  • A native dependency you can’t wrap as an Expo config plugin.
  • Want to fully own native projects (e.g., specific Xcode build settings Expo doesn’t expose).
  • Want to switch off EAS Build and own your CI on GitHub Actions + Fastlane (see § 5 of the Cap → RN plan  for the full recipe).

Migration checklist

Migration checklist
6 required steps
  1. Step 01
    Commit a clean state before prebuild
  2. Step 02
    Run expo prebuild
  3. Step 03
    Commit the generated native projects
  4. Step 04
    Optionally remove Expo CLI references
  5. Step 05
    Mushi Mushi: no changes needed
  6. Step 06
    Wire your own CI

Hybrid (the third option, often the right one)

You can run a fully bare React Native CLI app AND consume select Expo SDK packages without the Expo CLI:

npx install-expo-modules@latest npm install expo-haptics expo-secure-store expo-image-picker expo-sensors cd ios && bundle exec pod install

You get the Expo packages you picked, your CI stays on Fastlane + GitHub Actions, and Mushi Mushi runs the same way it does everywhere. The Capacitor → React Native guide uses this setup.

Verification

After either direction, smoke-test:

  1. App boots, opens, shows the Mushi Mushi widget on tap or shake.
  2. A test report appears on the Reports page of the Mushi Mushi admin console.
  3. Native modules (camera, secure storage, etc.) work on a real device.

Next step: no Mushi Mushi project yet? Create a free account  (no card), then follow the React Native and Expo quickstart to add the widget.

References

Last updated on