Edit this page
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.
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.
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.
This guide covers the basics of building your app for development, and provides instructions on how to configure your environment.
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.
A YouTube video that explains what a development build is, why it is important, and how to use it.
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.
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.