Expo: React Native Framework, SDK, EAS Build Guide
Expo is a framework + platform for React Native apps — managed workflow, EAS Build, Expo Go, OTA updates. Ships iOS/Android apps without native config.
What is Expo?
Expo is an open-source framework and cloud platform for building React Native apps. It abstracts away the native iOS and Android complexity so JavaScript developers can ship mobile apps without writing Swift, Kotlin, or maintaining Xcode/Android Studio configurations. Expo is to React Native what Next.js is to React: opinionated tooling that handles the boring infrastructure.
Expo includes the Expo SDK (a curated set of native modules with JavaScript APIs), Expo Go (a development client for testing on devices without local builds), EAS (Expo Application Services — cloud build, submit, update), and the Expo CLI (development server + scaffolding).
Why use Expo?
- Skip native setup. No Xcode/Android Studio required for development.
- Cross-platform from one codebase. Same JS/TypeScript runs on iOS, Android, and web.
- Curated SDK. Camera, location, notifications, biometrics — all pre-integrated and tested.
- EAS Build. Cloud builds for iOS/Android — no Mac required for iOS builds.
- OTA updates. Push JS-only updates without app store review.
- File-system routing. Expo Router brings Next.js-style routing to mobile.
- Backed by Stripe-funded company. Stable, growing, used in production at scale.
Expo workflows: managed vs bare
| Workflow | What you write | Native code access | Best for |
|---|---|---|---|
| Managed (default) | JS/TS only | Via Expo SDK + config plugins | Most apps |
| Bare | JS/TS + native code as needed | Full Xcode/Android Studio | Apps needing custom native modules |
Modern Expo (SDK 50+) has blurred this distinction with "Continuous Native Generation" (CNG) and config plugins — managed apps can include nearly any native dependency.
Expo ecosystem components
| Component | Purpose |
|---|---|
| Expo CLI | Dev server, scaffolding, build commands |
| Expo SDK | 50+ native modules with unified JS API |
| Expo Go | Sandbox app for testing without local builds |
| EAS Build | Cloud iOS/Android builds |
| EAS Submit | Auto-submit to App Store + Play Store |
| EAS Update | OTA updates — push JS without app store |
| Expo Router | File-based routing (Next.js style) |
| Expo Dev Client | Custom dev client with native modules |
| Snack | Browser-based Expo playground |
Quickstart: create an Expo app
# Install Expo CLI
npm install -g expo
# Create new app
npx create-expo-app my-app
cd my-app
# Start dev server
npx expo start
# Scan QR code with Expo Go (iOS) or Expo Go app (Android)
# OR press 'w' for web, 'i' for iOS simulator, 'a' for Android emulatorCommon Expo SDK modules
| Module | Capability |
|---|---|
expo-camera | Camera access (photo/video) |
expo-location | GPS, geocoding |
expo-notifications | Push notifications |
expo-secure-store | Encrypted key-value storage |
expo-local-authentication | FaceID / TouchID / fingerprint |
expo-image-picker | Photo library / camera picker |
expo-file-system | File I/O |
expo-haptics | Haptic feedback |
expo-av | Audio/video playback (deprecated; use expo-video/audio) |
expo-maps | Native maps |
expo-sqlite | SQLite database |
EAS Build: cloud builds
EAS Build runs iOS/Android builds on Expo's cloud infrastructure. No Mac required for iOS. Configuration in eas.json:
{
"build": {
"production": {
"ios": { "simulator": false },
"android": { "buildType": "app-bundle" }
},
"preview": {
"distribution": "internal"
}
}
}eas build --platform all --profile productionFree tier: 30 builds/month for hobby use. Paid for higher volume.
OTA updates with EAS Update
Push JS-only updates without app store review:
eas update --branch production --message "Fix login bug"Users get the update on next app launch. Works only for JS changes — native module changes still need a new build.
Expo vs React Native CLI
| Aspect | Expo | React Native CLI |
|---|---|---|
| Setup complexity | Low | High (Xcode + Android Studio) |
| Native code | Via config plugins | Direct access |
| Build process | EAS Cloud (or local) | Local Xcode/Gradle |
| OTA updates | EAS Update built-in | Manual setup |
| App size | Slightly larger | Slimmer |
| Best for | Most apps; faster dev | Heavy native customization |
FAQ: Expo
Is Expo free?
The framework + SDK are open-source/free. EAS Build/Update have free tiers and paid plans for higher usage.
Should I use Expo or React Native CLI?
Default to Expo. Modern Expo (SDK 50+) handles ~95% of React Native use cases. Switch to bare/CLI only if you need niche native modules.
Can Expo apps use any native module?
Yes via config plugins (managed) or by ejecting to bare workflow. Most popular RN libraries have Expo config plugins.
What is Expo Go?
A free sandbox app for iOS/Android. Scan a QR code; your dev app loads instantly without building.
What's the difference between EAS Build and EAS Update?
EAS Build: compiles native binaries (.ipa, .apk). EAS Update: pushes JS bundle changes (no native rebuild).
Can I publish to the App Store / Play Store?
Yes. EAS Submit automates submission. Or download the binary from EAS Build and submit manually.
What's Expo Router?
File-based routing for React Native (modeled after Next.js App Router). Bring Next.js DX to mobile.
Does Expo support web?
Yes — same code can target React Native Web. Useful for marketing pages or shared component libraries.
Load test your Expo app's backend with LoadFocus
Expo handles the mobile client; LoadFocus handles the backend load. Run JMeter and k6 scripts against your API from 25+ regions with up to 12,500 VUs. Sign up free at loadfocus.com/signup.
Related LoadFocus Tools
Put this concept into practice with LoadFocus — the same platform that powers everything you just read about.