ArchiveExpo SnackDiscord and ForumsNewsletter

Introduction to development builds

A better development environment for React Native apps.

A development build is a debug build of your app that contains the expo-dev-client package. By using development builds instead of Expo Go, you gain full control over the native runtime, so you can install any native libraries, modify any project configuration, or write your own native code. With Expo development builds, you are building your own native app, while with Expo Go you are running your project in a sandboxed native app environment.

When you run a development build it will look like this, only with your app name and icon included rather than "Microfoam". The launcher UI is pictured in iOS on the left and Android on the right. In between, you can see an app running inside of the development build, with the customizable developer menu open.

The expo-dev-client package replaces the default in-app development tools UI that React Native provides with a more powerful and extensible in-app UI, adds support for network debugging, adds support for launching updates (such as from PR previews), and adds a launcher UI.

The launcher UI makes it possible to switch between development servers without needing to rebuild the app binary. This works great alongside Continuous Native Generation (CNG) because you can generate a single development build whenever you modify the native code in your app, and then you can iterate on the JavaScript code without needing to rebuild the native code until the next time that you need to modify it. It also works great without CNG — this approach is very well suited to teams that have specialized native engineers who work on the native runtime and application developers that specialize in React to achieve web-like iteration speeds with native apps, without compromise.

Get started with development builds using EAS Build

The easiest way to get started with development builds is to use EAS Build to build your app in the cloud, because you do not need to install any native build tools locally.

Get started with development builds in a local development environment

This guide covers the basics of building your app for development, and provides instructions on how to configure your environment.

Develop an app with Expo

An overview of the development process of building an Expo app to help build a mental model of the core development loop. See where development builds fit in.

"What's an Expo Development Build?"

A YouTube video that explains what a development build is and how to use it.

Frequently asked questions

What is a native runtime?

A native runtime refers to the runtime environment that your JavaScript application code is executed in. If your development build is compiled with expo-camera installed, the native runtime will include the appropriate code so that you can access that functionality from JavaScript. If the build was not compiled with expo-camera, then you cannot access that code from your JavaScript code. Different versions of your app runtime are managed with a runtime version configuration field.

How are development builds different from Expo Go?

When you start a new project with Expo, the fastest and easiest way to get to "Hello, world!" is with Expo Go on your device because you don't need to compile any native code or install any native tooling.

Beyond "Hello, world!" and prototypes, you'll quickly encounter limitations and need to build a development build of your app. For example, the Expo Go sandbox environment is limited to only the native packages included in the Expo SDK, while you can include any library in a development build because it's just a normal native app.

You can think of a development build as your fully customizable version of Expo Go, tailored specifically for your project. Or, conversely, Expo Go is a development environment with a preset runtime.

What other types of builds are there?
  • A production build is for the general public, deployed through stores.
  • A preview build lets your team test your next release, either by installing an APK directly on Android or using ad hoc or enterprise provisioning on iOS.