Expo is an open-source platform for building native apps for Android, iOS, and the web from a single JavaScript or TypeScript codebase. It wraps React Native with a universal runtime, a curated set of libraries for common native functionality, a command-line interface, and a router, so teams don't have to hand-roll native tooling for things like camera access, push notifications, or over-the-air updates. This repository contains the Expo SDK, the Modules API, the Expo Go app, the CLI, Router, documentation, and a collection of supporting tools used to build all of it. It's built for mobile developers who want to target iOS, Android, and web from one codebase, whether that's a solo developer testing an idea or a team maintaining a monorepo of custom native modules across a full product.
create-expo-app scaffolding tool and its templates.Expo fits teams building a cross-platform mobile app for iOS and Android (and optionally web) from a single React codebase, especially if the team already knows React from web work. It's a good match for prototyping quickly, either with Snack in a browser or with Expo Go on a device, before committing to a full native build pipeline. It also suits apps that mostly need common native capabilities like camera, location, or push notifications without writing Swift or Kotlin by hand. The Modules API makes it viable for projects that eventually need some custom native code alongside the standard SDK, so teams aren't forced to abandon Expo once requirements get more specific.
It's less of a fit if you're building a web-only product with no native app plans; Expo's core value is native and web parity from one codebase, so a plain React or Next.js setup is simpler when there's no app store target. Teams that need to work entirely inside existing large native iOS or Android codebases without adopting React may also find less benefit here.
This README documents the structure of the Expo platform's source repository rather than a typical end-user quick start, since it's the actual source of Expo itself. The referenced way to start a new project, from the templates directory described in the README's project layout, is through the create-expo-app scaffolding tool:
npx create-expo-app my-app
cd my-app
npx expo start
This starts a development server. Scan the printed QR code with the Expo Go app on iOS or Android to run the project instantly, or open it in a browser from the same terminal output. If you'd rather not install anything locally yet, Snack lets you try Expo directly in the browser first.
To work on the Expo repository itself rather than build an app with it, clone this repository and follow the contributing guide linked from the README, which covers the package, app, and native project layout, including the CLI package specifically if you want to work on Expo's own command-line tooling. The README also links a full API reference and a guide to using custom native modules for anyone going deeper than the basics.