cloudparts

Expo

A React Native framework for Android, iOS and web apps, with file-based routing, native modules and generated native projects, plus EAS, Expo’s paid cloud services that build, sign, submit and update the apps.

Type
Open source
Made by
Expo (650 Industries, Inc.)
License
MIT (framework); EAS cloud services are proprietary
Facts checked
23 October 2026

What it is

An Expo app is a React Native app: screens are React components that render native views. Expo adds what most apps would otherwise assemble themselves. Expo Router turns each file in the app directory into a route, with one navigation setup for Android, iOS and web and a deep link for every screen. A standard library of native modules covers device features. Continuous Native Generation replaces hand-kept native projects: you describe the app in its config (app.json) and in config plugins, and npx expo prebuild generates the android and ios directories, which new projects keep out of git; since SDK 57, prebuild clears and regenerates them by default. Expo Go is a ready-made app with a fixed set of native libraries for trying things out, while real apps use a development build, your own app compiled with expo-dev-client, which can include any native library. React Native’s own docs recommend starting new apps with a framework and name Expo.

Expo Application Services (EAS) is the commercial half. EAS Build compiles and signs binaries in the cloud, Android on Linux runners in Google Cloud and iOS on macOS runners in Expo’s cloud, from build profiles in eas.json; it can create and store Android keystores and iOS certificates and provisioning profiles, and eas build --local runs the same build on your own machine. It works for any native project, Expo or not. EAS Submit uploads builds to the App Store and Google Play. EAS Update sends new JavaScript, styling and images to installed apps that include expo-updates, which apply them on the next launch; a runtime version makes sure an update only reaches builds with compatible native code. EAS also offers Workflows (CI/CD jobs), Hosting for web apps and API routes, Observe for production performance, Metadata (beta) and Insights (preview). Each Expo SDK release pins a React Native version: SDK 57 (June 2026) uses 0.86, and SDK 58 (October 2026) uses 0.88.

Why teams pick it

  • One React codebase for Android, iOS and web, with file-based routing and a deep link for every screen
  • No hand-maintained native projects: app config and config plugins regenerate android and ios, so native settings are reviewed as small config changes
  • iOS apps without a Mac: cloud builds compile and sign apps and manage credentials, so you don’t need Xcode or Android Studio installed
  • Over-the-air fixes: EAS Update ships JavaScript and asset changes to installed apps on their next launch, and a bad update is rolled back by republishing an earlier one

Watch out for

  • EAS is paid beyond a free tier: the Free plan includes 15 Android and 15 iOS builds at low queue priority with a 45-minute timeout, and updates for 1,000 monthly active users; Starter costs $19 and Production $199 a month, plus usage
  • Updates over the air cover only JavaScript, styling and images: native code, permissions and SDK upgrades need a new binary and store review, and updates must still follow App Store and Play Store rules
  • Regular SDK upgrades: each SDK pins a React Native version, Expo Go runs only the newest SDK, and SDK 58 requires the iOS scene life cycle for apps with a custom AppDelegate
  • Edits made directly in the generated android and ios folders are lost on the next clean prebuild; native changes belong in config plugins or local Expo modules

How it fits with other technologies

From a new project to store builds and an over-the-air update · bash

npx create-expo-app@latest my-app     # a React Native app with Expo Router
cd my-app
npx expo prebuild                      # generate android/ and ios/ from app.json and config plugins

eas build --platform all               # build and sign both apps in Expo's cloud
eas build --platform android --local   # or run the same build on this machine
eas build --platform ios --auto-submit # build, then upload to App Store Connect with EAS Submit

eas update --channel production        # send new JavaScript and assets to installed apps

See it in a real stack

No architecture uses Expo yet. Drop it into the playground and wire it up yourself.Open playground →
Where it came from2015–2026

Charlie Cheever, an early Facebook engineer and a co-founder of Quora, began working on Expo in the summer of 2015, a few months after Facebook open-sourced React Native. The first product was called Exponent: an open-source, free tool that let web developers build native iOS and Android apps by writing them once in JavaScript on React Native. On 6 March 2017 the project shortened its name to Expo, which Cheever said was easier to say and fitted a tool for showing off projects.

Expo Application Services came next: EAS Build and EAS Submit ran in preview for some months and became generally available on 10 November 2021, with Free, Production ($99 a month) and Enterprise plans, and EAS Build works for any native project. Expo Router followed in February 2023 with SDK 48, as a file-based router for native apps.

Expo has since become the default way into React Native: the React Native docs recommend a framework for new apps and name Expo. In 2026 the company is a founding member of the React Foundation, SDK 57 (June 2026) moved to React Native 0.86, and SDK 58 (October 2026) moved to 0.88, made Expo Router’s data loaders, server rendering and native tabs stable, and limited Expo Go to the newest SDK.

Why it’s built this way

Build on React Native instead of a WebView
Exponent’s pitch was “truly native” apps for both platforms from one JavaScript codebase, which React Native made possible by rendering real platform views rather than a web page.
Generate native projects instead of keeping them
With Continuous Native Generation you maintain the definition of your native customizations, in app config and config plugins, instead of the native code itself, and the native projects are generated only when needed, such as for debugging or building.
Cloud builds for any native project
Compiling and signing iOS apps needs a Mac, Xcode and certificates. EAS Build runs that on Expo’s machines and manages the credentials, and it works for projects that don’t use Expo at all.
Ship JavaScript updates separately from binaries
Most fixes touch only JavaScript and assets, which don’t need a store release; runtime versions keep an update from reaching a build whose native code it doesn’t match.

Timeline

  1. 2015

    Charlie Cheever starts work on Exponent, built on React Native

  2. 2017

    Exponent is renamed Expo on 6 March

  3. 2021

    EAS Build and EAS Submit become generally available in November

  4. 2023

    Expo Router v1 ships with SDK 48

  5. 2026

    SDK 58 moves to React Native 0.88 and makes Expo Router’s server features stable

Sources15 · facts checked 23 October 2026

Improve this page on GitHub