Skip to main content
Expo Go is a pre-built sandbox app that lets you try Expo and prototype apps without building native projects. It’s the fastest way to get started with Expo development.

What is Expo Go?

Expo Go is a free, open-source app available on iOS and Android that includes a pre-configured runtime with many Expo SDK modules built-in. It allows you to load and run Expo projects by scanning a QR code.

Instant Preview

Scan a QR code and see your app running in seconds

No Build Required

Skip Xcode and Android Studio setup completely

Hot Reload

See changes instantly with Fast Refresh

50+ SDK Modules

Camera, Location, Sensors, and more included

Installation

Download Expo Go from your device’s app store:

iOS

Download from the App Store

Android

Download from Google Play

How to Use Expo Go

1

Create or open a project

npx create-expo-app my-app
cd my-app
2

Start development server

npx expo start
3

Scan QR code

  • iOS: Use the Camera app to scan the QR code
  • Android: Open Expo Go and tap “Scan QR code”
4

App loads in Expo Go

Your app opens and connects to the development server
Your device and computer must be on the same WiFi network. If they’re not, use npx expo start --tunnel.

What’s Included

Expo Go comes with these SDK modules pre-installed:

Core Modules

  • expo-asset - Asset loading system
  • expo-constants - App and device constants
  • expo-file-system - File system access
  • expo-font - Custom fonts
  • expo-keep-awake - Prevent screen sleep

Device Features

  • expo-camera - Camera access
  • expo-location - GPS and location
  • expo-sensors - Accelerometer, gyroscope, magnetometer
  • expo-battery - Battery information
  • expo-device - Device information
  • expo-brightness - Screen brightness control

Media & UI

  • expo-image - Optimized image component
  • expo-image-picker - Select photos and videos
  • expo-video - Video playback
  • expo-audio - Audio playback and recording
  • expo-blur - Blur effects
  • expo-glass-effect - Glass morphism (iOS 18+)
  • expo-symbols - SF Symbols (iOS)

Storage & Network

  • expo-sqlite - SQLite database
  • expo-secure-store - Encrypted storage
  • expo-network - Network information
  • expo-linking - Deep linking

Authentication

  • expo-auth-session - OAuth flows
  • expo-apple-authentication - Sign in with Apple
  • expo-local-authentication - Biometric auth

Utilities

  • expo-barcode-scanner - Scan barcodes and QR codes
  • expo-clipboard - Clipboard access
  • expo-haptics - Haptic feedback
  • expo-web-browser - In-app browser
  • expo-sharing - Share content
  • expo-calendar - Calendar access
  • expo-contacts - Contacts access
For a complete list of modules included in Expo Go, see the Expo SDK documentation.Note: The exact list depends on the Expo SDK version. Expo Go typically includes the latest stable SDK.

Limitations

Expo Go has important limitations you should understand:
Cannot add custom native codeYou cannot:
  • Add custom Swift/Kotlin/Objective-C/Java code
  • Modify native project files (Info.plist, AndroidManifest.xml)
  • Change native build settings
  • Add custom CocoaPods or Gradle dependencies
Limited to included modulesYou can only use:
  • Modules pre-installed in Expo Go
  • Pure JavaScript libraries
  • React Native core components
You cannot use:
  • Third-party native libraries (unless in Expo Go)
  • Custom native modules
  • Many popular React Native libraries
Configuration restrictionsSome app.json settings don’t apply in Expo Go:
  • App icon and splash screen (uses Expo Go branding)
  • Bundle identifier / package name
  • Native permissions (uses Expo Go’s permissions)
  • Push notification configuration

What You Can’t Do

  • Use react-native-firebase
  • Add custom fonts via native configuration
  • Use native payment SDKs
  • Integrate analytics that require native code
  • Use libraries with native dependencies not in Expo Go
  • Test app icons and splash screens
  • Test push notifications with your own credentials

When to Use Expo Go

