Publish OTA updates
Runtime version​
EOAS uses official Expo packages to resolve the runtime version of your project. It supports the fingerprint policy.
Publish an update​
To publish an update, run the following command in your Expo project:
npx eoas publish --branch <branch-name> [--nonInteractive] [--outputDir <outputDir>] [--platform <platform>] [--packageRunner <runner>] [--message <message>] [--dumpSourcemap]
This command will retrieve the expo credentials from your .expo/state.json file or an EXPO_TOKEN in your runtime environment to authenticate the request to the Expo API.
🚨EOAS publish will create a new build of your app. Do not forget to pass the necessary environment variables to the runtime environment.
Example: EXPO_TOKEN=your_token RELEASE_CHANNEL=staging npx eoas publish --branch <branch-name>.
Or with dotenv: dotenv -e .env.local -- npx eoas publish --branch <branch-name>.
Update message​
You can attach a short description to each update using the --message (or -m) flag:
npx eoas publish --branch production -m "Fix login crash on Android"
If omitted, EOAS defaults to the latest git commit message, following the same behavior as EAS Update. The message is visible in the dashboard updates table.
Package runner​
By default, EOAS uses npx to spawn Expo CLI commands (expo export, expo config). If your project uses a different package manager, you can override this.
Resolution priority:
--packageRunnerCLI flagEOAS_PACKAGE_RUNNERenvironment variablepackageManagerfield in the nearestpackage.json(e.g."packageManager": "bun@1.3.6"→bunx)- Falls back to
npx
packageManager value | Resolved runner |
|---|---|
bun@x.x.x | bunx |
pnpm@x.x.x | pnpx |
yarn@x.x.x | npx |
npm@x.x.x | npx |
# Auto-detected from package.json (zero config)
npx eoas publish --branch production
# Explicit flag
npx eoas publish --branch production --packageRunner bunx
# Via environment variable
EOAS_PACKAGE_RUNNER=bunx eoas publish --branch production
Source maps​
Pass --dumpSourcemap to emit Hermes source maps alongside the bundle in the output directory. This forwards --dump-sourcemap to the underlying expo export call.
npx eoas publish --branch production --dumpSourcemap
The source maps land next to each platform's bundle (e.g. dist/_expo/static/js/ios/*.map) and are not uploaded to the OTA server. They can be uploaded to a symbolication service like Sentry or PostHog from the same dist/ directory, guaranteeing the source maps match the bundle that was published.
CI/CD​
You can automate the process of publishing updates by integrating the npx eoas publish --nonInteractive command in your CI/CD pipeline.
However, you need to make sure that the EXPO_TOKEN is set up in your CI/CD environment.
(Do not forget the --nonInteractive flag to avoid interactive prompts)