EAS Build and Deployment
Generated EAS build profiles and the deployment controls your team must configure.
Expojet generates EAS (Expo Application Services) development, preview, and production build profiles for Expo SDK 57 and SDK 58 applications, in standalone projects and full-stack monorepos. These profiles describe how to build and distribute the app; they are not a deployment certification or a security review.
What is EAS?
Expo Application Services (EAS) is a suite of cloud services tailored for Expo and React Native applications:
- EAS Build: Cloud-hosted builds for iOS and Android with managed credentials and environment secrets.
- EAS Submit: Automated app store submissions to Apple App Store Connect and Google Play Console.
- EAS Update: Instant over-the-air (OTA) bug fixes and runtime updates deployed to specific channels.
- EAS Metadata: Automated App Store metadata, screenshots, and localized copy synchronization.
Configuration (eas.json)
When --eas is enabled (default in interactive mode), Expojet generates the following eas.json:
{
"$schema": "https://json.schemastore.org/eas-json",
"cli": {
"version": ">= 16.0.0",
"appVersionSource": "remote"
},
"build": {
"development": {
"developmentClient": true,
"distribution": "internal",
"ios": {
"simulator": true
}
},
"preview": {
"distribution": "internal",
"channel": "preview"
},
"production": {
"autoIncrement": true,
"channel": "production"
}
},
"submit": {
"production": {}
}
}Build Profiles Explained
| Profile | Target | Distribution | Channels | Purpose |
|---|---|---|---|---|
development | Debug build | Internal (Simulator/Device) | — | Running development client (expo-dev-client) locally and on simulators |
preview | Release-like build | Internal distribution | preview | Team testing, QA verification, PR branch previews, and internal testing |
production | Store-ready bundle | App Store / Play Store | production | Production release with remote version increment and signed credentials |
Simulator Builds
The development profile is pre-configured with "ios": { "simulator": true }. This enables building an .app binary that runs directly on the macOS iOS Simulator without requiring an Apple Developer signing certificate.
# Build for iOS Simulator locally or on EAS
npx eas build --profile development --platform iosMonorepo Placement
In full-stack monorepos (monorepo or monorepo-web), eas.json is generated directly inside the mobile workspace:
my-monorepo/
├── apps/
│ ├── api/
│ ├── mobile/
│ │ ├── eas.json <-- Scoped to mobile workspace
│ │ ├── app.json
│ │ └── package.json
│ └── web/
├── packages/
└── package.jsonWhen building a monorepo workspace with EAS CLI, EAS automatically detects the root package.json and runs workspace dependency installation before bundling apps/mobile.
Deployment controls you must configure
The generated production profile names a build configuration, not an approval boundary. Before shipping, your team must decide:
- Credential access: choose who can manage signing credentials and production environment values. Set appropriate Expo organization roles and limit access to CI tokens; never share a personal account login.
- Update permissions: decide who may publish production updates and who approves them. Configure access restrictions in your Expo account and approval gates in your release process; a
productionchannel name alone does not enforce them. - Signing: configure the app-store signing credentials needed for your builds. If you use EAS Update, decide whether to enable update code signing and protect its private key separately. Expojet does not provision update-signing keys.
- Rollback: retain known-good builds and updates, assign responsibility for recovery, and rehearse the procedure. EAS Update rollbacks apply to compatible updates; native changes may require a new store build.
The generated profiles include preview and production channel names. They do not complete EAS Update setup, configure account permissions, or install a release-approval workflow. Linking a project and building it do not replace those decisions.
Common Workflows
1. Linking EAS Project
Before triggering cloud builds, initialize your Expo project link:
# Log in to your Expo account
npx eas login
# Initialize EAS project ID
npx eas project:initThis sets the extra.eas.projectId field in app.json.
2. Building Previews for QA
Generate an installable APK or iOS internal distribution build:
npx eas build --profile preview --platform allEAS generates shareable QR codes and install links for team members.
3. Deploying Production Builds
# Build for store submission
npx eas build --profile production --platform all
# Automatically submit to stores upon build completion
npx eas build --profile production --platform all --auto-submitDoctor Diagnostics
Expojet checks local EAS configuration, not account permissions, signing-key access, or deployment approval. Run:
node packages/cli/dist/cli.js doctorWhen features.eas is enabled in expojet.jsonc, the doctor check validates:
eas.jsonis present in the mobile root (.orapps/mobile/).- Valid JSON syntax.
- Presence of
development,preview, andproductionbuild profiles. - Presence of
ios.bundleIdentifierandandroid.packagein the app configuration.
A passing result does not verify every EAS schema option or establish that the application is ready for production deployment.