# Expo Application Services (EAS) Documentation Expo Application Services (EAS) are deeply integrated cloud services for Expo and React Native apps, from the team behind Expo. ## Introduction ## Configuration with eas.json Learn about available properties for EAS Build and EAS Submit to configure and override their default behavior from within your project. **eas.json** is the configuration file for EAS CLI and services. You can find the complete reference of all available schema properties for [EAS Build](/build/introduction) and [EAS Submit](/submit/introduction) on this page. > **info** To learn more about how a project using EAS services is configured with **eas.json**, see [Configure EAS Build with eas.json](/build/eas-json/) and [Configure EAS Submit with eas.json](/submit/eas-json/). ## EAS Build The following properties are available in the schema for the `build` key in **eas.json**. Note: Example schema of multiple build profiles --- ```json eas.json { "build": { "base": { "node": "12.13.0", "yarn": "1.22.5", "env": { "EXAMPLE_ENV": "example value" }, "android": { "image": "default", "env": { "PLATFORM": "android" } }, "ios": { "image": "latest", "env": { "PLATFORM": "ios" } } }, "development": { "extends": "base", "developmentClient": true, "env": { "ENVIRONMENT": "development" }, "android": { "distribution": "internal", "withoutCredentials": true }, "ios": { "simulator": true } }, "staging": { "extends": "base", "env": { "ENVIRONMENT": "staging" }, "distribution": "internal", "android": { "buildType": "apk" } }, "production": { "extends": "base", "env": { "ENVIRONMENT": "production" } } } } ``` --- ### Common properties for native platforms | Property | Description | | --- | --- | | `withoutCredentials` | **(boolean)** - When set to `true`, EAS CLI won't require you to configure credentials when building the app. This comes in handy when using EAS Build [custom builds](/custom-builds/get-started/). Defaults to `false`. | | `extends` | **(string)** - The name of the build profile that the current one should inherit values from. This value can't be specified per platform. | | `credentialsSource` | **(enum: local, remote)** - The source of credentials used to sign the application archive. - `local` - if you want to provide your own [**credentials.json**](/app-signing/local-credentials). - `remote` - if you want to use the credentials managed by EAS (default option). | | `releaseChannel` | **(string)** - **Deprecated**: Name of the release channel for the Classic Updates service, which is only supported in SDK 49 and lower. If you do not specify a channel, your binary will pull releases from the `default` channel. EAS Update uses the [channel](#channel) field, so you can remove [`releaseChannel`](#releasechannel) after [migrating to EAS Update](/eas-update/migrate-from-classic-updates/). | | `channel` | **(string)** - The EAS Update channel where this build will look for updates. [Learn more](../../eas-update/how-it-works). Standalone builds will check for and download updates matching platform, native runtime, and channel. This field has no effect when [`developmentClient`](#developmentclient) is set to `true`, as development builds can run updates from any channel. If you have not yet migrated from Classic Updates to EAS Update, then continue to use the [`releaseChannel`](#releasechannel) field instead. | | `distribution` | **(enum: store, internal)** - The method of distributing your app. - `internal` - with this option you'll be able to share your build URLs with anyone, and they will be able to install the builds to their devices straight from the Expo website. When using `internal`, make sure the build produces a **.apk** or **ipa** file. Otherwise, the shareable URL will be not work. See [internal distribution](/build/internal-distribution) for more information. - `store` - produces builds for store uploads, your build URLs won't be shareable. | | `developmentClient` | **(boolean)** - If set to `true` (defaults to `false`), this field will produce a [development build](/workflow/overview/#development-builds). For the build to be successful, the project must have [`expo-dev-client`](/versions/latest/sdk/dev-client/) installed and configured. **Note**: this field is for setting the `gradleCommand` to `:app:assembleDebug` for Android and `buildConfiguration` to `Debug` for iOS . If these fields are provided for the same build profile, will take precedence over `developmentClient`. | | `resourceClass` | **(enum: default, medium, large)** - The resource class that will be used to run this build. To see mapping for each platform, see [Android-specific resource class field](#resourceclass-1) and [iOS-specific resource class field](#resourceclass-2). The `large` resource class is not available on the free plan. | | `prebuildCommand` | **(string)** - Optional override of the [prebuild](/more/expo-cli/#prebuild) command used by EAS. For example, you can specify `prebuild --template example-template` to use a custom template. **Note**: `--platform` and `--non-interactive` will be added automatically by the build engine, so you do not need to specify them manually. | | `buildArtifactPaths` | **(string[])** - List of paths (or patterns) where EAS Build is going to look for the build artifacts. Use `applicationArchivePath` for specifying the path for uploading the application archive. Build artifacts are uploaded even if the build fails. EAS Build uses [glob patterns](https://github.com/isaacs/node-glob#glob-primer) for pattern matching. | | `node` | **(string)** - Version of Node.js used for build. | | `corepack` | **(boolean)** - If set to `true`, [corepack](https://nodejs.org/api/corepack.html) will be enabled at the beginning of build process. Defaults to `false`. | | `yarn` | **(string)** - Version of Yarn used for build. | | `pnpm` | **(string)** - Version of pnpm used for build. | | `bun` | **(string)** - Version of Bun used for build. You can also use a specific version. Learn [how to configure the exact version in eas.json](/guides/using-bun/#customize-bun-version-on-eas). | | `expoCli` | **(string)** - **Deprecated**: Version of [`expo-cli`](https://www.npmjs.com/package/expo-cli) used to [prebuild](/more/expo-cli/#prebuild) your app. It only affects managed projects on Expo SDK 45 and lower. For newer SDKs, EAS Build will use the versioned [Expo CLI](/more/expo-cli/). It is included with `expo` library. You can opt out of using the versioned Expo CLI by setting the `EXPO_USE_LOCAL_CLI=0` environment variable in the build profile. | | `env` | **(object)** - [Environment variables](/guides/environment-variables/) that should be set during the build process. It should only be used for values that you would commit to your git repository and not for passwords or [secrets](/build-reference/variables/). | | `autoIncrement` | **(boolean)** - Controls how EAS CLI bumps your application build version. Defaults to `false`. When enabled, for Android, bumps `expo.android.versionCode` (for example, `3`to `4`). For iOS, bumps the last component of `expo.ios.buildNumber` (for example, `1.2.3.39` to `1.2.3.40`). | | `cache` | **(object)** - Cache configuration. This feature is intended for caching values that require a lot of computation. For example, compilation results (both final binaries and any intermediate files). However, it doesn't work well for **node_modules** because the cache is not local to the machine, so the download speed is similar to downloading from the npm registry. | |     • `disabled` | **(boolean)** - Disables caching. Defaults to `false`. | |     • `key` | **(string)** - Cache key. You can invalidate the cache by changing this value. | |     • `paths` | **(array)** - List of the paths that will be saved after a successful build and restored at the beginning of the next one. Both absolute and relative paths are supported, where relative paths are resolved from the directory with **eas.json**. | | `config` | **(string)** - Custom workflow file name that will be used to run this build. You can also specify this property on platform level for platform-specific workflows. [Learn more](/custom-builds/get-started/). Example: `"config": "production.yml"` will use workflow from `.eas/build/production.yml`. | | `environment` | **(enum: development, preview, production)** - The environment used to apply environment variables for the build process. [Learn more](/eas/environment-variables). | ### Android-specific options | Property | Description | | --- | --- | | `withoutCredentials` | **(boolean)** - When set to `true`, EAS CLI won't require you to configure credentials when building the app. This comes in handy when you want to build debug binaries and the debug keystore is checked in to the repository. Defaults to `false`. | | `image` | **(string)** - [Image with build environment](/build-reference/infrastructure/). | | `resourceClass` | **(enum: default, medium, large)** - The Android-specific resource class that will be used to run this build. Defaults to `medium`. For information on available build resources for each resource class, see [Android build server configurations](/build-reference/infrastructure/#android-build-server-configurations). The `large` resource class is not available on the free plan. | | `ndk` | **(string)** - Version of Android NDK. | | `autoIncrement` | **(boolean \| "version" \| "versionCode")** - Controls how EAS CLI bumps your application build version. Defaults to `false`. Allowed values: - `"version"` - bumps the patch of `expo.version` (for example, `1.2.3` to `1.2.4`). - `"versionCode"` (or `true`) - bumps `expo.android.versionCode` (for example, `3` to `4`). - `false` - versions won't be bumped automatically (default). Based on the value of [`cli.appVersionSource` in **eas.json**](/build-reference/app-versions/), the values will be updated locally in your project or on EAS servers. | | `buildType` | **(enum: app-bundle, apk)** - Type of the artifact you want to build. It controls which Gradle task will be used to build the project. It can be overridden by `gradleCommand` or `developmentClient: true` option. - `app-bundle` - `:app:bundleRelease` (creates **.aab** artifact) - `apk` - `:app:assembleRelease` (creates **.apk** artifact) | | `gradleCommand` | **(string)** - Gradle task that will be used to build your project. For example, `:app:assembleDebug` to build a debug binary. It's not recommended unless you need to run a task that `buildType` does not support, it takes priority over [`buildType`](#buildtype) and [`developmentClient`](#developmentclient). | | `applicationArchivePath` | **(string)** - Path (or pattern) where EAS Build is going to look for the application archive. EAS Build uses [glob patterns](https://github.com/isaacs/node-glob#glob-primer) for pattern matching. The default value is `android/app/build/outputs/**/*.{apk,aab}`. | | `config` | **(string)** - Custom workflow file name that will be used to run this Android build. You can also specify this property on profile level for platform-agnostic workflows. [Learn more](/custom-builds/get-started/). Example: `"config": "production-android.yml"` will use workflow from `.eas/build/production-android.yml`. | ### iOS-specific options | Property | Description | | --- | --- | | `withoutCredentials` | **(boolean)** - When set to `true`, EAS CLI won't require you to configure credentials when building the app. This comes in handy when using EAS Build [custom builds](/custom-builds/get-started/). Defaults to `false`. | | `simulator` | **(boolean)** - If set to true, creates build for iOS Simulator. Defaults to `false`. | | `enterpriseProvisioning` | **(enum: universal, adhoc)** - Provisioning method used for `"distribution": "internal"` when you have an Apple account with Apple Developer Enterprise Program membership. You can choose if you want to use `adhoc` or `universal` provisioning. The latter is recommended as it does not require you to register each individual device. If you don't provide this option and you still authenticate with an enterprise team, you'll be prompted which provisioning method to use. | | `autoIncrement` | **(boolean \| "version" \| "buildNumber")** - Controls how EAS CLI bumps your application build version. Defaults to `false`. Allowed values: - `"version"` - bumps the patch of `expo.version` (for example, `1.2.3` to `1.2.4`). - `"buildNumber"` (or `true`) - bumps the last component of `expo.ios.buildNumber` (for example, `1.2.3.39` to `1.2.3.40`). - `false` - versions won't be bumped automatically (default) Based on the value of [`cli.appVersionSource` in **eas.json**](/build-reference/app-versions/), the values will be updated locally in your project or on EAS servers. | | `image` | **(string)** - [Image with build environment](/build-reference/infrastructure). | | `resourceClass` | **(enum: default, medium, large)** - The iOS-specific resource class that will be used to run this build. Defaults to `medium`. For information on available build resources for each resource class, see [iOS build server configurations](/build-reference/infrastructure/#ios-build-server-configurations). The `large` resource class is not available on the free plan. | | `bundler` | **(string)** - Version of [bundler](https://bundler.io/). | | `fastlane` | **(string)** - Version of fastlane. | | `cocoapods` | **(string)** - Version of CocoaPods. | | `scheme` | **(string)** - Xcode project's scheme. If a project: - Has multiple schemes, you should set this value. - Has only one scheme, it will be detected automatically. - Have multiple schemes schemes and if this value is **not** set, EAS CLI will prompt you to select one of them. | | `buildConfiguration` | **(string)** - Xcode project's Build Configuration. - For an Expo project, the value is `"Release"` or `"Debug"`. Defaults to `"Release"`. - For a [bare React Native](/bare/overview/) project, defaults to the value specified in the scheme. It takes priority over [`developmentClient`](#developmentclient). | | `applicationArchivePath` | **(string)** - Path (or pattern) where EAS Build is going to look for the application archive. EAS Build uses [glob patterns](https://github.com/isaacs/node-glob#glob-primer) for pattern matching. You should modify that path only if you are using a custom **Gymfile**. The default is `ios/build/Build/Products/*-iphonesimulator/*.app` when building for simulator and `ios/build/*.ipa` in other cases. | | `config` | **(string)** - Custom workflow file name that will be used to run this iOS build. You can also specify this property on profile level for platform-agnostic workflows. [Learn more](/custom-builds/get-started/). Example: `"config": "production-ios.yml"` will use workflow from `.eas/build/production-ios.yml`. | ## EAS Submit The following properties are available in the schema for the `submit` key in **eas.json**. Note: Example schema of with production profile --- ```json eas.json { "cli": { "version": ">= 0.34.0" }, "submit": { "production": { "android": { "track": "internal" }, "ios": { "appleId": "john@turtle.com", "ascAppId": "1234567890", "appleTeamId": "AB12XYZ34S" } } } } ``` --- ### Android-specific options | Property | Description | | --- | --- | | `serviceAccountKeyPath` | **(string)** - Path to the JSON file with [Google Service Account Key](https://expo.fyi/creating-google-service-account) used to authenticate with Google Play. | | `track` | **(enum: production, beta, alpha, internal)** - The track of the application to use. | | `releaseStatus` | **(enum: completed, draft, halted, inProgress)** - The [status of a release](https://developers.google.com/android-publisher/api-ref/rest/v3/edits.tracks#status). | | `rollout` | **(number)** - The initial fraction of users who are eligible to receive the release. Should be a value from 0 (no users) to 1 (all users). Works only with `inProgress` [release status](https://developers.google.com/android-publisher/api-ref/rest/v3/edits.tracks#status). | | `changesNotSentForReview` | **(boolean)** - Indicates that the changes sent with this submission will not be reviewed until they are explicitly sent for review from the Google Play Console UI. Defaults to `false`. | | `applicationId` | **(string)** - The application ID that is used when accessing Service Account Key managed by Expo. It does not have any effect if you are using local credentials. In most cases this value will be autodetected. However, if you have multiple product flavors, this value might be necessary. | ### iOS-specific options | Property | Description | | --- | --- | | `appleId` | **(string)** - Your Apple ID username (you can also set the `EXPO_APPLE_ID` env variable). | | `ascAppId` | **(string)** - [App Store Connect unique application Apple ID number](https://expo.fyi/asc-app-id). When set, results in skipping the app creation step. | | `appleTeamId` | **(string)** - Your Apple Developer Team ID. | | `sku` | **(string)** - An unique ID for your app that is not visible on the App Store, will be generated unless provided. | | `language` | **(string)** - Primary language. Defaults to "en-US". | | `companyName` | **(string)** - The name of your company, needed only for the first submission of any app to the App Store. | | `appName` | **(string)** - The name of your app as it will appear on the App Store. Defaults to `expo.name` from the [app config](/workflow/configuration/). | | `ascApiKeyPath` | **(string)** - The path to your [App Store Connect Api Key **.p8** file](https://expo.fyi/creating-asc-api-key). | | `ascApiKeyIssuerId` | **(string)** - The Issuer ID of your [App Store Connect Api Key](https://expo.fyi/creating-asc-api-key). | | `ascApiKeyId` | **(string)** - The Key ID of your [App Store Connect Api Key](https://expo.fyi/creating-asc-api-key). | | `bundleIdentifier` | **(string)** - The bundle identifier that will be used when accessing submit credentials managed by Expo. It does not have any effect if you are using local credentials. In most cases, this value will be autodetected. However, if you have multiple Xcode schemes and targets, this value might be necessary. | | `metadataPath` | **(string)** - The path to your [store configuration file](/eas/metadata/). | | `groups` | **(array)** - An array of TestFlight internal group names to add the build to. Note: on top of the groups you provide here, the build will be automatically added to the groups that have been created with the "Enable automatic distribution" App Store Connect setting. | ## EAS CLI reference EAS CLI is a command-line tool that allows you to interact with Expo Application Services (EAS) from your terminal. You can use EAS Command-Line Interface (CLI) to build, update, submit, deploy or use workflows in your Expo and React Native project from a terminal window. ## Installation You need to install the EAS CLI globally on your machine. You do this by running the following command: Alternatively, you can use CLI tools provided by your package manager to run EAS CLI commands: ## Commands Use the EAS CLI by running one of the commands documented on this page, optionally followed by any flags or arguments. Flags customize the behavior of a command, and arguments are specific to the command. # EAS CLI commands (v16.32.0) ## eas account:login Log in with your Expo account. ``` USAGE $ eas account:login [-s] FLAGS -s, --sso Login with SSO DESCRIPTION log in with your Expo account ALIASES $ eas login ``` ## eas account:logout Log out. ``` USAGE $ eas account:logout DESCRIPTION log out ALIASES $ eas logout ``` ## eas account:usage [ACCOUNT_NAME] View account usage and billing for the current cycle. ``` USAGE $ eas account:usage [ACCOUNT_NAME] [--json] [--non-interactive] ARGUMENTS ACCOUNT_NAME Account name to view usage for. If not provided, the account will be selected interactively (or defaults to the only account if there is just one) FLAGS --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. DESCRIPTION view account usage and billing for the current cycle ``` ## eas account:view Show the username you are logged in as. ``` USAGE $ eas account:view DESCRIPTION show the username you are logged in as ALIASES $ eas whoami ``` ## eas analytics [STATUS] Display or change analytics settings. ``` USAGE $ eas analytics [STATUS] DESCRIPTION display or change analytics settings ``` ## eas autocomplete [SHELL] Display autocomplete installation instructions. ``` USAGE $ eas autocomplete [SHELL] [-r] ARGUMENTS SHELL (zsh|bash|powershell) Shell type FLAGS -r, --refresh-cache Refresh cache (ignores displaying instructions) DESCRIPTION display autocomplete installation instructions EXAMPLES $ eas autocomplete $ eas autocomplete bash $ eas autocomplete zsh $ eas autocomplete powershell $ eas autocomplete --refresh-cache ``` ## eas branch:create [NAME] Create a branch. ``` USAGE $ eas branch:create [NAME] [--json --non-interactive] ARGUMENTS NAME Name of the branch to create FLAGS --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. DESCRIPTION create a branch ``` ## eas branch:delete [NAME] Delete a branch. ``` USAGE $ eas branch:delete [NAME] [--json --non-interactive] ARGUMENTS NAME Name of the branch to delete FLAGS --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. DESCRIPTION delete a branch ``` ## eas branch:list List all branches. ``` USAGE $ eas branch:list [--offset ] [--limit ] [--json --non-interactive] FLAGS --json Enable JSON output, non-JSON messages will be printed to stderr. --limit= The number of items to fetch each query. Defaults to 50 and is capped at 100. --non-interactive Run the command in non-interactive mode. --offset= Start queries from specified index. Use for paginating results. Defaults to 0. DESCRIPTION list all branches ``` ## eas branch:rename Rename a branch. ``` USAGE $ eas branch:rename [--from ] [--to ] [--json --non-interactive] FLAGS --from= current name of the branch. --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. --to= new name of the branch. DESCRIPTION rename a branch ``` ## eas branch:view [NAME] View a branch. ``` USAGE $ eas branch:view [NAME] [--offset ] [--limit ] [--json --non-interactive] ARGUMENTS NAME Name of the branch to view FLAGS --json Enable JSON output, non-JSON messages will be printed to stderr. --limit= The number of items to fetch each query. Defaults to 25 and is capped at 50. --non-interactive Run the command in non-interactive mode. --offset= Start queries from specified index. Use for paginating results. Defaults to 0. DESCRIPTION view a branch ``` ## eas build Start a build. ``` USAGE $ eas build [-p android|ios|all] [-e ] [--local] [--output ] [--wait] [--clear-cache] [-s | --auto-submit-with-profile ] [--what-to-test ] [-m ] [--build-logger-level trace|debug|info|warn|error|fatal] [--freeze-credentials] [--verbose-logs] [--json --non-interactive] FLAGS -e, --profile=PROFILE_NAME Name of the build profile from eas.json. Defaults to "production" if defined in eas.json. -m, --message= A short message describing the build -p, --platform=(android|ios|all) -s, --auto-submit Submit on build complete using the submit profile with the same name as the build profile --auto-submit-with-profile=PROFILE_NAME Submit on build complete using the submit profile with provided name --build-logger-level=(trace|debug|info|warn|error|fatal) The level of logs to output during the build process. Defaults to "info". --clear-cache Clear cache before the build --freeze-credentials Prevent the build from updating credentials in non-interactive mode --json Enable JSON output, non-JSON messages will be printed to stderr. --local Run build locally [experimental] --non-interactive Run the command in non-interactive mode. --output= Output path for local build --verbose-logs Use verbose logs for the build process --[no-]wait Wait for build(s) to complete --what-to-test= Specify the "What to Test" information for the build in TestFlight (iOS-only). To be used with the `auto-submit` flag DESCRIPTION start a build ``` ## eas build:cancel [BUILD_ID] Cancel a build. ``` USAGE $ eas build:cancel [BUILD_ID] [--non-interactive] [-p android|ios|all] [-e ] FLAGS -e, --profile=PROFILE_NAME Filter builds by build profile if build ID is not provided -p, --platform=(android|ios|all) Filter builds by the platform if build ID is not provided --non-interactive Run the command in non-interactive mode. DESCRIPTION cancel a build ``` ## eas build:configure Configure the project to support EAS Build. ``` USAGE $ eas build:configure [-p android|ios|all] FLAGS -p, --platform=(android|ios|all) Platform to configure DESCRIPTION configure the project to support EAS Build ``` ## eas build:delete [BUILD_ID] Delete a build. ``` USAGE $ eas build:delete [BUILD_ID] [--non-interactive] [-p android|ios|all] [-e ] FLAGS -e, --profile=PROFILE_NAME Filter builds by build profile if build ID is not provided -p, --platform=(android|ios|all) Filter builds by the platform if build ID is not provided --non-interactive Run the command in non-interactive mode. DESCRIPTION delete a build ``` ## eas build:dev Run dev client simulator/emulator build with matching fingerprint or create a new one. ``` USAGE $ eas build:dev [-p ios|android] [-e ] FLAGS -e, --profile=PROFILE_NAME Name of the build profile from eas.json. It must be a profile allowing to create emulator/simulator internal distribution dev client builds. The "development-simulator" build profile will be selected by default. -p, --platform=(ios|android) DESCRIPTION run dev client simulator/emulator build with matching fingerprint or create a new one ``` ## eas build:download Download simulator/emulator builds for a given fingerprint hash. ``` USAGE $ eas build:download --fingerprint [-p ios|android] [--dev-client] [--json --non-interactive] FLAGS -p, --platform=(ios|android) --[no-]dev-client Filter only dev-client builds. --fingerprint= (required) Fingerprint hash of the build to download --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. DESCRIPTION download simulator/emulator builds for a given fingerprint hash ``` ## eas build:inspect Inspect the state of the project at specific build stages, useful for troubleshooting. ``` USAGE $ eas build:inspect -p android|ios -s archive|pre-build|post-build -o [-e ] [--force] [-v] FLAGS -e, --profile=PROFILE_NAME Name of the build profile from eas.json. Defaults to "production" if defined in eas.json. -o, --output=OUTPUT_DIRECTORY (required) Output directory. -p, --platform=(android|ios) (required) -s, --stage=(archive|pre-build|post-build) (required) Stage of the build you want to inspect. archive - builds the project archive that would be uploaded to EAS when building pre-build - prepares the project to be built with Gradle/Xcode. Does not run the native build. post-build - builds the native project and leaves the output directory for inspection -v, --verbose --force Delete OUTPUT_DIRECTORY if it already exists. DESCRIPTION inspect the state of the project at specific build stages, useful for troubleshooting ``` ## eas build:list List all builds for your project. ``` USAGE $ eas build:list [-p android|ios|all] [--status new|in-queue|in-progress|pending-cancel|errored|finished|canceled] [--distribution store|internal|simulator] [--channel ] [--app-version ] [--app-build-version ] [--sdk-version ] [--runtime-version ] [--app-identifier ] [-e ] [--git-commit-hash ] [--fingerprint-hash ] [--offset ] [--limit ] [--json --non-interactive] [--simulator] FLAGS -e, --build-profile= Filter only builds created with the specified build profile -p, --platform=(android|ios|all) --app-build-version= Filter only builds created with the specified app build version --app-identifier= Filter only builds created with the specified app identifier --app-version= Filter only builds created with the specified main app version --channel= --distribution=(store|internal|simulator) Filter only builds with the specified distribution type --fingerprint-hash= Filter only builds with the specified fingerprint hash --git-commit-hash= Filter only builds created with the specified git commit hash --json Enable JSON output, non-JSON messages will be printed to stderr. --limit= The number of items to fetch each query. Defaults to 10 and is capped at 50. --non-interactive Run the command in non-interactive mode. --offset= Start queries from specified index. Use for paginating results. Defaults to 0. --runtime-version= Filter only builds created with the specified runtime version --sdk-version= Filter only builds created with the specified Expo SDK version --simulator Filter only iOS simulator builds. Can only be used with --platform flag set to "ios" --status=(new|in-queue|in-progress|pending-cancel|errored|finished|canceled) Filter only builds with the specified status DESCRIPTION list all builds for your project ``` ## eas build:resign Re-sign a build archive. ``` USAGE $ eas build:resign [-p android|ios] [-e ] [--source-profile ] [--wait] [--id ] [--offset ] [--limit ] [--json --non-interactive] FLAGS -e, --target-profile=PROFILE_NAME Name of the target build profile from eas.json. Credentials and environment variables from this profile will be used when re-signing. Defaults to "production" if defined in eas.json. -p, --platform=(android|ios) --id= ID of the build to re-sign. --json Enable JSON output, non-JSON messages will be printed to stderr. --limit= The number of items to fetch each query. Defaults to 50 and is capped at 100. --non-interactive Run the command in non-interactive mode. --offset= Start queries from specified index. Use for paginating results. Defaults to 0. --source-profile=PROFILE_NAME Name of the source build profile from eas.json. Used to filter builds eligible for re-signing. --[no-]wait Wait for build(s) to complete. DESCRIPTION re-sign a build archive ``` ## eas build:run Run simulator/emulator builds from eas-cli. ``` USAGE $ eas build:run [--latest | --id | --path | --url ] [-p android|ios] [-e ] [--offset ] [--limit ] FLAGS -e, --profile=PROFILE_NAME Name of the build profile used to create the build to run. When specified, only builds created with the specified build profile will be queried. -p, --platform=(android|ios) --id= ID of the simulator/emulator build to run --latest Run the latest simulator/emulator build for specified platform --limit= The number of items to fetch each query. Defaults to 50 and is capped at 100. --offset= Start queries from specified index. Use for paginating results. Defaults to 0. --path= Path to the simulator/emulator build archive or app --url= Simulator/Emulator build archive url DESCRIPTION run simulator/emulator builds from eas-cli ``` ## eas build:submit Submit app binary to App Store and/or Play Store. ``` USAGE $ eas build:submit [-p android|ios|all] [-e ] [--latest | --id | --path | --url ] [--what-to-test ] [--verbose] [--wait] [--verbose-fastlane] [-g ] [--non-interactive] FLAGS -e, --profile= Name of the submit profile from eas.json. Defaults to "production" if defined in eas.json. -g, --groups=... Internal TestFlight testing groups to add the build to (iOS only). Learn more: https://developer.apple.com/help/app-store-connect/test-a-beta-version/add-internal- testers -p, --platform=(android|ios|all) --id= ID of the build to submit --latest Submit the latest build for specified platform --non-interactive Run command in non-interactive mode --path= Path to the .apk/.aab/.ipa file --url= App archive url --verbose Always print logs from EAS Submit --verbose-fastlane Enable verbose logging for the submission process --[no-]wait Wait for submission to complete --what-to-test= Sets the "What to test" information in TestFlight (iOS only). DESCRIPTION submit app binary to App Store and/or Play Store ALIASES $ eas build:submit ``` ## eas build:version:get Get the latest version from EAS servers. ``` USAGE $ eas build:version:get [-p android|ios|all] [-e ] [--json --non-interactive] FLAGS -e, --profile=PROFILE_NAME Name of the build profile from eas.json. Defaults to "production" if defined in eas.json. -p, --platform=(android|ios|all) --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. DESCRIPTION get the latest version from EAS servers ``` ## eas build:version:set Update version of an app. ``` USAGE $ eas build:version:set [-p android|ios] [-e ] FLAGS -e, --profile=PROFILE_NAME Name of the build profile from eas.json. Defaults to "production" if defined in eas.json. -p, --platform=(android|ios) DESCRIPTION update version of an app ``` ## eas build:version:sync Update a version in native code with a value stored on EAS servers. ``` USAGE $ eas build:version:sync [-p android|ios|all] [-e ] FLAGS -e, --profile=PROFILE_NAME Name of the build profile from eas.json. Defaults to "production" if defined in eas.json. -p, --platform=(android|ios|all) DESCRIPTION update a version in native code with a value stored on EAS servers ``` ## eas build:view [BUILD_ID] View a build for your project. ``` USAGE $ eas build:view [BUILD_ID] [--json] FLAGS --json Enable JSON output, non-JSON messages will be printed to stderr. DESCRIPTION view a build for your project ``` ## eas channel:create [NAME] Create a channel. ``` USAGE $ eas channel:create [NAME] [--json --non-interactive] ARGUMENTS NAME Name of the channel to create FLAGS --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. DESCRIPTION create a channel ``` ## eas channel:delete [NAME] Delete a channel. ``` USAGE $ eas channel:delete [NAME] [--json --non-interactive] ARGUMENTS NAME Name of the channel to delete FLAGS --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. DESCRIPTION Delete a channel ``` ## eas channel:edit [NAME] Point a channel at a new branch. ``` USAGE $ eas channel:edit [NAME] [--branch ] [--json --non-interactive] ARGUMENTS NAME Name of the channel to edit FLAGS --branch= Name of the branch to point to --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. DESCRIPTION point a channel at a new branch ``` ## eas channel:list List all channels. ``` USAGE $ eas channel:list [--offset ] [--limit ] [--json --non-interactive] FLAGS --json Enable JSON output, non-JSON messages will be printed to stderr. --limit= The number of items to fetch each query. Defaults to 10 and is capped at 25. --non-interactive Run the command in non-interactive mode. --offset= Start queries from specified index. Use for paginating results. Defaults to 0. DESCRIPTION list all channels ``` ## eas channel:pause [NAME] Pause a channel to stop it from sending updates. ``` USAGE $ eas channel:pause [NAME] [--branch ] [--json --non-interactive] ARGUMENTS NAME Name of the channel to edit FLAGS --branch= Name of the branch to point to --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. DESCRIPTION pause a channel to stop it from sending updates ``` ## eas channel:resume [NAME] Resume a channel to start sending updates. ``` USAGE $ eas channel:resume [NAME] [--branch ] [--json --non-interactive] ARGUMENTS NAME Name of the channel to edit FLAGS --branch= Name of the branch to point to --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. DESCRIPTION resume a channel to start sending updates ``` ## eas channel:rollout [CHANNEL] Roll a new branch out on a channel incrementally. ``` USAGE $ eas channel:rollout [CHANNEL] [--action create|edit|end|view] [--percent ] [--outcome republish-and-revert|revert] [--branch ] [--runtime-version ] [--private-key-path ] [--json --non-interactive] ARGUMENTS CHANNEL channel on which the rollout should be done FLAGS --action=(create|edit|end|view) Rollout action to perform --branch= Branch to roll out. Use with --action=create --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. --outcome=(republish-and-revert|revert) End outcome of rollout. Use with --action=end --percent= Percent of users to send to the new branch. Use with --action=edit or --action=create --private-key-path= File containing the PEM-encoded private key corresponding to the certificate in expo-updates' configuration. Defaults to a file named "private-key.pem" in the certificate's directory. Only relevant if you are using code signing: https://docs.expo.dev/eas-update/code-signing/ --runtime-version= Runtime version to target. Use with --action=create DESCRIPTION Roll a new branch out on a channel incrementally. ``` ## eas channel:view [NAME] View a channel. ``` USAGE $ eas channel:view [NAME] [--json --non-interactive] [--offset ] [--limit ] ARGUMENTS NAME Name of the channel to view FLAGS --json Enable JSON output, non-JSON messages will be printed to stderr. --limit= The number of items to fetch each query. Defaults to 50 and is capped at 100. --non-interactive Run the command in non-interactive mode. --offset= Start queries from specified index. Use for paginating results. Defaults to 0. DESCRIPTION view a channel ``` ## eas config Display project configuration (app.json + eas.json). ``` USAGE $ eas config [-p android|ios] [-e ] [--json --non-interactive] FLAGS -e, --profile=PROFILE_NAME Name of the build profile from eas.json. Defaults to "production" if defined in eas.json. -p, --platform=(android|ios) --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. DESCRIPTION display project configuration (app.json + eas.json) ``` ## eas credentials Manage credentials. ``` USAGE $ eas credentials [-p android|ios] FLAGS -p, --platform=(android|ios) DESCRIPTION manage credentials ``` ## eas credentials:configure-build Set up credentials for building your project. ``` USAGE $ eas credentials:configure-build [-p android|ios] [-e ] FLAGS -e, --profile=PROFILE_NAME The name of the build profile in eas.json. -p, --platform=(android|ios) DESCRIPTION Set up credentials for building your project. ``` ## eas deploy [options] Deploy your Expo Router web build and API Routes. ``` USAGE $ eas deploy [options] $ eas deploy --prod FLAGS --alias=name Custom alias to assign to the new deployment. --dry-run Outputs a tarball of the new deployment instead of uploading it. --environment= Environment variable's environment, e.g. 'production', 'preview', 'development' --export-dir=dir [default: dist] Directory where the Expo project was exported. --id=xyz123 Custom unique identifier for the new deployment. --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. --prod Create a new production deployment. DESCRIPTION deploy your Expo Router web build and API Routes ALIASES $ eas worker:deploy ``` ## eas deploy:alias Assign deployment aliases. ``` USAGE $ eas deploy:alias [--prod] [--alias ] [--id ] [--json --non-interactive] FLAGS --alias=name Custom alias to assign to the existing deployment. --id=xyz123 Unique identifier of an existing deployment. --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. --prod Promote an existing deployment to production. DESCRIPTION Assign deployment aliases. ALIASES $ eas worker:alias $ eas deploy:promote ``` ## eas deploy:alias:delete [ALIAS_NAME] Delete deployment aliases. ``` USAGE $ eas deploy:alias:delete [ALIAS_NAME] [--json --non-interactive] FLAGS --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. DESCRIPTION Delete deployment aliases. ALIASES $ eas worker:alias:delete ``` ## eas deploy:delete [DEPLOYMENT_ID] Delete a deployment. ``` USAGE $ eas deploy:delete [DEPLOYMENT_ID] [--json --non-interactive] FLAGS --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. DESCRIPTION Delete a deployment. ALIASES $ eas worker:delete ``` ## eas deploy:promote Assign deployment aliases. ``` USAGE $ eas deploy:promote [--prod] [--alias ] [--id ] [--json --non-interactive] FLAGS --alias=name Custom alias to assign to the existing deployment. --id=xyz123 Unique identifier of an existing deployment. --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. --prod Promote an existing deployment to production. DESCRIPTION Assign deployment aliases. ALIASES $ eas worker:alias $ eas deploy:promote ``` ## eas device:create Register new Apple Devices to use for internal distribution. ``` USAGE $ eas device:create DESCRIPTION register new Apple Devices to use for internal distribution ``` ## eas device:delete Remove a registered device from your account. ``` USAGE $ eas device:delete [--apple-team-id ] [--udid ] [--json --non-interactive] FLAGS --apple-team-id= The Apple team ID on which to find the device --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. --udid= The Apple device ID to disable DESCRIPTION remove a registered device from your account ``` ## eas device:list List all registered devices for your account. ``` USAGE $ eas device:list [--apple-team-id ] [--offset ] [--limit ] [--json --non-interactive] FLAGS --apple-team-id= --json Enable JSON output, non-JSON messages will be printed to stderr. --limit= The number of items to fetch each query. Defaults to 50 and is capped at 100. --non-interactive Run the command in non-interactive mode. --offset= Start queries from specified index. Use for paginating results. Defaults to 0. DESCRIPTION list all registered devices for your account ``` ## eas device:rename Rename a registered device. ``` USAGE $ eas device:rename [--apple-team-id ] [--udid ] [--name ] [--json --non-interactive] FLAGS --apple-team-id= The Apple team ID on which to find the device --json Enable JSON output, non-JSON messages will be printed to stderr. --name= The new name for the device --non-interactive Run the command in non-interactive mode. --udid= The Apple device ID to rename DESCRIPTION rename a registered device ``` ## eas device:view [UDID] View a device for your project. ``` USAGE $ eas device:view [UDID] DESCRIPTION view a device for your project ``` ## eas diagnostics Display environment info. ``` USAGE $ eas diagnostics DESCRIPTION display environment info ``` ## eas env:create [ENVIRONMENT] Create an environment variable for the current project or account. ``` USAGE $ eas env:create [ENVIRONMENT] [--name ] [--value ] [--force] [--type string|file] [--visibility plaintext|sensitive|secret] [--scope project|account] [--environment ] [--non-interactive] ARGUMENTS ENVIRONMENT Environment to create the variable in. Default environments are 'production', 'preview', and 'development'. FLAGS --environment=... Environment variable's environment, e.g. 'production', 'preview', 'development' --force Overwrite existing variable --name= Name of the variable --non-interactive Run the command in non-interactive mode. --scope=(project|account) [default: project] Scope for the variable --type=(string|file) The type of variable --value= Text value or the variable --visibility=(plaintext|sensitive|secret) Visibility of the variable DESCRIPTION create an environment variable for the current project or account ``` ## eas env:delete [ENVIRONMENT] Delete an environment variable for the current project or account. ``` USAGE $ eas env:delete [ENVIRONMENT] [--variable-name ] [--variable-environment ] [--scope project|account] [--non-interactive] ARGUMENTS ENVIRONMENT Current environment of the variable to delete. Default environments are 'production', 'preview', and 'development'. FLAGS --non-interactive Run the command in non-interactive mode. --scope=(project|account) [default: project] Scope for the variable --variable-environment= Current environment of the variable to delete --variable-name= Name of the variable to delete DESCRIPTION delete an environment variable for the current project or account ``` ## eas env:exec ENVIRONMENT BASH_COMMAND Execute a command with environment variables from the selected environment. ``` USAGE $ eas env:exec ENVIRONMENT BASH_COMMAND [--non-interactive] ARGUMENTS ENVIRONMENT Environment to execute the command in. Default environments are 'production', 'preview', and 'development'. BASH_COMMAND bash command to execute with the environment variables from the environment FLAGS --non-interactive Run the command in non-interactive mode. DESCRIPTION execute a command with environment variables from the selected environment ``` ## eas env:get [ENVIRONMENT] View an environment variable for the current project or account. ``` USAGE $ eas env:get [ENVIRONMENT] [--variable-name ] [--variable-environment ] [--format long|short] [--scope project|account] [--non-interactive] ARGUMENTS ENVIRONMENT Current environment of the variable. Default environments are 'production', 'preview', and 'development'. FLAGS --format=(long|short) [default: short] Output format --non-interactive Run the command in non-interactive mode. --scope=(project|account) [default: project] Scope for the variable --variable-environment= Current environment of the variable --variable-name= Name of the variable DESCRIPTION view an environment variable for the current project or account ``` ## eas env:list [ENVIRONMENT] List environment variables for the current project or account. ``` USAGE $ eas env:list [ENVIRONMENT] [--include-sensitive] [--include-file-content] [--environment ] [--format long|short] [--scope project|account] ARGUMENTS ENVIRONMENT Environment to list the variables from. Default environments are 'production', 'preview', and 'development'. FLAGS --environment=... Environment variable's environment, e.g. 'production', 'preview', 'development' --format=(long|short) [default: short] Output format --include-file-content Display files content in the output --include-sensitive Display sensitive values in the output --scope=(project|account) [default: project] Scope for the variable DESCRIPTION list environment variables for the current project or account ``` ## eas env:pull [ENVIRONMENT] Pull environment variables for the selected environment to .env file. ``` USAGE $ eas env:pull [ENVIRONMENT] [--non-interactive] [--environment ] [--path ] ARGUMENTS ENVIRONMENT Environment to pull variables from. Default environments are 'production', 'preview', and 'development'. FLAGS --environment= Environment variable's environment, e.g. 'production', 'preview', 'development' --non-interactive Run the command in non-interactive mode. --path= [default: .env.local] Path to the result `.env` file DESCRIPTION pull environment variables for the selected environment to .env file ``` ## eas env:push [ENVIRONMENT] Push environment variables from .env file to the selected environment. ``` USAGE $ eas env:push [ENVIRONMENT] [--environment ] [--path ] [--force] ARGUMENTS ENVIRONMENT Environment to push variables to. Default environments are 'production', 'preview', and 'development'. FLAGS --environment=... Environment variable's environment, e.g. 'production', 'preview', 'development' --force Skip confirmation and automatically override existing variables --path= [default: .env.local] Path to the input `.env` file DESCRIPTION push environment variables from .env file to the selected environment ``` ## eas env:update [ENVIRONMENT] Update an environment variable on the current project or account. ``` USAGE $ eas env:update [ENVIRONMENT] [--variable-name ] [--variable-environment ] [--name ] [--value ] [--type string|file] [--visibility plaintext|sensitive|secret] [--scope project|account] [--environment ] [--non-interactive] ARGUMENTS ENVIRONMENT Current environment of the variable to update. Default environments are 'production', 'preview', and 'development'. FLAGS --environment=... Environment variable's environment, e.g. 'production', 'preview', 'development' --name= New name of the variable --non-interactive Run the command in non-interactive mode. --scope=(project|account) [default: project] Scope for the variable --type=(string|file) The type of variable --value= New value or the variable --variable-environment= Current environment of the variable to update --variable-name= Current name of the variable --visibility=(plaintext|sensitive|secret) Visibility of the variable DESCRIPTION update an environment variable on the current project or account ``` ## eas fingerprint:compare [HASH1] [HASH2] Compare fingerprints of the current project, builds, and updates. ``` USAGE $ eas fingerprint:compare [HASH1] [HASH2] [--build-id ] [--update-id ] [--open] [--environment ] [--json --non-interactive] ARGUMENTS HASH1 If provided alone, HASH1 is compared against the current project's fingerprint. HASH2 If two hashes are provided, HASH1 is compared against HASH2. FLAGS --build-id=... Compare the fingerprint with the build with the specified ID --environment= If generating a fingerprint from the local directory, use the specified environment. --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. --open Open the fingerprint comparison in the browser --update-id=... Compare the fingerprint with the update with the specified ID DESCRIPTION compare fingerprints of the current project, builds, and updates EXAMPLES $ eas fingerprint:compare # Compare fingerprints in interactive mode $ eas fingerprint:compare # Compare fingerprint against local directory $ eas fingerprint:compare # Compare provided fingerprints $ eas fingerprint:compare --build-id # Compare fingerprint from build against local directory $ eas fingerprint:compare --build-id --environment production # Compare fingerprint from build against local directory with the "production" environment $ eas fingerprint:compare --build-id --build-id # Compare fingerprint from a build against another build $ eas fingerprint:compare --build-id --update-id # Compare fingerprint from build against fingerprint from update $ eas fingerprint:compare --update-id # Compare fingerprint from update against provided fingerprint ``` ## eas fingerprint:generate Generate fingerprints from the current project. ``` USAGE $ eas fingerprint:generate [-p android|ios] [--environment | -e ] [--json --non-interactive] FLAGS -e, --build-profile= Name of the build profile from eas.json. -p, --platform=(android|ios) --environment= Environment variable's environment, e.g. 'production', 'preview', 'development' --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. DESCRIPTION generate fingerprints from the current project EXAMPLES $ eas fingerprint:generate # Generate fingerprint in interactive mode $ eas fingerprint:generate --build-profile preview # Generate a fingerprint using the "preview" build profile $ eas fingerprint:generate --environment preview # Generate a fingerprint using the "preview" environment $ eas fingerprint:generate --json --non-interactive --platform android # Output fingerprint json to stdout ``` ## eas help [COMMAND] Display help for eas. ``` USAGE $ eas help [COMMAND] [-n] ARGUMENTS COMMAND Command to show help for. FLAGS -n, --nested-commands Include all nested commands in the output. DESCRIPTION Display help for eas. ``` ## eas init Create or link an EAS project. ``` USAGE $ eas init [--id ] [--force] [--non-interactive] FLAGS --force Whether to create a new project/link an existing project without additional prompts or overwrite any existing project ID when running with --id flag --id= ID of the EAS project to link --non-interactive Run the command in non-interactive mode. DESCRIPTION create or link an EAS project ALIASES $ eas init ``` ## eas init:onboarding [TARGET_PROJECT_DIRECTORY] Continue onboarding process started on the https://expo.new website. ``` USAGE $ eas init:onboarding [TARGET_PROJECT_DIRECTORY] DESCRIPTION continue onboarding process started on the https://expo.new website. ALIASES $ eas init:onboarding $ eas onboarding ``` ## eas login Log in with your Expo account. ``` USAGE $ eas login [-s] FLAGS -s, --sso Login with SSO DESCRIPTION log in with your Expo account ALIASES $ eas login ``` ## eas logout Log out. ``` USAGE $ eas logout DESCRIPTION log out ALIASES $ eas logout ``` ## eas metadata:lint Validate the local store configuration. ``` USAGE $ eas metadata:lint [--json] [--profile ] FLAGS --json Enable JSON output, non-JSON messages will be printed to stderr --profile= Name of the submit profile from eas.json. Defaults to "production" if defined in eas.json. DESCRIPTION validate the local store configuration ``` ## eas metadata:pull Generate the local store configuration from the app stores. ``` USAGE $ eas metadata:pull [-e ] FLAGS -e, --profile= Name of the submit profile from eas.json. Defaults to "production" if defined in eas.json. DESCRIPTION generate the local store configuration from the app stores ``` ## eas metadata:push Sync the local store configuration to the app stores. ``` USAGE $ eas metadata:push [-e ] FLAGS -e, --profile= Name of the submit profile from eas.json. Defaults to "production" if defined in eas.json. DESCRIPTION sync the local store configuration to the app stores ``` ## eas new [PATH] Create a new project configured with Expo Application Services (EAS). ``` USAGE $ eas new [PATH] [-p bun|npm|pnpm|yarn] ARGUMENTS PATH Path to create the project (defaults to current directory) FLAGS -p, --package-manager=(bun|npm|pnpm|yarn) [default: npm] Package manager to use for installing dependencies DESCRIPTION Create a new project configured with Expo Application Services (EAS) ALIASES $ eas new ``` ## eas onboarding [TARGET_PROJECT_DIRECTORY] Continue onboarding process started on the https://expo.new website. ``` USAGE $ eas onboarding [TARGET_PROJECT_DIRECTORY] DESCRIPTION continue onboarding process started on the https://expo.new website. ALIASES $ eas init:onboarding $ eas onboarding ``` ## eas open Open the project page in a web browser. ``` USAGE $ eas open DESCRIPTION open the project page in a web browser ``` ## eas project:info Information about the current project. ``` USAGE $ eas project:info DESCRIPTION information about the current project ``` ## eas project:init Create or link an EAS project. ``` USAGE $ eas project:init [--id ] [--force] [--non-interactive] FLAGS --force Whether to create a new project/link an existing project without additional prompts or overwrite any existing project ID when running with --id flag --id= ID of the EAS project to link --non-interactive Run the command in non-interactive mode. DESCRIPTION create or link an EAS project ALIASES $ eas init ``` ## eas project:new [PATH] Create a new project configured with Expo Application Services (EAS). ``` USAGE $ eas project:new [PATH] [-p bun|npm|pnpm|yarn] ARGUMENTS PATH Path to create the project (defaults to current directory) FLAGS -p, --package-manager=(bun|npm|pnpm|yarn) [default: npm] Package manager to use for installing dependencies DESCRIPTION Create a new project configured with Expo Application Services (EAS) ALIASES $ eas new ``` ## eas project:onboarding [TARGET_PROJECT_DIRECTORY] Continue onboarding process started on the https://expo.new website. ``` USAGE $ eas project:onboarding [TARGET_PROJECT_DIRECTORY] DESCRIPTION continue onboarding process started on the https://expo.new website. ALIASES $ eas init:onboarding $ eas onboarding ``` ## eas submit Submit app binary to App Store and/or Play Store. ``` USAGE $ eas submit [-p android|ios|all] [-e ] [--latest | --id | --path | --url ] [--what-to-test ] [--verbose] [--wait] [--verbose-fastlane] [-g ] [--non-interactive] FLAGS -e, --profile= Name of the submit profile from eas.json. Defaults to "production" if defined in eas.json. -g, --groups=... Internal TestFlight testing groups to add the build to (iOS only). Learn more: https://developer.apple.com/help/app-store-connect/test-a-beta-version/add-internal- testers -p, --platform=(android|ios|all) --id= ID of the build to submit --latest Submit the latest build for specified platform --non-interactive Run command in non-interactive mode --path= Path to the .apk/.aab/.ipa file --url= App archive url --verbose Always print logs from EAS Submit --verbose-fastlane Enable verbose logging for the submission process --[no-]wait Wait for submission to complete --what-to-test= Sets the "What to test" information in TestFlight (iOS only). DESCRIPTION submit app binary to App Store and/or Play Store ALIASES $ eas build:submit ``` ## eas update Publish an update group. ``` USAGE $ eas update [--branch ] [--channel ] [-m ] [--input-dir ] [--skip-bundler] [--clear-cache] [--emit-metadata] [--rollout-percentage ] [-p android|ios|all] [--auto] [--private-key-path ] [--environment ] [--json --non-interactive] FLAGS -m, --message= A short message describing the update -p, --platform=(android|ios|all) [default: all] --auto Use the current git branch and commit message for the EAS branch and update message --branch= Branch to publish the update group on --channel= Channel that the published update should affect --clear-cache Clear the bundler cache before publishing --emit-metadata Emit "eas-update-metadata.json" in the bundle folder with detailed information about the generated updates --environment= Environment to use for the server-side defined EAS environment variables during command execution, e.g. "production", "preview", "development" --input-dir= [default: dist] Location of the bundle --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. --private-key-path= File containing the PEM-encoded private key corresponding to the certificate in expo-updates' configuration. Defaults to a file named "private-key.pem" in the certificate's directory. Only relevant if you are using code signing: https://docs.expo.dev/eas-update/code-signing/ --rollout-percentage= Percentage of users this update should be immediately available to. Users not in the rollout will be served the previous latest update on the branch, even if that update is itself being rolled out. The specified number must be an integer between 1 and 100. When not specified, this defaults to 100. --skip-bundler Skip running Expo CLI to bundle the app before publishing DESCRIPTION publish an update group ``` ## eas update:configure Configure the project to support EAS Update. ``` USAGE $ eas update:configure [-p android|ios|all] [--environment ] [--non-interactive] FLAGS -p, --platform=(android|ios|all) [default: all] Platform to configure --environment= Environment to use for the server-side defined EAS environment variables during command execution, e.g. "production", "preview", "development" --non-interactive Run the command in non-interactive mode. DESCRIPTION configure the project to support EAS Update ``` ## eas update:delete GROUPID Delete all the updates in an update group. ``` USAGE $ eas update:delete GROUPID [--json --non-interactive] ARGUMENTS GROUPID The ID of an update group to delete. FLAGS --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. DESCRIPTION delete all the updates in an update group ``` ## eas update:edit [GROUPID] Edit all the updates in an update group. ``` USAGE $ eas update:edit [GROUPID] [--rollout-percentage ] [--branch ] [--json --non-interactive] ARGUMENTS GROUPID The ID of an update group to edit. FLAGS --branch= Branch for which to list updates to select from --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. --rollout-percentage= Rollout percentage to set for a rollout update. The specified number must be an integer between 1 and 100. DESCRIPTION edit all the updates in an update group ``` ## eas update:list View the recent updates. ``` USAGE $ eas update:list [--branch | --all] [-p android|ios|all] [--runtime-version ] [--offset ] [--limit ] [--json --non-interactive] FLAGS -p, --platform=(android|ios|all) Filter updates by platform --all List updates on all branches --branch= List updates only on this branch --json Enable JSON output, non-JSON messages will be printed to stderr. --limit= The number of items to fetch each query. Defaults to 25 and is capped at 50. --non-interactive Run the command in non-interactive mode. --offset= Start queries from specified index. Use for paginating results. Defaults to 0. --runtime-version= Filter updates by runtime version DESCRIPTION view the recent updates ``` ## eas update:republish Roll back to an existing update. ``` USAGE $ eas update:republish [--channel | --branch | --group ] [--destination-channel | --destination-branch ] [-m ] [-p android|ios|all] [--private-key-path ] [--rollout-percentage ] [--json --non-interactive] FLAGS -m, --message= Short message describing the republished update group -p, --platform=(android|ios|all) [default: all] --branch= Branch name to select an update group to republish from --channel= Channel name to select an update group to republish from --destination-branch= Branch name to republish to if republishing to a different branch --destination-channel= Channel name to select a branch to republish to if republishing to a different branch --group= Update group ID to republish --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. --private-key-path= File containing the PEM-encoded private key corresponding to the certificate in expo-updates' configuration. Defaults to a file named "private-key.pem" in the certificate's directory. Only relevant if you are using code signing: https://docs.expo.dev/eas-update/code-signing/ --rollout-percentage= Percentage of users this update should be immediately available to. Users not in the rollout will be served the previous latest update on the branch, even if that update is itself being rolled out. The specified number must be an integer between 1 and 100. When not specified, this defaults to 100. DESCRIPTION roll back to an existing update ``` ## eas update:revert-update-rollout Revert a rollout update for a project. ``` USAGE $ eas update:revert-update-rollout [--channel | --branch | --group ] [-m ] [--private-key-path ] [--json --non-interactive] FLAGS -m, --message= Short message describing the revert --branch= Branch name to select an update group to revert the rollout update from --channel= Channel name to select an update group to revert the rollout update from --group= Rollout update group ID to revert --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. --private-key-path= File containing the PEM-encoded private key corresponding to the certificate in expo-updates' configuration. Defaults to a file named "private-key.pem" in the certificate's directory. Only relevant if you are using code signing: https://docs.expo.dev/eas-update/code-signing/ DESCRIPTION revert a rollout update for a project ``` ## eas update:roll-back-to-embedded Roll back to the embedded update. ``` USAGE $ eas update:roll-back-to-embedded [--branch ] [--channel ] [--runtime-version ] [--message ] [-p android|ios|all] [--private-key-path ] [--json --non-interactive] FLAGS -p, --platform=(android|ios|all) [default: all] --branch= Branch to publish the rollback to embedded update group on --channel= Channel that the published rollback to embedded update should affect --json Enable JSON output, non-JSON messages will be printed to stderr. --message= A short message describing the rollback to embedded update --non-interactive Run the command in non-interactive mode. --private-key-path= File containing the PEM-encoded private key corresponding to the certificate in expo-updates' configuration. Defaults to a file named "private-key.pem" in the certificate's directory. Only relevant if you are using code signing: https://docs.expo.dev/eas-update/code-signing/ --runtime-version= Runtime version that the rollback to embedded update should target DESCRIPTION roll back to the embedded update ``` ## eas update:rollback Roll back to an embedded update or an existing update. Users wishing to run this command non-interactively should instead execute "eas update:republish" or "eas update:roll-back-to-embedded". ``` USAGE $ eas update:rollback [--private-key-path ] FLAGS --private-key-path= File containing the PEM-encoded private key corresponding to the certificate in expo-updates' configuration. Defaults to a file named "private-key.pem" in the certificate's directory. Only relevant if you are using code signing: https://docs.expo.dev/eas-update/code-signing/ DESCRIPTION Roll back to an embedded update or an existing update. Users wishing to run this command non-interactively should instead execute "eas update:republish" or "eas update:roll-back-to-embedded". ``` ## eas update:view GROUPID Update group details. ``` USAGE $ eas update:view GROUPID [--json] ARGUMENTS GROUPID The ID of an update group. FLAGS --json Enable JSON output, non-JSON messages will be printed to stderr. DESCRIPTION update group details ``` ## eas upload Upload a local build and generate a sharable link. ``` USAGE $ eas upload [-p ios|android] [--build-path ] [--fingerprint ] [--json --non-interactive] FLAGS -p, --platform=(ios|android) --build-path= Path for the local build --fingerprint= Fingerprint hash of the local build --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. DESCRIPTION upload a local build and generate a sharable link ``` ## eas webhook:create Create a webhook. ``` USAGE $ eas webhook:create [--event BUILD|SUBMIT] [--url ] [--secret ] [--non-interactive] FLAGS --event=(BUILD|SUBMIT) Event type that triggers the webhook --non-interactive Run the command in non-interactive mode. --secret= Secret used to create a hash signature of the request payload, provided in the 'Expo-Signature' header. --url= Webhook URL DESCRIPTION create a webhook ``` ## eas webhook:delete [ID] Delete a webhook. ``` USAGE $ eas webhook:delete [ID] [--non-interactive] ARGUMENTS ID ID of the webhook to delete FLAGS --non-interactive Run the command in non-interactive mode. DESCRIPTION delete a webhook ``` ## eas webhook:list List webhooks. ``` USAGE $ eas webhook:list [--event BUILD|SUBMIT] [--json] FLAGS --event=(BUILD|SUBMIT) Event type that triggers the webhook --json Enable JSON output, non-JSON messages will be printed to stderr. DESCRIPTION list webhooks ``` ## eas webhook:update Update a webhook. ``` USAGE $ eas webhook:update --id [--event BUILD|SUBMIT] [--url ] [--secret ] [--non-interactive] FLAGS --event=(BUILD|SUBMIT) Event type that triggers the webhook --id= (required) Webhook ID --non-interactive Run the command in non-interactive mode. --secret= Secret used to create a hash signature of the request payload, provided in the 'Expo-Signature' header. --url= Webhook URL DESCRIPTION update a webhook ``` ## eas webhook:view ID View a webhook. ``` USAGE $ eas webhook:view ID ARGUMENTS ID ID of the webhook to view DESCRIPTION view a webhook ``` ## eas whoami Show the username you are logged in as. ``` USAGE $ eas whoami DESCRIPTION show the username you are logged in as ALIASES $ eas whoami ``` ## eas worker:alias Assign deployment aliases. ``` USAGE $ eas worker:alias [--prod] [--alias ] [--id ] [--json --non-interactive] FLAGS --alias=name Custom alias to assign to the existing deployment. --id=xyz123 Unique identifier of an existing deployment. --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. --prod Promote an existing deployment to production. DESCRIPTION Assign deployment aliases. ALIASES $ eas worker:alias $ eas deploy:promote ``` ## eas worker:alias:delete [ALIAS_NAME] Delete deployment aliases. ``` USAGE $ eas worker:alias:delete [ALIAS_NAME] [--json --non-interactive] FLAGS --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. DESCRIPTION Delete deployment aliases. ALIASES $ eas worker:alias:delete ``` ## eas worker:delete [DEPLOYMENT_ID] Delete a deployment. ``` USAGE $ eas worker:delete [DEPLOYMENT_ID] [--json --non-interactive] FLAGS --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. DESCRIPTION Delete a deployment. ALIASES $ eas worker:delete ``` ## eas workflow:cancel Cancel one or more workflow runs. If no workflow run IDs are provided, you will be prompted to select IN_PROGRESS runs to cancel. ``` USAGE $ eas workflow:cancel [--non-interactive] FLAGS --non-interactive Run the command in non-interactive mode. DESCRIPTION Cancel one or more workflow runs. If no workflow run IDs are provided, you will be prompted to select IN_PROGRESS runs to cancel. ``` ## eas workflow:create [NAME] Create a new workflow configuration YAML file. ``` USAGE $ eas workflow:create [NAME] [--skip-validation] ARGUMENTS NAME Name of the workflow file (must end with .yml or .yaml) FLAGS --skip-validation If set, the workflow file will not be validated before being created DESCRIPTION create a new workflow configuration YAML file ``` ## eas workflow:logs [ID] View logs for a workflow run, selecting a job and step to view. You can pass in either a workflow run ID or a job ID. If no ID is passed in, you will be prompted to select from recent workflow runs for the current project. ``` USAGE $ eas workflow:logs [ID] [--json] [--non-interactive] [--all-steps] ARGUMENTS ID ID of the workflow run or workflow job to view logs for FLAGS --all-steps Print all logs, rather than prompting for a specific step. This will be automatically set when in non-interactive mode. --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. DESCRIPTION view logs for a workflow run, selecting a job and step to view. You can pass in either a workflow run ID or a job ID. If no ID is passed in, you will be prompted to select from recent workflow runs for the current project. ``` ## eas workflow:run [FILE] Run an EAS workflow. The entire local project directory will be packaged and uploaded to EAS servers for the workflow run, unless the --ref flag is used. ``` USAGE $ eas workflow:run [FILE] [--non-interactive] [--wait] [-F ] [--ref ] [--json] ARGUMENTS FILE Path to the workflow file to run FLAGS -F, --input=... Set workflow inputs --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. --ref= Git reference to run the workflow on --[no-]wait Wait for workflow run to complete. Defaults to false. DESCRIPTION run an EAS workflow. The entire local project directory will be packaged and uploaded to EAS servers for the workflow run, unless the --ref flag is used. FLAG DESCRIPTIONS -F, --input=... Set workflow inputs Add a parameter in key=value format. Use multiple instances of this flag to set multiple inputs. --ref= Git reference to run the workflow on The git reference must exist in the project's git repository, and the workflow file must exist at that reference. When this flag is used, the local project is not uploaded; instead, the workflow is run from the exact state of the project at the chosen reference. --[no-]wait Wait for workflow run to complete. Defaults to false. Exit codes: 0 = success, 11 = failure, 12 = canceled, 13 = wait aborted. ``` ## eas workflow:runs List recent workflow runs for this project, with their IDs, statuses, and timestamps. ``` USAGE $ eas workflow:runs [--workflow ] [--status ACTION_REQUIRED|CANCELED|FAILURE|IN_PROGRESS|NEW|SUCCESS] [--json] [--limit ] FLAGS --json Enable JSON output, non-JSON messages will be printed to stderr. --limit= The number of items to fetch each query. Defaults to 10 and is capped at 100. --status=(ACTION_REQUIRED|CANCELED|FAILURE|IN_PROGRESS|NEW|SUCCESS) If present, filter the returned runs to select those with the specified status --workflow= If present, the query will only return runs for the specified workflow file name DESCRIPTION list recent workflow runs for this project, with their IDs, statuses, and timestamps ``` ## eas workflow:status [WORKFLOW_RUN_ID] Show the status of an existing workflow run. If no run ID is provided, you will be prompted to select from recent workflow runs for the current project. ``` USAGE $ eas workflow:status [WORKFLOW_RUN_ID] [--non-interactive] [--wait] [--json] ARGUMENTS WORKFLOW_RUN_ID A workflow run ID. FLAGS --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. --[no-]wait Wait for workflow run to complete. Defaults to false. DESCRIPTION show the status of an existing workflow run. If no run ID is provided, you will be prompted to select from recent workflow runs for the current project. FLAG DESCRIPTIONS --[no-]wait Wait for workflow run to complete. Defaults to false. Exit codes: 0 = success, 11 = failure, 12 = canceled, 13 = wait aborted. ``` ## eas workflow:validate PATH Validate a workflow configuration yaml file. ``` USAGE $ eas workflow:validate PATH [--non-interactive] ARGUMENTS PATH Path to the workflow configuration YAML file (must end with .yml or .yaml) FLAGS --non-interactive Run the command in non-interactive mode. DESCRIPTION validate a workflow configuration yaml file ``` ## eas workflow:view [ID] View details for a workflow run, including jobs. If no run ID is provided, you will be prompted to select from recent workflow runs for the current project. ``` USAGE $ eas workflow:view [ID] [--json] [--non-interactive] ARGUMENTS ID ID of the workflow run to view FLAGS --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. DESCRIPTION view details for a workflow run, including jobs. If no run ID is provided, you will be prompted to select from recent workflow runs for the current project. ``` # Environment variables ## Overview ## Create and manage environment variables in EAS Learn how to create, scope, and consume environment variables with EAS dashboard and EAS CLI. The following sections cover how to create, scope, and consume environment variables with EAS dashboard and EAS CLI. ## Create environment variables - [**Choose an environment or multiple environments**](/eas/environment-variables/#available-environments): `development`, `preview`, and `production` are available by default. A variable can be reused across them or customized per environment. - [**Choose scope**](/eas/environment-variables/#scope): Project-wide variables apply to one project. Account-wide variables can be reused across projects and are merged with project variables at build time. - [**Choose visibility**](/eas/environment-variables/#visibility-settings-for-environment-variables): Use **secret** for values that should never leave EAS servers, **sensitive** for values that may be revealed locally, and **plain text** for non-sensitive values. ### Create variables in the dashboard To create a new environment variable on EAS servers, in your project dashboard, you can navigate to the **Project settings** > [**Environment variables**](https://expo.dev/accounts/[account]/projects/[project]/environment-variables) and then click on the **Add Variables** button. Use the [environment variables creation form](https://expo.dev/accounts/[account]/projects/[project]/environment-variables) page to set the name, value, environment(s), visibility, and optional description. Created variables appear in the list with their scope, visibility, and environment tags. Based on the environment variables in this example, the list may look like this: In the above example list: - The `SENTRY_AUTH_TOKEN` variable is a sensitive environment variable. It is used to authenticate Sentry to upload source maps after builds and updates, and has to be accessible outside of EAS servers. - The `GOOGLE_SERVICES_JSON` variable is a secret environment variable and uses an uploaded file. It is used to authenticate Google to access the Google Services JSON file, and has to be stored securely on EAS servers. This uploaded JSON file is typically added to your project's **.gitignore**. - All other variables, such as `APP_VARIANT` and `EXPO_PUBLIC_API_URL`, are plain text environment variables. ### Create variables with EAS CLI Use `eas env:create` to add variables and `eas env:list` to verify what is set. ```sh $ eas env:create --name EXPO_PUBLIC_API_URL --value https://example.app/staging --environment preview --visibility plaintext $ eas env:list --environment preview ``` ## Using environment variables in your code ### Client-side values The environment variables with the [`EXPO_PUBLIC_`](/guides/environment-variables) prefix are available as `process.env` variables in your app's code. You can use them dynamically to configure your app behavior based in their values: ```tsx import { Button } from 'react-native'; function Post() { const apiUrl = process.env.EXPO_PUBLIC_API_URL; async function onPress() { await fetch(apiUrl, { }); } return