Skip to main content
For Expo development builds

Keep every dev build.

DevHub keeps the development builds of all your Expo projects on your machine, finds the build that matches your code, and installs it on a simulator, an emulator, or a phone. You build again only when the native code changes.

~/trail-app
$ devhub match
Project: /Users/me/trail-app (@expo/fingerprint 0.20.13)

android  3f2a0c9e1b7d4a6f8e2c5b1d9a7f3e6c4b8d2a1f
  ID        PLATFORM  PROFILE      VERSION  COMMIT   CREATED     EAS EXPIRY
  5d1c9a2e  android   development  1.4.0    8b1f2c3  2026-10-12  2026-11-11

ios  9c1b7e4d2a6f0c3e8b5d1a7f4e2c9b6d3a8f1e5c
  No stored build matches this fingerprint.

$ devhub install 5d1c
Installing the build 5d1c9a2e-4b7f-4c1a-9e3d-2f6a8b0c1d2e on Pixel_8_API_35 (emulator-5554).
Installed the build 5d1c9a2e-4b7f-4c1a-9e3d-2f6a8b0c1d2e on Pixel_8_API_35 (emulator-5554).
9Commands
3Host systems
0Telemetry
MITLicensed
How it works

Three commands. No new build.

01

Sync

Download the dev client builds of your project from EAS, before EAS deletes them.

devhub sync
02

Match

Calculate the native fingerprint of your code, and find the stored builds that run it.

devhub match
03

Install

Install the build on an emulator, a phone, or a simulator. Then start Metro.

devhub install 5d1c
Local builds

Keep your local builds too.

Add DevHub as the Expo build cache provider. Each npx expo run:android or run:ios stores its build. The next run with the same native code installs the stored build, and Gradle or Xcode does not run.

Set up the cache provider
app.json
{
  "expo": {
    "buildCacheProvider": {
      "plugin": "@rootnative/devhub/cache-provider"
    }
  }
}

Stop building the same app.

Install the CLI, run one sync, and keep each dev build from now on.