This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.

Which build to install on Expo Simulators

Edit page

Learn how release builds, development builds, and Expo Go load JavaScript on Expo Simulators, which build formats install, and where EAS downloads each build.


An app on Expo Simulators shows the JavaScript that its build loads. A release build contains a JavaScript bundle from the time of the build. A development build loads the bundle from Metro, so it shows your current source. Expo Go also loads the bundle from Metro, but it contains only the native code that Expo Go includes. Select the build type before you install anything, because the wrong build type makes a screenshot show old code.

Where the JavaScript comes from

Build typeJavaScript sourceShows current sourceFast Refresh
Release buildBundle embedded at build timeOnly if built from current sourceNo
Development buildMetro, through a public tunnelYesYes
Expo GoMetro, through a public tunnelYesYes

If you connect a release build to Metro, it continues to use its embedded bundle. To see live changes, install a development build.

Builds that install on a simulator

A remote device is a simulator or an emulator, so the build must target it:

PlatformInstallsDoes not install
AndroidAn .apk whose native libraries, if any, include an emulator application binary interface (ABI), such as x86_64An .aab
iOSA .app built against the iphonesimulator SDK, often in an archiveA device .ipa, or a .zip archive

An iOS archive must be a gzip tarball (.tar.gz or .tgz). The .app directory can be inside the archive. The archive can also hold the contents of the app bundle at its root.

Fingerprints and build freshness

A fingerprint is a hash of the native parts of a project. Two builds with the same fingerprint have the same native code. When you pass --build-fingerprint, EAS installs the most recent finished build with that fingerprint whose artifact has not expired. On iOS, EAS selects only simulator builds. On Android, EAS selects a build of any distribution type. An .aab build fails to install, so use a build profile that creates an .apk.

A matching fingerprint does not mean that the JavaScript matches. A release build with a matching fingerprint can contain an older bundle. To see current JavaScript, use a development build with Metro, or create a new release build.

Where EAS gets the build

Application sourceWho downloads or uploads the build
--build-id or --build-fingerprintThe machine on EAS downloads the EAS Build artifact.
--application-archive-urlThe machine on EAS downloads the file from the URL.
--expo-goEAS selects the Expo Go release for the SDK version.
agent-device install-from-source <url>The machine on EAS downloads the file from the URL.
agent-device install or Argent reinstall-appYour computer uploads the local build through the controller.
Upload build file on expo.devYour browser uploads the build. The limit is 1 GB.

A large local build takes longer, because your computer uploads it. When the build is at a URL, let the machine on EAS download it.

Launch arguments and URLs

When you install the app with an application source, EAS can launch it with arguments and then open a URL. EAS accepts up to 100 launch arguments, with a total size of up to 64,000 bytes. In an iOS agent-device or Argent session, EAS tries to approve the custom URL scheme first. Then the system Open in dialog does not appear. In other session types, or if the approval fails, the dialog can appear. Accept it in the browser preview or with the controller.

Common questions

Do I need to sign an iOS build for Expo Simulators?

No. iOS Simulator builds are not signed, so EAS Build does not ask for credentials.

Can the app use custom native code in Expo Go?

No. Expo Go contains a fixed set of native modules. Use a development build for a project with custom native code.