React Native CLI ↔ Expo
Days Low riskBoth 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 theios/andandroid/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
- Step 01Audit native modules for Expo compatibility
- Step 02Install Expo packages alongside RN
- Step 03Create app.json / app.config.ts
- Step 04Build a dev client
- Step 05Mushi Mushi: no code changes needed
- Step 06Move 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
- Step 01Commit a clean state before prebuild
- Step 02Run expo prebuild
- Step 03Commit the generated native projects
- Step 04Optionally remove Expo CLI references
- Step 05Mushi Mushi: no changes needed
- Step 06Wire 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 installYou 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:
- App boots, opens, shows the Mushi Mushi widget on tap or shake.
- A test report appears on the Reports page of the Mushi Mushi admin console.
- 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
- Expo: Install Expo modules in an existing React Native project
- Expo: prebuild
- Capacitor → React Native plan § 5.2 : the hybrid recipe in detail