Revyl Documentation

Integrations

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.

Set up with an agent

Paste one prompt and your coding agent does the rest.

Setup prompt

Turn on Expo auto sync, so each new EAS build of this app reaches Revyl.

Read https://docs.revyl.com/integrations/expo.md and follow it. It's the current Revyl guide for this, so prefer it over anything you remember about Revyl.

I'll create the Expo robot token, save it in Revyl, and turn on auto-sync for the EAS project under Integrations > Expo myself. Sync a dedicated EAS profile that builds for the iOS simulator (`simulator: true`) and a debuggable `.apk` on Android, not the profile you ship to the stores.

You're done when a new EAS build of the app appears in Revyl.

Ask me before anything that needs my login or approval.

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

Auto-synced builds are recorded with the source expo_auto_sync, shown as Expo auto-sync in the dashboard, and get a version like expo-1.2.0-ios-a1b2c3d4. The first sync has no suffix. When EAS reports a fingerprint, later syncs from the same build profile end in -native if native code changed or -js if only JavaScript did, so you can tell at a glance what changed.

Auto-sync lands each platform's builds on the branch you choose for it, or on the app's default branch when you leave it at Default branch. A build you import yourself from Builds > Upload build > Expo / EAS lands on the branch you pick under Branch, or on the app's default branch. Expo imports don't pin the branch. If the EAS build is already on the branch you chose, Revyl reuses it. Importing it onto another branch creates a separate build there; if its version is taken, the new build's version gets a branch ID suffix. See Build branches.

Requirements

Expo access token

Create a Robot User access token at expo.dev/settings/access-tokens. Robot users are the recommended pattern 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.

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.

Simulator/emulator builds

Revyl runs on cloud simulators and emulators — your EAS profile must produce compatible binaries. See 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

Setup

1. Create an Expo Robot User Token

  1. Sign in to expo.dev
  2. Go to Access Tokens
  3. Click Create Token
  4. Give it a descriptive name like revyl-auto-sync
  5. To use auto-sync, make sure the Robot has Developer role or higher on the EAS project
  6. Copy the token immediately (it won't be shown again)

2. Configure Expo in Revyl

  1. In Revyl, 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. Under each app, set iOS branch or Android branch: Default branch follows the app's default branch at import time, or pick one of the app's branches
  6. Click Save changes

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

When you enable auto-sync, Revyl registers the webhook on your EAS project in the background. Nothing else to do.

Alternative: 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:
    • Android production profiles (profile names containing production), unless Build profiles is set to Only listed profiles, which syncs only the profiles you list
    • Expired artifact URLs
    • iOS builds without "simulator": true
    • .aab Android builds
  4. Downloads the artifact using your Expo token
  5. Creates a new build on the platform's branch in the linked Revyl app, comparing its fingerprintHash to the previous auto-synced build on that branch to detect native changes

EAS can deliver the same build more than once. A build auto-sync already imported is skipped, even when you changed the configured branch since then. A manual import is reused only when it is on the configured destination branch; importing it yourself onto another branch does not prevent auto-sync from importing it.

Managing the Integration

  • Update the token: go to Integrations > Expo, paste a new token, save. Existing builds stay; future syncs use the new token.
  • Disconnect: clear the token field and save. Revyl stops syncing and removes the webhook from EAS. Existing builds remain and can still be run against.
  • Remap a project: connecting an EAS project to a new app reassigns the platform binding. The old app stops auto-syncing. Changing or clearing a platform's app resets its branch to Default branch, because branches belong to one app.
  • Change the branch: expand the project, choose another iOS branch or Android branch, and save. Builds that already landed stay on their branch.

Gotchas

  • One EAS project maps to one app per platform. Remapping reassigns the binding.
  • Android production profiles are skipped on purpose. Set Build profiles to Only listed profiles and list them to sync them, or upload them manually.
  • If webhook registration fails, the Robot User probably has read-only access. The Robot needs Developer role or higher on the EAS project.
  • If builds aren't showing up: check simulator: true is set on your iOS profile, that you're building .apk not .aab on Android, and that the artifact URL hasn't expired.
  • Auto-sync stops if the token is removed. Disabling auto-sync also deletes the webhook from EAS automatically.

See EAS setup for the EAS profiles to configure.

  • Apps: create apps and manage builds

On this page