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.
As of 2026, most projects don’t need to choose. You can run a bare
React Native CLI app and selectively npx install-expo-modules@latest to
pull in just the Expo SDK packages you want. That hybrid setup is what
the Capacitor → RN guide
recommends for cost-conscious teams.
Direction A: React Native CLI → Expo (managed-with-dev-client)
Why
- Cloud builds via EAS Build ($19–$99/mo) — no Mac mini, no Fastlane, no GitHub Actions YAML.
- OTA updates via EAS Update without store review.
- Expo SDK packages co-maintained per release; they always work together against the same SDK.
Migration checklist
Migration checklist
6 required steps
- 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: no 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 Cap → RN § 5 for the full recipe).
Migration checklist
Migration checklist
6 required steps
- 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: 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 installThat’s it. You get the Expo packages co-maintained as a unit, your CI stays on Fastlane + GitHub Actions, and Mushi runs the same way it does everywhere. This is the recommended setup for glot.it.
Verification
After either direction, smoke-test:
- App boots, opens, shows the Mushi widget on tap or shake.
- A test report appears in the Mushi admin console within ~5s.
- Native modules (camera, secure storage, etc.) work on a real device.
References
- Expo: Install Expo modules in an existing React Native project
- Expo: prebuild
- Capacitor → React Native § 5.2 — the hybrid recipe in detail
Last updated on