Skip to main content
Glama
configure-development-build.md8.15 kB
--- title: Configure a development build in cloud sidebar_title: Configure development build description: Learn how to configure a development build for a project using EAS Build. hasVideoLink: true --- In this chapter, we'll set up and configure a development build with EAS for our example app. --- ## Understanding development builds Let's start by learning about what are development builds and why we need them. A [development build](/develop/development-builds/introduction/) is a debug version of our project. It is optimized for quick iterations when creating an app. It contains the [`expo-dev-client`](/versions/latest/sdk/dev-client/) library, which offers a robust and complete development environment. This setup allows us to integrate any native library or change code inside the [native directories](/workflow/overview/#android-and-ios-native-projects) as required. ### Key highlights > **Note:** If you are familiar with [Expo Go](/get-started/expo-go/), think of a development build as a customizable version of Expo Go that is unique to the requirements of a project. | Feature | Development Builds | Expo Go | | --------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | | **Development phase** | Offers web-like iteration speed for mobile app development. | Allows for quick iteration and testing of Expo SDK projects using the client app. | | **Collaboration** | Facilitates team testing with shared native runtime. | Easy project sharing via QR codes on a device. | | **Third-party libraries support** | Full support for any [third-party library](/workflow/using-libraries/#third-party-libraries), including those that require custom native code. | Limited to libraries within the Expo SDK, not suitable for custom native dependencies. | | **Customization** | Extensive customization with [config plugins](/config-plugins/introduction/) and direct access to native code. | Limited customization with a focus on Expo SDK capabilities without direct native code modification. | | **Intended use** | Ideal for full-fledged app development aimed at store deployment, offering a complete development environment and tools. | Ideal for learning, prototyping, and experimenting. Not recommended for production apps. | ## Install expo-dev-client library To initialize our project for a development build, let's [`cd`](https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Command_line#basic_built-in_terminal_commands) inside our project directory and run the following command to install the library: ### Start the development server Run the `npx expo start` to start the [development server](/get-started/start-developing/#start-a-development-server): This command starts the metro bundler. In the terminal window, we see the QR code followed by the `Metro waiting on...` and a manifest URL: Let's notice the changes installing the `expo-dev-client` library: - The manifest URL contains `expo-development-client` along with the app scheme - The development server now operates for a development build (instead of Expo Go). Since we do not have a development build installed on one of our devices or an emulator/simulator, we can't run our project yet. ## Initialize a development build ### Install EAS CLI We need to install the EAS Command Line Interface (CLI) tool as a global dependency on our local machine. Run the following command: ### Log in or sign up for an Expo account > If you have an Expo account and are signed in using Expo CLI, skip this step. If you don't have an Expo account, [sign up here](https://expo.dev/signup) and proceed with the login command described below. To log in, run the following command: This command asks for our Expo account email or username and password to complete the login. ### Initialize and link the project to EAS For any new project, the first step is to initialize and link it to the EAS servers. Run the following command: On running, this command: - Requests verification of the account owner by entering our Expo account credentials and asks if we want to create a new EAS project: <Terminal cmd={[ '# Output after running eas init', '✔ Which account should own this project? > your-username', '✔ Would you like to create a project for @your-username/sticker-smash? … yes', '✔ Created @your-username/sticker-smash', '✔ Project successfully linked (ID: XXXX-XX-XX-XXXX) (modified app.json)', ]} /> - Creates EAS project and provides a link to that project which we can open in the EAS dashboard: - Generates a unique `projectId` and links this EAS project to the example app on our development machine. - Modifies **app.json** to include [`extra.eas.projectId`](/versions/latest/sdk/constants/#easconfig) and updates its value with the unique ID created. <Collapsible summary={<>What is <CODE>projectId</CODE> in app.json?</>}> When `eas init` runs, it associates a unique identifier for our project in **app.json** under `extra.eas.projectId`. The value of this property is used to identify our project on EAS servers. ```json { "extra": { "eas": { "projectId": "0cd3da2d-xxx-xxx-xxx-xxxxxxxxxx" } } } ``` </Collapsible> ## Configure project for EAS Build To set up our project for EAS Build, run the following command: On running, this command: - Prompts to select a platform: **Android**, **iOS**, or **All**. Since we are creating Android and iOS apps, let's select **All**. - Creates **eas.json** in the root of our project's directory with the following configuration: ```json eas.json { "cli": { "version": ">= 14.2.0", "appVersionSource": "remote" }, "build": { "development": { "developmentClient": true, "distribution": "internal" }, "preview": { "distribution": "internal" }, "production": { "autoIncrement": true } }, "submit": { "production": {} } } ``` This is the default configuration for **eas.json** in a new project. It does two things: - Defines the current EAS CLI version. - Adds three [build profiles](/build/eas-json/#build-profiles): `development`, `preview`, and `production`. **eas.json** is a collection of different build profiles. Each profile is tailored with distinct configurations to produce specific build types. These profiles can also include platform-specific settings for Android or iOS. Currently, our focus is on the `development` profile, which includes the following configuration: - [`developmentClient`](/eas/json/#developmentclient): Enabled (`true`) for creating a debug build. It loads the app using the `expo-dev-client` library, which provides development tools and generates a build artifact for device or emulator/simulator installation and allows using the app for local development as it supports updating the JavaScript on the fly. - [`distribution`](/eas/json/#distribution): Configured as `internal` to indicate that we want to share the build internally (instead of uploading it on app stores). > **Note**: Builds offer extensive customization options, including platform-specific settings and the ability to extend configurations across different build profiles. Learn more about [customizing build profiles](/build/eas-json/#build-profiles). ## Summary

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jaksm/expo-docs-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server