GuidesExpo Application ServicesAPI Reference
ArchiveExpo SnackDiscordForumsChangelog

Build schema for eas.json

A reference of configuration options for EAS Build and Submit.


eas.json is your go-to place for configuring EAS Build (and EAS Submit). It is located at the root of your project next to your package.json.

This document is a reference that outlines the schema for the "build" key in eas.json. For an explanation of how to use it, see Configuring EAS Build eas.json.

Examples

A managed project with several profiles
eas.json
{
  "build": {
    "base": {
      "node": "12.13.0",
      "yarn": "1.22.5",
      "env": {
        "EXAMPLE_ENV": "example value"
      },
      "android": {
        "image": "default",
        "env": {
          "PLATFORM": "android"
        }
      },
      "ios": {
        "image": "latest",
        "env": {
          "PLATFORM": "ios"
        }
      }
    },
    "development": {
      "extends": "base",
      "developmentClient": true,
      "env": {
        "ENVIRONMENT": "development"
      },
      "android": {
        "distribution": "internal",
        "withoutCredentials": true
      },
      "ios": {
        "simulator": true
      }
    },
    "staging": {
      "extends": "base",
      "env": {
        "ENVIRONMENT": "staging"
      },
      "distribution": "internal",
      "android": {
        "buildType": "apk"
      }
    },
    "production": {
      "extends": "base",
      "env": {
        "ENVIRONMENT": "production"
      }
    }
  }
}
A bare project with several profiles
eas.json
{
  "build": {
    "base": {
      "env": {
        "EXAMPLE_ENV": "example value"
      },
      "android": {
        "image": "ubuntu-18.04-android-30-ndk-r19c",
        "ndk": "21.4.7075529"
      },
      "ios": {
        "image": "latest",
        "node": "12.13.0",
        "yarn": "1.22.5"
      }
    },
    "development": {
      "extends": "base",
      "env": {
        "ENVIRONMENT": "staging"
      },
      "android": {
        "distribution": "internal",
        "withoutCredentials": true,
        "gradleCommand": ":app:assembleDebug"
      },
      "ios": {
        "simulator": true,
        "buildConfiguration": "Debug"
      }
    },
    "staging": {
      "extends": "base",
      "env": {
        "ENVIRONMENT": "staging"
      },
      "distribution": "internal",
      "android": {
        "gradleCommand": ":app:assembleRelease"
      }
    },
    "production": {
      "extends": "base",
      "env": {
        "ENVIRONMENT": "production"
      }
    }
  }
}

Schema

eas.json
{
  "cli": {
    "version": "SEMVER_RANGE",
    "requireCommit": boolean,
    "appVersionSource": string,
    "promptToConfigurePushNotifications": boolean,
  },
  "build": {
    "BUILD_PROFILE_NAME_1": {
      ...COMMON_OPTIONS,
      "android": {
        ...COMMON_OPTIONS,
        ...ANDROID_OPTIONS
      },
      "ios": {
        ...COMMON_OPTIONS,
        ...IOS_OPTIONS
      }
    },
    "BUILD_PROFILE_NAME_2": {},
	...
  }
}

You can specify common options both in the platform-specific configuration object or at the profile's root. The platform-specific options take precedence over globally-defined ones.

EAS Submit is also configured in eas.json. You can find the reference for the "submit" fields in Configuring EAS Submit with eas.json.

Options common to both platforms

PropertyDescription

(string) - The name of the build profile that the current one should inherit values from. This value can't be specified per platform.

(enum: local, remote) - The source of credentials used to sign the application archive.

  • local - if you want to provide your own credentials.json file. (Learn more on this here.)
  • remote - if you want to use the credentials managed by EAS (this is the default option).

(string) - Name of the release channel for the expo-updates package (Learn more about this). If you do not specify a channel, your binary will pull releases from the default channel. If you do not use expo-updates in your project then this property will have no effect. This field only applies to the Classic Update service; if you use EAS Update, use the channel field instead.

(string) - The channel is a name we can give to multiple builds to identify them easily. Learn more. This field only applies to the EAS Update service, if your project still uses Classic Updates then use the releaseChannel field instead.

(enum: store, internal) - The method of distributing your app.

  • internal - with this option you'll be able to share your build URLs with anyone, and they will be able to install the builds to their devices straight from the Expo website. When using internal, make sure the build produces an APK or IPA file. Otherwise, the shareable URL will be useless. Learn more about internal distribution.
  • store - produces builds for store uploads, your build URLs won't be shareable.

(boolean) - If set to true (defaults to false), this field expresses the intent to produce a development client build. For the build to be successful, the project must have expo-dev-client installed and configured. Note: this field is sugar for setting the iOS buildConfiguration to Debug and Android gradleCommand to :app:assembleDebug. Those fields, if provided for the same build profile, will take precedence. Learn more about custom development clients.

(enum: default, medium) - The resource class that will be used to run this build. To see mapping for default and medium resource classes for each platform, see Android-specific resource class field and iOS-specific resource class field documentation.

(string) - Optional override of the prebuild command used by EAS. For example, you can specify prebuild --template example-template to use a custom template. Note: --platform and --non-interactive will be added automatically by the build engine, so you do not need to specify them manually. Learn more about prebuild options.

(string[]) - List of paths (or patterns) where EAS Build is going to look for the build artifacts. Use applicationArchivePath for specifying the path for uploading the application archive. Build artifacts are uploaded even if the build fails. EAS Build uses the fast-glob npm package for pattern matching (see their README to learn more about the syntax you can use).

(string) - Version of Node.js.

