7 minute read

Quick Answer

Expo is the foundational infrastructure for modern React Native development. It provides a managed development environment, cloud build services (EAS), over-the-air updates, and a comprehensive standard library of native APIs. The Continuous Native Generation (CNG) model eliminates the binary choice between “managed” and “bare” workflows, allowing developers to generate native projects on-demand while maintaining configuration-driven control.

What is Expo?

Expo is a meta-framework built atop React Native that abstracts native complexity while providing tools and services for the entire application lifecycle. It includes the Expo CLI, a set of managed native modules, cloud services (EAS Build, EAS Update, EAS Submit), and development tooling.

SDK 54 Highlights

Key Features:

  • React Native 0.81 support
  • New Architecture (Fabric + TurboModules) default
  • Continuous Native Generation (Prebuild)
  • Swift Package Manager (iOS) default
  • EAS Build cloud compilation
  • OTA updates (EAS Update)
  • Expo Router (file-based routing)

Release Date: September 10, 2025

Maintainer: Expo (development team)

Core Architecture

Continuous Native Generation (CNG)

The historical dichotomy between “managed” and “bare” workflows has been unified:

Prebuild (npx expo prebuild):

  • Generates native ios/ and android/ directories on-demand
  • Native projects treated as build artifacts, not source code
  • Config Plugins program native configuration

Config Plugins:

  • JavaScript functions modifying native configs during prebuild
  • Examples: AndroidManifest.xml, Info.plist, Podfile
  • Eliminates manual native editing for standard integrations

Fingerprinting (@expo/fingerprint):

  • Generates unique hash of project inputs
  • Enables CI/CD caching to skip unnecessary native builds
  • Critical for EAS Build optimization

The New Architecture (Default in SDK 52+)

Fabric Renderer:

  • Concurrent rendering with React 18/19
  • Synchronous JSI-based communication
  • Eliminates legacy bridge bottleneck

TurboModules:

  • Lazy-loaded native modules
  • Faster app startup
  • Reduced memory footprint

Implications:

  • Expo Go app only supports New Architecture (legacy removed)
  • Legacy libraries require Development Builds
  • Interop layer enables gradual migration

Runtime Environments

Expo Go (Development Client):

  • Pre-compiled app from App Store/Play Store
  • Contains standard set of native SDKs
  • Excellent for rapid prototyping
  • Limitation: Cannot run custom native code

Development Builds:

  • Custom-compiled app containing project’s specific native dependencies
  • Created locally or via EAS Build
  • Required for libraries needing native linking
  • Standard for professional teams

Platform Support

Platform Minimum Version Build Tool Status
iOS iOS 15.1+ Xcode 26+ Full Support
Android Android 7.0+ (API 24) JDK 17+, Gradle Full Support
Web Chrome 94+ Metro bundler Stable (via react-native-web)
macOS macOS 10.15+ react-native-macos Community (Out-of-Tree)
tvOS tvOS 17+ react-native-tvos Community (Out-of-Tree)

Key Features

1. EAS Build (Cloud Compilation)

Cross-Platform Compilation:

  • Build iOS apps from Windows/Linux
  • Cloud runners execute Xcode build process
  • Managed credentials (certificates, provisioning profiles)

Configuration (eas.json):

{
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal"
    },
    "production": {
      "distribution": "store"
    }
  }
}

Profiles:

  • Development: Debug mode, connects to local Metro
  • Preview: Staging API testing
  • Production: Optimized release build

2. EAS Update (OTA Updates)

Mechanism:

  • Push JavaScript bundle updates without App Store review
  • Check for updates on app launch
  • Download and apply new bundle

Constraint - The “Native Contract”:

  • Can only change JavaScript, assets, simple config
  • Cannot change native code or new libraries requiring linking
  • Violation causes app crash

Strategic Value:

  • Hotfix critical bugs in minutes
  • Bypass multi-day App Store review process
  • A/B testing with rollouts

3. Expo Router (File-Based Routing)

