EAS Release Skill
Build, submit, and OTA steps with guardrails - a cookbook-style Agent Skill for shipping Expo SDK 57 binaries and updates without unsafe automation.
Search across all documentation pages
Build, submit, and OTA steps with guardrails - a cookbook-style Agent Skill for shipping Expo SDK 57 binaries and updates without unsafe automation.
Produces an executable release plan: eas.json profile selection, cloud build commands, store submit steps, and optional eas update - each gated by runtimeVersion, credentials, and change classification.
eas.json profile--auto-submit or CI non-interactive submitrelease/* branches| Input | Why |
|---|---|
eas.json | Profiles, env, submit targets |
app.config.ts | version, runtimeVersion, bundle IDs |
| Change list | JS-only vs native (modules, permissions, plugins) |
| Target channel/branch | production, preview, etc. |
Last known-good updateId | Rollback anchor for OTA path |
| Platform scope | ios, android, all |
--non-interactive CI variantseas build:list, eas submit, eas channel:view, npx expo-doctoreas build. New expo-* module, permission, config plugin, or expo-build-properties edit is never OTA-only.runtimeVersion must match live store binaries for OTA - see Runtime Version Policy..env files (Build Profiles & Flavors).npx expo-doctor after any skill-generated dependency or plugin change.Quick-reference recipe card - copy-paste ready.
# 1. Classify change
npx expo-doctor
git diff --name-only HEAD~1 # scan package.json, app.config.ts, plugins/
# 2. Cloud build (store-shaped)
eas build --profile production --platform all --non-interactive
# 3. Submit latest artifacts
eas submit --platform ios --latest --non-interactive
eas submit --platform android --latest --non-interactive
# 4. JS-only hotfix (same runtimeVersion)
eas update --channel production --message "fix: checkout validation copy"
# 5. Verify
eas channel:view production
eas build:list --limit 3// eas.json (excerpt - SDK 57)
{
"build": {
"development": {
"developmentClient": true,
"distribution": "internal"
},
"preview": {
"distribution": "internal",
"channel": "preview"
},
"production": {
"channel": "production",
"autoIncrement": true
}
},
"submit": {
"production": {
"ios": { "ascAppId": "1234567890" },
"android": {
"serviceAccountKeyPath": "./secrets/play-service-account.json",
"track": "internal"
}
}
}
}When to reach for this skill:
npx expo-doctor| Signal | Path |
|---|---|
Only .tsx, hooks, copy | OTA candidate |
package.json new expo-camera | Build required |
app.config.ts plugin added | Build required |
| Hermes / RN version bump | Build required + runtimeVersion review |
eas build --profile production --platform all
# CI one-shot:
eas build --profile production --platform ios --auto-submit --non-interactivedevelopmentClient: true → dev client, not store - EAS Build Basicseas submit --platform ios --latest
eas submit --platform android --latesttrack: "internal" in eas.json - promote in Play Console latereas update --channel production --message "fix: cart total rounding"
eas channel:view productionupdateId in release ticket - Rollback Runbooknpx expo-doctor
eas build:list --limit 1
eas update:list --branch production --limit 3Invoke EAS Release skill. SDK 57.
Change: fixed typo in Settings screen - no package.json diff.
Give OTA commands for production channel. Include rollback note with last good updateId f7a2.Invoke EAS Release skill.
Added expo-notifications + config plugin in app.config.ts.
Produce full build + submit checklist for ios and android production profiles.
Flag anything that blocks OTA.Invoke EAS Release skill for CI.
Need non-interactive eas build --auto-submit on merge to release/2.4.
List required EAS secrets and eas.json submit block only. ┌─────────────────┐
│ Change landed │
└────────┬────────┘
│
┌────────▼────────┐
│ expo-doctor OK? │──no──► fix config/deps first
└────────┬────────┘
│ yes
┌────────▼────────────────┐
│ Native-impacting change? │
└────────┬────────────────┘
yes │ │ no
┌──────────────┘ └──────────────┐
▼ ▼
eas build + submit runtimeVersion
(new binary) matches store?
│
yes ──► eas update
no ──► eas build (bump runtimeVersion)Technically yes via track: "production" - guardrail: default to internal until QA signs off. Skill should warn when production track is requested.
No - it uploads the binary. TestFlight distribution and App Review are still console steps unless your workflow promotes separately.
Stop. Skill output should not include submit/OTA until doctor passes. Fix skew with npx expo install --fix per SDK Upgrade Skill.
Stack versions: This page was written for React 19.2.3, React Native 0.86.0, and Expo SDK 57 (
expo~57.0.4).
Reviewed by Chris St. John·Last updated Jul 16, 2026