(string) - Version of Yarn.

(string) - Deprecated: Version of expo-cli used to prebuild your app. It only affects managed projects on Expo SDK 45 and lower. For newer SDKs, EAS Build will use the versioned Expo CLI. It comes with the expo package installed in your project (learn more). You can opt out of using the versioned Expo CLI by setting the EXPO_USE_LOCAL_CLI=0 env variable in the build profile.

(object) - Environment variables that should be set during the build process (should only be used for values that you would commit to your git repository, i.e. not passwords or secrets).

(boolean) - Controls how EAS CLI bumps your application build version. Defaults to false.

When enabled, for iOS, bumps the last component of expo.ios.buildNumber (e.g. 1.2.3.39 -> 1.2.3.40) and for Android, bumps expo.android.versionCode (e.g. 3 -> 4).

(object) - Cache configuration. This feature is intended for caching values that require a lot of computation, e.g. compilation results (both final binaries and any intermediate files), but it wouldn't work well for node_modules because the cache is not local to the machine, so the download speed is similar to downloading from the npm registry.

(boolean) - Disables caching. Defaults to false.

(string) - Cache key. You can invalidate the cache by changing this value.

(array) - List of the paths that will be saved after a successful build and restored at the beginning of the next one. Both absolute and relative paths are supported, where relative paths are resolved from the directory with eas.json.

(boolean) - Specifies whether to cache the recommended set of files, currently only Podfile.lock is cached by default for iOS build and nothing is cached for Android. Defaults to true.

Android-specific options

PropertyDescription

(boolean) - When set to true, EAS CLI won't require you to configure credentials when building the app. This comes in handy when you want to build debug binaries and the debug keystore is checked in to the repository. The default is false.

(string) - Image with build environment. Learn more about it here.

(enum: default, medium, large) - The Android-specific resource class that will be used to run this build. Learn more

  • default maps to medium

This can change over time. To ensure you stay on the same configuration even when we change our defaults, use the specific resource class name.

(string) - Version of Android NDK.

(boolean | "version" | "versionCode") - Controls how EAS CLI bumps your application build version. Defaults to false.

Allowed values:

  • "version" - bumps the patch of expo.version (e.g. 1.2.3 -> 1.2.4).
  • "versionCode" (or true) - bumps expo.android.versionCode (e.g. 3 -> 4).
  • false - versions won't be bumped automatically (default)

Based on the value of "cli.appVersionSource" option in eas.json, the values will be updated locally in your project or on EAS servers. Learn more

(enum: app-bundle, apk) - Type of the artifact you want to build. It controls what Gradle task will be used, can be overridden by gradleCommand or developmentClient: true option.

  • app-bundle - :app:bundleRelease
  • apk - :app:assembleRelease

(string) - Gradle task that will be used to build your project, e.g. :app:assembleDebug to build a debug binary. It's not recommended unless you need to run a task that buildType does not support, it takes priority over buildType and developmentClient.

(string) - Path (or pattern) where EAS Build is going to look for the application archive. EAS Build uses the fast-glob npm package for pattern matching (see their README to learn more about the syntax you can use). The default value is android/app/build/outputs/**/*.{apk,aab}.

iOS-specific options

PropertyDescription

(boolean) - If set to true, creates build for simulator. Defaults to false

(enum: universal, adhoc) - Provisioning method used for "distribution": "internal" when you have an Apple account with Apple Developer Enterprise Program membership. You can choose if you want to use adhoc or universal provisioning. The latter is recommended as it does not require you to register each individual device. If you don't provide this option and you still authenticate with an enterprise team, you'll be prompted which provisioning method to use.

(boolean | "version" | "buildNumber") - Controls how EAS CLI bumps your application build version. Defaults to false.

Allowed values:

  • "version" - bumps the patch of expo.version (e.g. 1.2.3 -> 1.2.4).
  • "buildNumber" (or true) - bumps the last component of expo.ios.buildNumber (e.g. 1.2.3.39 -> 1.2.3.40).
  • false - versions won't be bumped automatically (default)

Based on the value of "cli.appVersionSource" option in eas.json, the values will be updated locally in your project or on EAS servers. Learn more

(string) - Image with build environment. Learn more about it here.

(enum: default, medium, m-medium, intel-medium) - The iOS-specific resource class that will be used to run this build. Learn more

  • For SDK version >= 45 or React Native version >= 0.71.0 default maps to m-medium, otherwise it maps to intel-medium
  • For SDK version >= 45 or React Native version >= 0.71.0 medium maps to m-medium, otherwise it maps to intel-medium

This can change over time. To ensure you stay on the same configuration even when we change our defaults, use the specific resource class name.

(string) - Version of bundler.

(string) - Version of fastlane.

(string) - Version of CocoaPods.

(string) - Xcode project's scheme.

  • managed project: does not have any effect
  • bare project
    • If your project has multiple schemes, you should set this value.
    • If the project has only one scheme, it will be detected automatically.
    • If multiple schemes exist and this value is not set, EAS CLI will prompt you to select one of them.

(string) - Xcode project's Build Configuration.

  • managed project: "Release" or "Debug", defaults to "Release"
  • bare project: defaults to the value specified in the scheme

It takes priority over developmentClient field.

(string) - Path (or pattern) where EAS Build is going to look for the application archive. EAS Build uses the fast-glob npm package for pattern matching (see their README to learn more about the syntax you can use). You should modify that path only if you are using a custom Gymfile. The default is ios/build/Build/Products/*-iphonesimulator/*.app when building for simulator and ios/build/*.ipa in other cases.