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.
- What it is
- Cross-platform mobile apps
- Used for
- CI/CD pipelines
- Part of
- Built on React Native
- 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
androidandios, 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
androidandiosfolders are lost on the next clean prebuild; native changes belong in config plugins or local Expo modules
How it fits with other technologies
What uses Expo
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 appsSee 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
- 2015
Charlie Cheever starts work on Exponent, built on React Native
- 2017
Exponent is renamed Expo on 6 March
- 2021
EAS Build and EAS Submit become generally available in November
- 2023
Expo Router v1 ships with SDK 48
- 2026
SDK 58 moves to React Native 0.88 and makes Expo Router’s server features stable
- Engineering at Meta: React Native, bringing modern web techniques to mobile (Mar 2015)
- Wikipedia: Charlie Cheever (Facebook, Quora, began work on Expo in summer 2015)
- Exponent home page (Feb 2017 snapshot) · archived copy, original
- Charlie Cheever: Exponent → Expo (Mar 2017) · archived copy, original
- Expo blog: Introducing EAS (Nov 2021, general availability and plans)
- Evan Bacon: Announcing Expo Router v1 (Feb 2023, SDK 48)
- Expo: About (founded 2015, React Foundation founding member)
- Expo changelog: SDK 57 (June 2026)
- Expo changelog: SDK 58 (October 2026)
Sources15 · facts checked 23 October 2026
- Expo docs: Introduction (React Native framework, EAS)
- Expo docs: Introduction to Expo Router (file-based routing, Android, iOS and web, deep links)
- Expo docs: Continuous Native Generation (prebuild, config plugins)
- Expo docs: Overview of the development workflow (app config, native libraries, Xcode and Android Studio)
- Expo docs: Introduction to development builds (expo-dev-client, Expo Go)
- Expo docs: EAS Build (runners, profiles, credentials, local builds, auto-submit)
- Expo docs: Configure EAS Build with eas.json
- Expo docs: EAS Update (what updates can change, expo-updates, rollbacks, store rules)
- Expo docs: Runtime versions
- Expo docs: Expo Application Services (list of EAS services)
- Expo: Pricing (Free, Starter and Production plans)
- Expo changelog: SDK 57 (prebuild cleans native directories by default)
- Expo changelog: SDK 58 (React Native 0.88, breaking changes)
- React Native docs: Get started (use a framework such as Expo)
- GitHub: expo/expo (MIT licence)