Features:

  • File-based routing (app/settings/profile.tsx → /settings/profile)
  • Deep linking automatic
  • API Routes (app/api/user+api.ts → serverless function)

Paradigm:

  • Adoption of Next.js-style routing patterns
  • Unified full-stack React development
  • Server-side logic within mobile project

4. Native Modules (Standard Library)

Multimedia:

  • expo-video (replaces expo-av)
  • expo-image (high-performance image loading)

Device Hardware:

  • expo-camera, expo-location
  • expo-sensors, expo-barcode-scanner

Security:

  • expo-local-authentication (FaceID, Biometrics)
  • expo-secure-store (encrypted key-value)
  • expo-crypto (hashing, random bytes)

Ecosystem & Integrations

UI & Styling Libraries

Tamagui:

  • High-performance UI kit
  • Static compiler optimization
  • Works on Mobile + Web

Gluestack UI:

  • Unstyled, accessible components
  • Styled via NativeWind (Tailwind CSS)
  • Universal across platforms

Expo UI (Alpha):

  • First-party high-fidelity components
  • SwiftUI (iOS) and Jetpack Compose (Android) backing
  • Future direction of Expo ecosystem

State Management

Server State:

  • React Query (TanStack Query) - caching, refetching
  • Handles mobile network reliability

Client State:

  • Zustand - minimal boilerplate
  • Redux Toolkit - enterprise standard

Persistence:

  • expo-file-system - file storage
  • expo-sqlite - SQL database (New Architecture ready)

Performance Metrics

Metric Expo SDK 54 Capacitor 8 Flutter 3.38
Startup Time ~0.45s ~0.42s ~0.45s
Bundle Size ~25MB ~20MB ~20MB
OTA Updates Native (EAS) Via plugins N/A (requires full rebuild)
Build Time Cloud (EAS) or Local Local Local
DX (Developer Experience) Excellent Very Good Good

Expo vs Competitors

Expo vs Capacitor

Feature Expo SDK 54 Capacitor 8
Framework React Native only Framework-agnostic (Web tech)
Runtime Native JavaScript bridge System WebView
Code Sharing Mobile + Web (RN Web) Higher (Web + Mobile unified)
Native Access Config Plugins Swift/Kotlin direct editing
OTA Updates EAS Update (built-in) Via third-party (CodePush)
Best For React Native teams Web-first teams

Expo vs Flutter

Feature Expo SDK 54 Flutter 3.38
Language JavaScript/TypeScript Dart
Rendering Native widgets Custom canvas
Web Support React Native Web (DOM) CanvasKit (SEO-poor)
UI Consistency Platform-adaptive Pixel-perfect
Ecosystem npm registry pub.dev

Best Use Cases

Ideal For

  1. Greenfield Projects
    • New apps starting from scratch
    • CNG velocity advantages
    • No technical debt migration
  2. Cross-Platform Business Applications
    • E-commerce, SaaS companions
    • Data display, forms, standard interactions
  3. Web-First Teams
    • Strong React/Next.js skills
    • Minimal native knowledge required
    • Expo Router shares logic with web
  4. Rapid Iteration Teams
    • Startups requiring fast shipping
    • OTA updates for instant bug fixes
    • Fast Refresh accelerates development

Avoid For

  1. High-Fidelity 3D Games
    • expo-gl enables WebGL, but Unity/Unreal superior
    • Complex 3D physics engines not optimized
  2. Deep System Modifications
    • Root-like access, MDM control
    • Obscure hardware peripherals
    • Config Plugins possible but maintenance-heavy
  3. Legacy “Brownfield” Apps
    • Integrating into massive native (Swift/Kotlin) apps
    • Expo Modules possible but complex
    • Full Managed Workflow benefits unrealized

Known Issues

Background Execution (OS Limitation)

  • Issue: iOS suspends WebView in background
  • Reality: Not Expo-specific, Apple battery-saving policy
  • Workaround: Native plugins spawn background processes

