> ## Documentation Index
> Fetch the complete documentation index at: https://docs.revyl.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Expo Builds

> Create iOS and Android for Expo apps

Create dev and preview builds for your Expo React Native app.

## Build Guidance

To use the [Dev Loop](../../develop/dev-loop-overview), a build is required **only on native code changes** (new native modules, Podfile/Gradle changes, build configuration). JS/TS changes hot reload via Metro — see [Dev Loop: Hot reload and rebuild configuration](../../develop/dev-loop-overview#hot-reload-and-rebuild-configuration) for the full breakdown.

## Build via Revyl CLI

### Prerequisites

* Node.js 18+
* Expo CLI (`npx expo`)
* EAS CLI (`npx eas-cli`) for local or cloud builds
* Revyl CLI installed and authenticated (`revyl auth login`)

### Setup

Initialize the project using the Revyl CLI:

```bash theme={null}
revyl init
```

This creates iOS and Android Development and Preview apps, generates the necessary Revyl configuration files, runs a build, and uploads it to Revyl. See [Types of Builds](/builds#types-of-builds) for more information.

Development builds power the dev loop. Preview builds are for testing and starting sessions when the Metro server isn't needed.

### Run Build

Run a build using:
`revyl build --platform [ios|android|<config-key>]`

Platform config keys are automatically generated and defined in the `.revyl/config.yaml` file. See the [Configuration](/cli/command-reference#section-reference) page for more details.

This command automatically builds and uploads the app to Revyl, where you can use it to start sessions.

## Advanced Configuration

When you run `revyl init`, Revyl makes a best-effort guess at your configuration. This section covers configuration in more detail.

### eas.json Setup

Your `eas.json` needs at least 2 profiles, one that includes the development client and another that does not. See the following `eas.json` file as reference:

```json theme={null}
{
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal",
      "ios": {
        "simulator": true
      },
      "android": {
        "buildType": "apk"
      }
    },
    "preview": {
      "distribution": "internal",
      "ios": {
        "simulator": true
      },
      "android": {
        "buildType": "apk"
      }
    }
  }
}
```

Note that the iOS simulator is enabled for both profiles, and `developmentClient` is set to `true` only for the development profile.

### Build Commands and Hot Reload Setup

`revyl init` creates a `.revyl/config.yaml` file in the root of your project, which holds the Revyl CLI configuration. This includes the build commands used by `revyl build` and the hot reload settings used by `revyl dev`.

Configure these build settings using the [Configuration](/cli/command-reference) page.

Expo dev-client hot reload needs a URL scheme baked into the native dev build. This is normally set as part of `revyl init`. The scheme is the custom URL prefix for your app, such as `myapp-dev://`. Revyl uses that scheme to open the Expo dev client on the cloud device and connect it to Metro.

If you use `app.json`, set `expo.scheme` before creating the dev build:

```json theme={null}
{
  "expo": {
    "scheme": "myapp-dev"
  }
}
```

## Troubleshooting

<AccordionGroup>
  <Accordion title="Build fails or times out">
    * Try running the build in verbose mode: `revyl build --platform [ios|android|<config-key>] --verbose`
    * Make sure you're logged into EAS
    * Check EAS build credits
    * Verify `package.json` dependencies
    * Review logs in EAS dashboard
    * Validate `eas.json` syntax
  </Accordion>

  <Accordion title="Download links expired">
    * Artifacts expire after some time
    * Re-run build for fresh links
    * Download immediately after build
  </Accordion>

  <Accordion title="iOS or Android APK app won't install">
    * For iOS, ensure `simulator: true` is set in `eas.json`. For Android, ensure the profile builds an `apk`, not an `aab`.
  </Accordion>
</AccordionGroup>

## Resources

* [EAS Build Docs](https://docs.expo.dev/build/introduction/)
* [EAS Configuration](https://docs.expo.dev/build/eas-json/)
* [Development Builds](https://docs.expo.dev/development/introduction/)