Perfect for:
  • Learning Expo and React Native
  • Rapid prototyping
  • Demos and presentations
  • Quick testing on device
  • Tutorials and workshops
  • Apps using only Expo SDK modules
Not suitable for:
  • Production apps
  • Apps requiring custom native code
  • Apps using third-party native libraries
  • Testing platform-specific features
  • Apps with specific branding requirements
  • Complex native integrations

Transitioning from Expo Go

When you outgrow Expo Go, transition to development builds:

Option 1: Local Development Build

1

Generate native projects

npx expo prebuild
This creates ios/ and android/ directories.
2

Install dependencies

# iOS
npx pod-install

# Android (automatic)
3

Run on device/simulator

npx expo run:ios
npx expo run:android

Option 2: EAS Build (Cloud)

1

Install EAS CLI

npm install -g eas-cli
2

Configure EAS

eas build:configure
3

Create development build

eas build --profile development --platform ios
eas build --profile development --platform android
4

Install on device

Download and install the build on your device
Development builds work just like Expo Go, but with your exact dependencies and configuration.

Development Workflow Comparison

Expo Go

Pros:
  • Instant setup
  • No build process
  • Fast iteration
  • Easy sharing
Cons:
  • Module limitations
  • No custom native code
  • Can’t test final app

Development Build

Pros:
  • Any native module
  • Custom native code
  • Full configuration
  • Test production features
Cons:
  • Requires build step
  • Longer setup time
  • Need native tools (or EAS)

Common Scenarios

No. Expo Go is a development tool only. For production:
  1. Create a development build or use expo prebuild
  2. Build for production with EAS Build or locally
  3. Submit to app stores
Your production app will be standalone, not running in Expo Go.
You need to create a development build:
# Install the library
npx expo install react-native-library

# Generate native projects
npx expo prebuild

# Build and run
npx expo run:ios
Or use EAS Build to build in the cloud.
Yes! If your app works in Expo Go, others can try it:
  1. Publish your app:
    eas update
    
  2. Share the URL or QR code
  3. They scan with Expo Go
This only works if your app doesn’t use custom native code.
Common reasons:
  • Using development-only features
  • Hardcoded localhost URLs
  • Missing permissions in app.json
  • Environment-specific code
  • Different bundle identifiers
Always test with a development build before production.

Debugging in Expo Go

Developer Menu

Access the developer menu by:
  • iOS: Shake device or press Cmd+D (simulator)
  • Android: Shake device or press Cmd+M / Ctrl+M (emulator)
  • Terminal: Press m where expo start is running
Menu options:
  • Reload
  • Toggle Element Inspector
  • Toggle Performance Monitor
  • Debug Remote JS (legacy)
  • Open React DevTools

Console Logs

View logs in multiple places:
  1. Terminal where you ran expo start
  2. React DevTools (press j in terminal)
  3. Expo Go app (shake device, tap “Show Dev Menu”, “Debug Remote JS”)
console.log('Info message');
console.warn('Warning message');
console.error('Error message');

Element Inspector

  1. Shake device
  2. Tap “Toggle Element Inspector”
  3. Tap any UI element to inspect

Tips & Tricks

  • Enable Fast Refresh (on by default)
  • Keep Expo Go open between changes
  • Use r to manually reload if needed
  • Clear Metro cache if things seem broken:
    npx expo start --clear
    
  1. Start dev server: npx expo start
  2. Open Expo Go on multiple devices
  3. Scan the same QR code
  4. All devices update together!
Expo Go requires network connection to load apps. For offline development:
  1. Create a development build
  2. Load the build on your device
  3. Develop offline (build includes all code)
Share your app easily:
  1. Run eas update to publish
  2. Share the project URL
  3. Team members scan with Expo Go
  4. Everyone sees the same version

Next Steps

Development Workflow

Master the development cycle

Create a Project

Build your first app

Development Builds

Go beyond Expo Go

Build & Deploy

Ship to production