> ## 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 Auto Sync

> Connect EAS to Revyl and auto-import every new build

Connect your Expo project once and every new EAS build lands in Revyl automatically. No uploads, no manual steps. Every passing build is ready to test the moment EAS finishes it.

## How It Works

1. You give Revyl an **Expo access token** (stored encrypted)
2. You link an **EAS project** to one or more Revyl apps (one Android, one iOS, or both)
3. Revyl **automatically registers a webhook** on your EAS project using the token
4. EAS fires the webhook to Revyl on every completed build
5. Revyl filters the build, downloads the artifact, and creates a new Build inside the linked app

Builds auto-synced this way get tagged with `source: expo` and an auto-generated version like `expo-1.2.0-ios-a1b2c3d4`. Native changes get a `-native` suffix so you can tell at a glance what changed.

## Requirements

<Steps>
  <Step title="Expo access token">
    Create a **Robot User access token** at [expo.dev/settings/access-tokens](https://expo.dev/settings/access-tokens). Robot users are the [recommended pattern](https://docs.expo.dev/accounts/programmatic-access/) for CI/integration tokens. Personal tokens work but aren't ideal.

    Read access is enough to browse projects and import builds manually. The Robot User needs **Developer role or higher** only when you enable auto-sync, because Revyl must create a webhook.
  </Step>

  <Step title="EAS project">
    Choose from the EAS projects visible to your token. If your project isn't listed, use **Enter project ID**. Grab your project's UUID from the Expo Dashboard or `app.json`. It must be a valid UUID. The human-readable `@owner/slug` form is not accepted.
  </Step>

  <Step title="Simulator/emulator builds">
    Revyl runs on cloud simulators and emulators — your EAS profile must produce compatible binaries. See [Artifact Requirements](/builds/artifact-requirements) for the full rules.

    * **iOS**: `"simulator": true` on the profile in `eas.json`
    * **Android**: one debuggable `.apk` (not `.aab`, `.apks`, or split APK archives) whose native libraries include `x86_64` or `arm64-v8a`
  </Step>
</Steps>

## Connecting

### From Integrations

1. Go to **Integrations > Expo**
2. Paste your **Robot User access token** and save
3. Click **Add project** and choose an EAS project from the list
4. Expand the EAS project, turn on **Auto-sync builds**, and choose the destination Revyl Android and/or iOS app
5. Click **Save changes**. Revyl registers the webhook on your EAS project in the background.

If your EAS project isn't listed, choose **Enter project ID** and enter its UUID from the Expo Dashboard or `app.json`.

### From the App Creation Flow

When creating an app, click **Import from Expo** instead of uploading a file. The flow prompts for the token if you don't have one, then shows a project picker. Revyl auto-selects the latest compatible build (non-production, non-expired, matching platform) and imports it as your first build. Future builds sync only if you explicitly enable auto-sync and choose the destination Revyl app.

## What Gets Synced

On each EAS `BUILD` event with `status=finished`, Revyl:

1. Verifies the webhook signature (HMAC-SHA1 `expo-signature`)
2. Matches the build to an org via the signature
3. Filters out:
   * **Production profiles** (filtered by name on Android)
   * **Expired artifact URLs**
   * **iOS builds without `"simulator": true`**
   * **`.aab` Android builds**
4. Downloads the artifact using your Expo token
5. Creates a new build in the linked Revyl app, comparing its `fingerprintHash` to the previous build to detect native changes

## Gotchas

* **One EAS project maps to one app per platform.** Connecting the same project to a new app reassigns the binding; the old app stops auto-syncing.
* **Production profiles are filtered on purpose.** Revyl doesn't import production builds via auto-sync. Upload them manually if you need to test production artifacts.
* **If webhook registration fails**, it's usually because the Robot User has read-only access. The Robot needs Developer role or higher on the EAS project.
* **If builds aren't showing up**, check: missing `simulator: true` on iOS, `.aab` instead of `.apk` on Android, or expired artifact URL.
* **Auto-sync stops if the token is removed.** Disabling auto-sync also deletes the webhook from EAS automatically.

## Related

* [Apps](/builds/index) - create apps and manage builds
* [Expo Build Guide](/builds/frameworks/expo) - configuring `eas.json` for Revyl
* [Integrations overview](/integrations/index)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.