Favicon of expo

expo

Open-source platform for building native iOS, Android, and web apps with React. Includes the Expo SDK, CLI, Router, and Expo Go for testing.

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.

Key features

  • Expo SDK: a curated library of native functionality (camera, notifications, sensors, and more) that works consistently across iOS, Android, and web without writing platform-specific native code for each one.
  • Modules API: lets you write and register custom native modules when the SDK doesn't already cover what you need, so you're not locked out of native code.
  • Expo CLI: the command-line tooling for creating, running, and building Expo projects, including the create-expo-app scaffolding tool and its templates.
  • Expo Router: file-based routing for moving between screens.
  • Expo Go: a client app for iOS and Android that runs your JavaScript project instantly for testing, without a native build step. Projects can display a "Runs with Expo Go" badge to signal this to visitors.
  • Snack: a browser-based way to try Expo directly at snack.expo.dev, without installing anything locally first.
  • Monorepo source layout: packages for every Expo library, example apps for testing changes, the docs.expo.dev source, a react-native-lab fork used to build Expo Go, and template-file tooling for projects that require private keys all live in this one repository.
  • EAS integration: Expo Application Services is a separate hosted platform for building, submitting, and updating apps that plugs directly into these open-source tools, useful once you're ready to ship to app stores as a team.

Ideal use cases

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.

Installation

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.

Categories:

Frequently asked questions

Share:

Stars
50.5K
Forks
13K
Last commit
2 hours ago
Repository age
10 years
License
MIT
Self-hosted
No
Activity score
88/100
View Repository
Built with:

Similar to expo

Favicon

 

  
  
Favicon

 

  
  
Favicon