expo/eas-cli(新しいタブで開きます)
主要言語: TypeScript
Fastest way to build, submit, and update iOS and Android apps
- star 数
- 1,376
- watcher 数
- 20
- fork 数
- 259
- issue 数
- 487
- 最終更新
- 2026/10/31
主要言語: TypeScript
Fastest way to build, submit, and update iOS and Android apps
Ship Expo and React Native apps from your terminal: build, submit, update, deploy, and automate with EAS.
📚 Documentation • 📖 CLI Reference • 🚀 EAS • 📝 Blog • 📰 Changelog • 👏 Contribute
EAS CLI is the command-line interface for Expo Application Services (EAS): deeply integrated cloud services for Expo and React Native apps, from the team behind Expo.
It gives you a terminal-native path from source code to production: compile signed Android and iOS binaries in the cloud, submit them to the app stores, push over-the-air updates, deploy web apps and API routes, and automate the entire release process, from your machine or from CI.
Install the CLI, log in to your Expo account, and link your project:
npm install --global eas-cli eas login eas init
Then ship:
# Compile installable Android and iOS binaries in the cloud eas build --platform all # Submit the latest builds to Google Play and the App Store eas submit --platform all # Push an over-the-air update to your users eas update --branch production --message "Fix checkout crash"
Prefer not to install globally? Every command also works with npx eas-cli@latest:
npx eas-cli@latest build --platform ios
New to EAS? Follow Create your first build for a complete walkthrough.
eas build): compile and sign Android and iOS apps with custom native code in the cloud, manage app credentials, and share internal distribution builds.eas submit): upload your app to Google Play and App Store Connect with one command.eas update): push JavaScript and asset fixes directly to users, with branches, channels, runtime versions, rollouts, and rollbacks.eas workflow): automate development and release with CI/CD jobs that build, test, submit, update, and deploy your app from .eas/workflows.eas deploy): deploy Expo Router and React Native web apps and API routes.eas metadata:push): maintain your app store presence from the command line (in preview).eas env, eas credentials, eas device, eas channel, …): manage environment variables, signing credentials, Apple devices, update channels, webhooks, and project settings.EAS CLI is designed to be installed globally or run with npx. Installing eas-cli into project dependencies is strongly discouraged because it can cause dependency conflicts that are difficult to debug.
If you want to enforce the eas-cli version for your project, use the "cli.version" field in eas.json:
{
"cli": {
"version": ">=21.0.0"
},
"build": {
// build profiles
},
"submit": {
// submit profiles
}
}eas account:audit [ACCOUNT_NAME]eas account:logineas account:logouteas account:usage [ACCOUNT_NAME]eas account:vieweas analytics [STATUS]eas autocomplete [SHELL]eas billing:manageeas billing:subscribe [PLAN]eas branch:create [NAME]eas branch:delete [NAME]eas branch:listeas branch:renameeas branch:view [NAME]eas browse [PAGE]eas buildeas build:cancel [BUILD_ID]eas build:configureeas build:delete [BUILD_ID]eas build:deveas build:downloadeas build:inspecteas build:listeas build:resigneas build:runeas build:submiteas build:version:geteas build:version:seteas build:version:synceas build:view [BUILD_ID]eas channel:create [NAME]eas channel:delete [NAME]eas channel:edit [NAME]eas channel:insightseas channel:listeas channel:pause [NAME]eas channel:protect [NAME]eas channel:resume [NAME]eas channel:rollout [CHANNEL]eas channel:unprotect [NAME]eas channel:view [NAME]eas configeas credentialseas credentials:configure-buildeas deploy [options]eas deploy:aliaseas deploy:alias:delete [ALIAS_NAME]eas deploy:delete [DEPLOYMENT_ID]eas deploy:promoteeas device:createeas device:deleteeas device:listeas device:renameeas device:view [UDID]eas diagnosticseas env:delete [ENVIRONMENT]eas env:exec ENVIRONMENT BASH_COMMANDeas env:get [ENVIRONMENT]eas env:list [ENVIRONMENT]eas env:pull [ENVIRONMENT]eas env:push [ENVIRONMENT]eas env:set [ENVIRONMENT]eas fingerprint:compare [HASH1] [HASH2]eas fingerprint:generateeas help [COMMAND]eas initeas integrations:asc:connecteas integrations:asc:disconnecteas integrations:asc:statuseas integrations:convex:connecteas integrations:convex:dashboardeas integrations:convex:projecteas integrations:convex:project:deleteeas integrations:convex:teameas integrations:convex:team:delete [CONVEX_TEAM]eas integrations:convex:team:invite [CONVEX_TEAM]eas integrations:posthog:connecteas integrations:posthog:dashboardeas integrations:posthog:disconnecteas integrations:supabase:advisorseas integrations:supabase:connecteas integrations:supabase:dashboardeas integrations:supabase:disconnecteas logineas logouteas metadata:linteas metadata:pulleas metadata:pusheas new [PATH]eas observe:errorseas observe:event IDeas observe:events [EVENTNAME]eas observe:metrics [METRIC]eas observe:metrics-summaryeas observe:routeseas observe:session [SESSIONID]eas observe:trace TRACEIDeas observe:traceseas observe:versionseas project:delete [NAME]eas project:icon:set PATHeas project:infoeas project:initeas project:new [PATH]eas project:statuseas sim:availabilityeas sim:control [ACTION]eas sim:egresseas sim:eventseas sim:execeas sim:geteas sim:listeas sim:logseas sim:starteas sim:stopeas simulatoreas simulator:availabilityeas simulator:control [ACTION]eas simulator:egresseas simulator:eventseas simulator:execeas simulator:geteas simulator:listeas simulator:logseas simulator:starteas simulator:stopeas statuseas submiteas submit:cancel [SUBMISSION_ID]eas submit:listeas submit:retry [SUBMISSION_ID]eas submit:statuseas submit:view [SUBMISSION_ID]eas testflight:crashes [ID]eas testflight:feedback [ID]eas updateeas update:configureeas update:delete GROUPIDeas update:edit [GROUPID]eas update:embedded:delete IDeas update:embedded:listeas update:embedded:uploadeas update:embedded:view IDeas update:insights GROUPIDeas update:listeas update:republisheas update:revert-update-rollouteas update:roll-back-to-embeddedeas update:rollback [GROUPID]eas update:view GROUPIDeas uploadeas webhook:createeas webhook:delete [ID]eas webhook:listeas webhook:updateeas webhook:view IDeas whoamieas worker:aliaseas worker:alias:delete [ALIAS_NAME]eas worker:delete [DEPLOYMENT_ID]eas deploy [options]eas workflow:canceleas workflow:create [NAME]eas workflow:insightseas workflow:insights:maestroeas workflow:logs [ID]eas workflow:run FILEeas workflow:runseas workflow:status [WORKFLOW_RUN_ID]eas workflow:validate PATHeas workflow:view [ID]view the audit logs for an account
USAGE
$ eas account:audit [ACCOUNT_NAME] [--limit <value>] [--after <value>] [--json] [--non-interactive]
ARGUMENTS
[ACCOUNT_NAME] Account name to view audit logs for. If not provided, the account will be selected interactively (or
defaults to the only account if there is just one)
FLAGS
--after=<value> Cursor for pagination. Use the endCursor from a previous query to fetch the next page.
--json Enable JSON output, non-JSON messages will be printed to stderr.
--limit=<value> 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.
DESCRIPTION
view the audit logs for an account
See code: packages/eas-cli/src/commands/account/audit.ts
log in with your Expo account
USAGE
$ eas account:login [--non-interactive] [--match <value> [--resume <value> [--device | -s]]] [-b]
FLAGS
-b, --[no-]browser Log in with your browser (default; use --no-browser for CLI-based login)
-s, --sso Log in with SSO
--device Log in using a code in a browser on any device
--match=<value> Submit the number the user sees in their browser
--non-interactive Run the command in non-interactive mode.
--resume=<value> Resume a saved device login using its request ID (one command at a time)
DESCRIPTION
log in with your Expo account
ALIASES
$ eas login
EXAMPLES
$ eas login --device
$ eas login --device --non-interactive
$ eas login --device --non-interactive --resume REQUEST_ID --match NUMBER_FROM_USER
See code: packages/eas-cli/src/commands/account/login.ts
log out
USAGE
$ eas account:logout
DESCRIPTION
log out
ALIASES
$ eas logout
See code: packages/eas-cli/src/commands/account/logout.ts
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
See code: packages/eas-cli/src/commands/account/usage.ts
show the username you are logged in as
USAGE
$ eas account:view
DESCRIPTION
show the username you are logged in as
ALIASES
$ eas whoami
See code: packages/eas-cli/src/commands/account/view.ts
display or change analytics settings (disabling analytics also disables experiments)
USAGE
$ eas analytics [STATUS]
DESCRIPTION
display or change analytics settings (disabling analytics also disables experiments)
See code: packages/eas-cli/src/commands/analytics.ts
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
See code: @oclif/plugin-autocomplete
manage billing for an account with an active paid EAS plan
USAGE
$ eas billing:manage [-a <value>] [--no-open] [--json] [--non-interactive]
FLAGS
-a, --account=<value> Account with an active paid plan to manage. Defaults to your account when only one is eligible.
--json Enable JSON output, non-JSON messages will be printed to stderr. Implies --non-interactive.
--no-open Only print the customer portal URL instead of opening it in a browser
--non-interactive Run the command in non-interactive mode.
DESCRIPTION
manage billing for an account with an active paid EAS plan
See code: packages/eas-cli/src/commands/billing/manage.ts
subscribe a Free account to an EAS plan
USAGE
$ eas billing:subscribe [PLAN] [-a <value>] [--no-open] [--json] [--non-interactive]
ARGUMENTS
[PLAN] (starter|production) plan to subscribe to. Required in non-interactive mode.
FLAGS
-a, --account=<value> Account to subscribe. Defaults to your account when you only have one.
--json Enable JSON output, non-JSON messages will be printed to stderr. Implies --non-interactive.
--no-open Only print the checkout page URL instead of opening it in a browser
--non-interactive Run the command in non-interactive mode.
DESCRIPTION
subscribe a Free account to an EAS plan
See code: packages/eas-cli/src/commands/billing/subscribe.ts
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. Implies --non-interactive.
--non-interactive Run the command in non-interactive mode.
DESCRIPTION
create a branch
See code: packages/eas-cli/src/commands/branch/create.ts
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. Implies --non-interactive.
--non-interactive Run the command in non-interactive mode.
DESCRIPTION
delete a branch
See code: packages/eas-cli/src/commands/branch/delete.ts
list all branches
USAGE
$ eas branch:list [--offset <value>] [--limit <value>] [--json] [--non-interactive]
FLAGS
--json Enable JSON output, non-JSON messages will be printed to stderr. Implies --non-interactive.
--limit=<value> 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=<value> Start queries from specified index. Use for paginating results. Defaults to 0.
DESCRIPTION
list all branches
See code: packages/eas-cli/src/commands/branch/list.ts
rename a branch
USAGE
$ eas branch:rename [--from <value>] [--to <value>] [--json] [--non-interactive]
FLAGS
--from=<value> current name of the branch.
--json Enable JSON output, non-JSON messages will be printed to stderr. Implies --non-interactive.
--non-interactive Run the command in non-interactive mode.
--to=<value> new name of the branch.
DESCRIPTION
rename a branch
See code: packages/eas-cli/src/commands/branch/rename.ts
view a branch
USAGE
$ eas branch:view [NAME] [--offset <value>] [--limit <value>] [--json] [--non-interactive]
ARGUMENTS
[NAME] Name of the branch to view
FLAGS
--json Enable JSON output, non-JSON messages will be printed to stderr. Implies --non-interactive.
--limit=<value> 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=<value> Start queries from specified index. Use for paginating results. Defaults to 0.
DESCRIPTION
view a branch
See code: packages/eas-cli/src/commands/branch/view.ts
transition from the terminal to the web browser to view and interact with your project on https://expo.dev
USAGE
$ eas browse [PAGE] [-n] [--json] [--non-interactive]
ARGUMENTS
[PAGE] (build|builds|submit|submissions|update|updates|workflow|workflows|cicd|hosting|deployments|credentials|env|in
sights|observe|settings) Project subpage to open. Defaults to the project dashboard.
FLAGS
-n, --no-browser Print the URL instead of opening it in a web browser
--json Enable JSON output, non-JSON messages will be printed to stderr. Implies --non-interactive.
--non-interactive Run the command in non-interactive mode.
DESCRIPTION
transition from the terminal to the web browser to view and interact with your project on https://expo.dev
See code: packages/eas-cli/src/commands/browse.ts
start a build
USAGE
$ eas build [-p android|ios|all] [-e PROFILE_NAME] [--local] [--output <value>] [--wait] [--clear-cache]
[-s | --auto-submit-with-profile PROFILE_NAME] [--what-to-test <value>] [-m <value>] [--build-logger-level
trace|debug|info|warn|error|fatal] [--freeze-credentials] [--refresh-ad-hoc-provisioning-profile] [--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=<value> A short message describing the build
-p, --platform=<option> <options: 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=<option> The level of logs to output during the build process. Defaults to "info".
<options: trace|debug|info|warn|error|fatal>
--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. Implies
--non-interactive.
--local Run build locally [experimental]
--non-interactive Run the command in non-interactive mode.
--output=<value> Output path for local build
--refresh-ad-hoc-provisioning-profile Refresh managed ad-hoc provisioning profiles from App Store Connect
before gathering build credentials
--verbose-logs Use verbose logs for the build process
--[no-]wait Wait for build(s) to complete
--what-to-test=<value> 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
See code: packages/eas-cli/src/commands/build/index.ts
cancel a build
USAGE
$ eas build:cancel [BUILD_ID] [--non-interactive] [-p android|ios|all] [-e PROFILE_NAME]
FLAGS
-e, --profile=PROFILE_NAME Filter builds by build profile if build ID is not provided
-p, --platform=<option> Filter builds by the platform if build ID is not provided
<options: android|ios|all>
--non-interactive Run the command in non-interactive mode.
DESCRIPTION
cancel a build
See code: packages/eas-cli/src/commands/build/cancel.ts
configure the project to support EAS Build
USAGE
$ eas build:configure [-p android|ios|all]
FLAGS
-p, --platform=<option> Platform to configure
<options: android|ios|all>
DESCRIPTION
configure the project to support EAS Build
See code: packages/eas-cli/src/commands/build/configure.ts
delete a build
USAGE
$ eas build:delete [BUILD_ID] [--non-interactive] [-p android|ios|all] [-e PROFILE_NAME]
FLAGS
-e, --profile=PROFILE_NAME Filter builds by build profile if build ID is not provided
-p, --platform=<option> Filter builds by the platform if build ID is not provided
<options: android|ios|all>
--non-interactive Run the command in non-interactive mode.
DESCRIPTION
delete a build
See code: packages/eas-cli/src/commands/build/delete.ts
run dev client simulator/emulator build with matching fingerprint or create a new one
USAGE
$ eas build:dev [-p ios|android] [-e PROFILE_NAME] [--skip-build-if-not-found] [--skip-bundler] [--simulator
<value>]
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=<option> <options: ios|android>
--simulator=<value> iOS simulator name or UDID to install and run the development build on. If no value is
provided, you will be prompted to select a simulator.
--skip-build-if-not-found Skip build if no successful build with matching fingerprint is found.
--skip-bundler Install and run the development build without starting the bundler server.
DESCRIPTION
run dev client simulator/emulator build with matching fingerprint or create a new one
See code: packages/eas-cli/src/commands/build/dev.ts
download a simulator/emulator build by build ID or fingerprint hash
USAGE
$ eas build:download [--build-id <value> | --fingerprint <value> | -p ios|android | --dev-client]
[--all-artifacts] [--json] [--non-interactive]
FLAGS
-p, --platform=<option> <options: ios|android>
--all-artifacts Download all available build artifacts (build artifacts archive, Xcode logs, etc.) in
addition to the application archive. Without this flag, only the application archive is
downloaded and the command errors if it is missing.
--build-id=<value> ID of the build to download. Mutually exclusive with --fingerprint, --platform, and
--dev-client; the platform is derived from the build itself.
--[no-]dev-client Filter only dev-client builds.
--fingerprint=<value> Fingerprint hash of the build to download
--json Enable JSON output, non-JSON messages will be printed to stderr. Implies --non-interactive.
--non-interactive Run the command in non-interactive mode.
DESCRIPTION
download a simulator/emulator build by build ID or fingerprint hash
See code: packages/eas-cli/src/commands/build/download.ts
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 OUTPUT_DIRECTORY [-e PROFILE_NAME]
[--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=<option>
(required)
<options: android|ios>
-s, --stage=<option>
(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
<options: archive|pre-build|post-build>
-v, --verbose
--force
Delete OUTPUT_DIRECTORY if it already exists.
DESCRIPTION
inspect the state of the project at specific build stages, useful for troubleshooting
See code: packages/eas-cli/src/commands/build/inspect.ts
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 <value>] [--app-version <value>] [--app-build-version <value>] [--sdk-version <value>] [--runtime-version
<value>] [--app-identifier <value>] [-e <value>] [--git-commit-hash <value>] [--fingerprint-hash <value>] [--offset
<value>] [--limit <value>] [--json] [--non-interactive] [--simulator]
FLAGS
-e, --build-profile=<value> Filter only builds created with the specified build profile
-p, --platform=<option> <options: android|ios|all>
--app-build-version=<value> Filter only builds created with the specified app build version
--app-identifier=<value> Filter only builds created with the specified app identifier
--app-version=<value> Filter only builds created with the specified main app version
--channel=<value>
--distribution=<option> Filter only builds with the specified distribution type
<options: store|internal|simulator>
--fingerprint-hash=<value> Filter only builds with the specified fingerprint hash
--git-commit-hash=<value> Filter only builds created with the specified git commit hash
--json Enable JSON output, non-JSON messages will be printed to stderr. Implies
--non-interactive.
--limit=<value> 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=<value> Start queries from specified index. Use for paginating results. Defaults to 0.
--runtime-version=<value> Filter only builds created with the specified runtime version
--sdk-version=<value> 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=<option> Filter only builds with the specified status
<options: new|in-queue|in-progress|pending-cancel|errored|finished|canceled>
DESCRIPTION
list all builds for your project
See code: packages/eas-cli/src/commands/build/list.ts
re-sign a build archive
USAGE
$ eas build:resign [-p android|ios] [-e PROFILE_NAME] [--source-profile PROFILE_NAME] [--wait] [--id <value>]
[--offset <value>] [--limit <value>] [--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=<option> <options: android|ios>
--id=<value> ID of the build to re-sign.
--json Enable JSON output, non-JSON messages will be printed to stderr. Implies
--non-interactive.
--limit=<value> 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=<value> 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
See code: packages/eas-cli/src/commands/build/resign.ts
run simulator/emulator builds from eas-cli
USAGE
$ eas build:run [--latest | --id <value> | --path <value> | --url <value>] [-p android|ios] [-e PROFILE_NAME]
[--simulator <value>] [--offset <value>] [--limit <value>]
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=<option> <options: android|ios>
--id=<value> ID of the simulator/emulator build to run
--latest Run the latest simulator/emulator build for specified platform
--limit=<value> The number of items to fetch each query. Defaults to 50 and is capped at 100.
--offset=<value> Start queries from specified index. Use for paginating results. Defaults to 0.
--path=<value> Path to the simulator/emulator build archive or app
--simulator=<value> iOS simulator name or UDID to install and run the build on. If no value is provided, you
will be prompted to select a simulator.
--url=<value> Simulator/Emulator build archive url
DESCRIPTION
run simulator/emulator builds from eas-cli
See code: packages/eas-cli/src/commands/build/run.ts
submit app binary to App Store and/or Play Store
USAGE
$ eas build:submit [-p android|ios|all] [-e <value>] [--latest | --id <value> | --path <value> | --url <value>]
[--what-to-test <value>] [--verbose] [--wait] [--verbose-fastlane] [-g <value>...] [--non-interactive]
[--auto-testflight-setup]
FLAGS
-e, --profile=<value> Name of the submit profile from eas.json. Defaults to "production" if defined in
eas.json.
-g, --groups=<value>... 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=<option> <options: android|ios|all>
--[no-]auto-testflight-setup Set up an internal TestFlight group for the app (iOS only)
--id=<value> ID of the build to submit