Expo Go is a prebuilt app that runs your JavaScript instantly. It cannot include arbitrary native code, so some libraries need a custom development build instead.
Core concepts
- Expo Go: Great for learning and early UI work: scan a QR code and your app runs with the native modules bundled in Expo Go. It cannot run libraries that need their own native code. — Expo docs
- Development builds: A development build is your own app binary that includes the native modules you chose and still loads JavaScript from the dev server. Create one with EAS Build or a local build. — Development builds
- Which libraries force a dev build: Typically native-heavy libraries such as
react-native-mmkv, React Native Firebase, RevenueCat's purchases SDK, and some push-notification setups. Check each library's docs against your SDK. — RN Firebase - Prebuild and config plugins: Expo generates
ios/andandroid/folders from your config via prebuild, and config plugins add native settings without hand-editing them. Treat the native folders as generated output. — Expo docs
Concept videos
YouTube channels and searches for these topics. On a large screen they open in the reading panel next to the roadmap.
- Development builds explained — YouTube search: Expo development build vs Expo Go
Explanation
The practical rule
Start in Expo Go while you build screens and navigation. The moment you add a library that needs native code, create a development build once and keep using it for daily work.
Keep native folders generated
If you edit ios/ or android/ by hand, regenerating them erases your edits. Prefer config plugins so the setup is reproducible by you and by your agent.
What Is It?
A development build is a custom debug version of your app that includes your native dependencies.
Why Should I Care?
It lets you use the full native ecosystem while keeping fast refresh and the Expo workflow.
Real World Analogy
Expo Go is a rental car with a fixed feature list; a development build is your own car with the extras you chose, same road, same driving.
Visual Mental Model
Screens + JS only -> Expo Go
Needs native module -> Development build (EAS) -> same dev serverSmallest Possible Example
npx expo install expo-dev-client
eas build --profile development --platform ios
npx expo start --dev-clientCommon Mistakes
❌ Fighting 'native module not found' errors in Expo Go.
That error usually means the library needs a development build, not a code fix.
❌ Hand-editing the generated native folders.
Use config plugins so the next prebuild does not erase your changes.
Build This Mini Project
Install expo-dev-client, create a development build for your phone, and confirm the app loads from your dev server.
Prompts for Cursor, Claude Code & Codex
Paste these into Cursor, Claude Code, Codex, or any coding agent. Replace the bracketed parts with your app details, and keep the agent in plan mode first so you review the approach before it edits files.
Decide Expo Go or dev build
For these planned libraries: [list], check each library's documentation for Expo Go support with my SDK version. Output a table: library, works in Expo Go (yes/no/unknown), source link. Do not install anything.Configure a dev build
Add expo-dev-client, create an eas.json with development, preview and production profiles, and explain how I build and install the development profile on a physical iPhone and Android phone.Rules, databases & blogs to use
- Mobile rules: rules for native-module projects
- Expo + Jest + Detox rule: setup with a dev client