Library Lag (Moderate)

  • Issue: Some community libraries slow to support New Architecture
  • Impact: May force SDK upgrade delays or forking
  • Trend: Improving as New Architecture matures

Build Queues (Free Tier)

  • Issue: EAS Build free tier has wait times during peaks
  • Solution: Paid subscriptions or local builds

Eject vs Prebuild Confusion

  • Issue: Old documentation mentions “eject” (permanent, breaking)
  • Current: Prebuild generates ephemeral native projects
  • Guidance: Never use “expo eject” in modern workflow

Platform Support Matrix

Platform Support Details
Mobile (iOS) ✅ True Managed + Bare workflow via Prebuild
Mobile (Android) ✅ True Managed + Bare workflow via Prebuild
Web ✅ True Via react-native-web + Metro
Desktop ⚠️ Limited Via react-native-macos (community)
TV ⚠️ Limited Via react-native-tvos (community)

Primary Platform: Mobile (iOS/Android) Runtime Environment: Universal (JavaScript + Native)

Development Workflow

Getting Started

# Create new project
npx create-expo-app my-app

# Start development server
npx expo start

# Run on device
npx expo run:ios     # or run:android

Continuous Native Generation

# Generate native projects
npx expo prebuild

# Sync web assets to native
npx expo sync

EAS Build

# Build for development
eas build --profile development --platform ios

# Build for production
eas build --profile production --platform all

EAS Update

# Publish update
eas update --branch production --message "Fix login bug"

Learning Curve

Difficulty: Easy

  • For React Developers: Very Easy
    • Same component model
    • Expo Router similar to Next.js
    • Familiar tools (Metro, npm)
  • For Native Beginners: Easy
    • No Xcode/Android Studio required initially
    • Expo Go for immediate testing
    • Gradual native learning
  • For Complete Beginners: Easy
    • Excellent documentation
    • Active community support
    • Snack (browser-based Playgrounds)

Documentation Quality: Excellent

  • docs.expo.dev (comprehensive)
  • Interactive examples
  • Migration guides between SDK versions

Key Statistics (2026)

  • GitHub Stars: ~25,000+
  • NPM Weekly Downloads: ~500,000+
  • Market Share: 70% of new React Native projects
  • Enterprise Adoption: Airbnb (partially), Shopify, Coca-Cola, Walmart

Pricing

Framework: Open Source (MIT License)

EAS Services:

  • Free Tier: Limited builds, basic updates
  • Paid Plans:
    • Build: $29/month (basic)
    • Update: Included with Build
    • Submit: $99/month (automated store submission)

FAQ

Can I use Expo with custom native code?

Yes. Via Continuous Native Generation (Prebuild), you can generate native projects and modify them directly. Config Plugins allow programmatic native configuration without manual editing.

What’s the difference between Expo Go and Development Build?

Expo Go is a pre-compiled app with standard SDKs. Development Build is a custom compilation containing your project’s specific native dependencies. Professional teams use Development Builds.

Does Expo work with existing native apps?

Yes. Expo Modules can be integrated into existing native apps (iOS/Android). However, the full Managed Workflow benefits are reduced in “brownfield” integrations.

Can I deploy Expo apps without EAS?

Yes. Use local builds with npx expo run:ios or npx run:android. EAS is optional but provides convenience (Windows builds, credential management).

Is Expo free?

The framework is free and open source. EAS services (Build, Update, Submit) have free tiers with paid plans for higher limits and features.

Conclusion

Expo SDK 54 represents the maturation of React Native development tooling. By unifying managed and bare workflows through Continuous Native Generation, it eliminates historical trade-offs between ease of use and native access. The integration of EAS services provides a complete infrastructure for building, deploying, and updating mobile applications at scale.

For engineering teams in 2026, the question is no longer “Expo or React Native CLI?” but rather “How do we best configure our Expo Development Build?” The framework has successfully positioned itself as the default starting point for React Native development, with the flexibility to scale from prototype to enterprise platform.


Last Updated: 2026-01-20 | Research Source: Expo Framework Research Report

Updated: