Advanced EAS Build Pipelines
Stabilize Expo production builds with EAS profiles, cache strategy, environment controls, monorepo settings, and dashboard timing signals.
Key takeaways
- Stabilize Expo production builds with EAS profiles, cache strategy, environment controls, monorepo settings, and dashboard timing signals.
- Use this chapter as a first-pass operating checklist before changing systems, data, permissions, or customer-facing workflows.
- Validate platform-specific details against current official docs or internal policy before rollout.
EAS CLI 19.1.0 Baseline
| Change | Production impact |
|---|---|
| Node 22.13.x baseline | Pin CI and EAS Workflows runtime to Node 22 for SDK 56 projects |
| Xcode 26.4 default image | SDK 56 iOS build profiles use the Xcode 26.4 image when unspecified |
| xcodebuild and Gradle step timing | Build bottlenecks become visible in dashboard timing |
| Prebuilt Expo Modules | Enabled by default on iOS SDK 56+ to reduce clean build time |
| Prebuilt community artifacts | Common libraries such as Reanimated and Screens can build faster |
| Gradle cache | Use EAS_GRADLE_CACHE=1 for Android task output cache |
| EAS Environment variables | Centralize values across Build, Update, Workflows, and Hosting |
Build Profile Strategy
{
"build": {
"development": {
"developmentClient": true,
"distribution": "internal",
"env": { "APP_VARIANT": "development" }
},
"preview": {
"distribution": "internal",
"env": { "APP_VARIANT": "preview" }
},
"production": {
"autoIncrement": true,
"node": "22.13.0",
"env": {
"APP_VARIANT": "production",
"EAS_GRADLE_CACHE": "1"
}
}
}
}Environment Variable Operations
EAS environments provide development, preview, and production by default. Enterprise and
Production plans can use custom environments.
eas env:create --name EXPO_PUBLIC_API_URL --value https://api.example.com --environment production --visibility plaintext
eas env:pull --environment production
eas build --profile production| Visibility | Use for | Rule |
|---|---|---|
| plain text | public client values such as EXPO_PUBLIC_* | only values safe to ship in the bundle |
| sensitive | lower-risk values needed at build config resolution | reduce log exposure, but assume it may enter the app |
| secret | signing, service accounts, private keys | job-only values, not local app config |
Monorepo Optimization
- Pin the
nodefield and package manager version for SDK 56. - Treat lockfile changes as cache key changes and call them out in PRs.
- In custom builds, use explicit restore/save build cache steps.
- Do not disable prebuilt modules unless a package must build from source.
- Opt out only specific native packages with
expo.autolinking.*.buildFromSource.
Build Gate
npx expo-doctor
npx expo install --check
eas build --profile production --platform all --non-interactiveBuild release candidates from preview first, validate OTA candidates with the same runtimeVersion,
then promote to the production profile.