Expo app.json Config Reference

All Expo app.json / app.config.js fields with platform scope and type.

Searchable Expo application configuration reference for app.json and app.config.js — name, slug, version, icon, splash, ios, android and web fields — with platform scope, value type and what each field controls.

What is the difference between name and slug?

name is the human-readable display name of your app, while slug is a URL-friendly identifier used by Expo and EAS to reference the project. The slug should be lowercase with hyphens and stay stable across builds.

Expo app.json configuration

Expo apps are configured by an app.json file (or a dynamic app.config.js) whose expo object drives the build, store metadata and native settings. Some fields are shared across platforms; others live under ios, android or web. This searchable reference lists the key fields with their platform scope and type so you can configure builds and submissions correctly.

How it works

Static config lives under the top-level expo key:

{
  "expo": {
    "name": "Gera Warranty",
    "slug": "gera-warranty",
    "version": "2.1.0",
    "icon": "./assets/icon.png",
    "ios": { "bundleIdentifier": "com.gera.warranty", "buildNumber": "57" },
    "android": { "package": "com.gera.warranty", "versionCode": 57 },
    "runtimeVersion": { "policy": "appVersion" }
  }
}

For dynamic values, export from app.config.js instead and read process.env. EAS uses slug plus ios.bundleIdentifier / android.package to identify and submit the app, and runtimeVersion to gate OTA updates.

Tips and notes

  • Keep slug stable; changing it points EAS at a different project.
  • Bump ios.buildNumber and android.versionCode on every store upload.
  • Use runtimeVersion so OTA updates only reach compatible native builds.
  • Set native bits via ios.infoPlist, android.permissions or config plugins.