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

WorkflowWhat you writeNative code accessBest for
Managed (default)JS/TS onlyVia Expo SDK + config pluginsMost apps
BareJS/TS + native code as neededFull Xcode/Android StudioApps 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

ComponentPurpose
Expo CLIDev server, scaffolding, build commands
Expo SDK50+ native modules with unified JS API
Expo GoSandbox app for testing without local builds
EAS BuildCloud iOS/Android builds
EAS SubmitAuto-submit to App Store + Play Store
EAS UpdateOTA updates — push JS without app store
Expo RouterFile-based routing (Next.js style)
Expo Dev ClientCustom dev client with native modules
SnackBrowser-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 emulator

Common Expo SDK modules

ModuleCapability
expo-cameraCamera access (photo/video)
expo-locationGPS, geocoding
expo-notificationsPush notifications
expo-secure-storeEncrypted key-value storage
expo-local-authenticationFaceID / TouchID / fingerprint
expo-image-pickerPhoto library / camera picker
expo-file-systemFile I/O
expo-hapticsHaptic feedback
expo-avAudio/video playback (deprecated; use expo-video/audio)
expo-mapsNative maps
expo-sqliteSQLite 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 production

Free 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

AspectExpoReact Native CLI
Setup complexityLowHigh (Xcode + Android Studio)
Native codeVia config pluginsDirect access
Build processEAS Cloud (or local)Local Xcode/Gradle
OTA updatesEAS Update built-inManual setup
App sizeSlightly largerSlimmer
Best forMost apps; faster devHeavy 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.

How fast is your website?

Elevate its speed and SEO seamlessly with our Free Speed Test.

Free Website Speed Test

Analyze your website's load speed and improve its performance with our free page speed checker.

×