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

Start an EAS Simulator session from a link

Edit page

Construct an authenticated expo.dev URL that creates an EAS Simulator session and opens its fullscreen browser preview from an EAS Build, build fingerprint, application archive, or Expo Go.


A create session link starts an iOS Simulator session from an EAS Build, build fingerprint, application archive, or Expo Go. The link opens the session's browser preview in fullscreen mode when the preview is ready. Use one to add an EAS Simulator action to a pull request, CI result, or an internal tool without integrating the REST API.

Create session links start browser-preview-only sessions. They do not provision agent-device, Appium, or Argent. Use EAS CLI or the REST API when you need a controller, an Android Emulator, a blank device, or custom duration and idle limits.

Construct the URL

Use the Expo account name and project slug in the URL:

https://expo.dev/accounts/<account>/projects/<project>/simulator-sessions/create?<parameters>

The person opening the link must sign in to an Expo account that can access the project. If they are signed out, expo.dev preserves the complete URL during authentication and starts the session after they sign in.

Choose an application source

Every create session link requires exactly one application source:

ParameterDescription
buildIdID of a finished, unexpired EAS Build for the iOS Simulator. The build determines the platform.
buildFingerprintFingerprint hash of an EAS Build. Requires platform. EAS resolves it to the most recent installable build with this fingerprint on the requested platform.
applicationArchiveUrlURL of a downloadable iOS application archive. Encode this URL because it is nested inside the create session URL. Supported extensions are .tar.gz, .tgz, .app, and .app.zip.
expoGoSet to true to install and launch Expo Go instead of a project build. Requires platform. Use sdkVersion to choose the Expo Go version, and openUrl to load your project from Metro. false and 0 are treated as absent.

Do not include more than one application source. A link with more than one, such as buildId together with expoGo=true, shows a validation error and does not create a session. A link without an application source cannot create a session.

EAS treats an empty application source value, such as buildId=, as absent.

Add other parameters

ParameterDescription
platformPlatform for buildFingerprint, applicationArchiveUrl, or expoGo. Create session links currently support ios. It is required with buildFingerprint and expoGo, and can be omitted when an archive URL has a supported iOS extension. It is ignored when the application source is buildId because the build determines its platform.
sdkVersionExpo SDK version used to select Expo Go, such as 54. Accepts a major or semantic version. Only valid with expoGo=true. Omit to use the current Expo Go release for the platform.
launchArgsArgument passed to the application when it launches. Repeat this parameter to pass multiple arguments. Their order is preserved.
openUrlExpo, development-client, or application deep link to open after the application launches. With Expo Go, pass the exp:// URL of a Metro server that the remote simulator can reach, such as a tunneled Metro URL. With a development build, pass <scheme>://expo-development-client/?url=<encoded-public-metro-url>, as described in Use a development build for live changes.
deviceIdentifieriOS Simulator name or unique device identifier (UDID), such as iPhone 16 Pro. The runner chooses the default device when this parameter is omitted.
nameDescriptive session name with a maximum of 255 characters.

URL-encode parameter values, especially nested URLs and values that contain spaces. Most programming languages provide a URL builder that handles this encoding. For example:

const url = new URL('https://expo.dev/accounts/acme/projects/my-app/simulator-sessions/create'); url.searchParams.set('buildFingerprint', 'FINGERPRINT_HASH'); url.searchParams.set('platform', 'ios'); url.searchParams.set('name', 'PR preview'); url.searchParams.set('deviceIdentifier', 'iPhone 16 Pro'); url.searchParams.append('launchArgs', '-UITestMode'); url.searchParams.append('launchArgs', '1'); url.searchParams.set('openUrl', 'myapp://profile/42'); console.log(url.toString());

Examples

Start a session from an EAS Build

https://expo.dev/accounts/acme/projects/my-app/simulator-sessions/create?buildId=BUILD_UUID

The build must be finished, its artifact must not be expired, and it must target the iOS Simulator instead of a physical iOS device.

Start the most recent installable build with a fingerprint

https://expo.dev/accounts/acme/projects/my-app/simulator-sessions/create?buildFingerprint=FINGERPRINT_HASH&platform=ios

EAS resolves the fingerprint to the most recent installable iOS Simulator build. If no installable build with this fingerprint exists, the link shows a validation error. Use buildId instead when you need to select one specific build.

Name the session and choose a device

https://expo.dev/accounts/acme/projects/my-app/simulator-sessions/create?buildId=BUILD_UUID&name=PR%20preview&deviceIdentifier=iPhone%2016%20Pro

Start a session from an application archive

https://expo.dev/accounts/acme/projects/my-app/simulator-sessions/create?applicationArchiveUrl=https%3A%2F%2Fcdn.example.com%2FMyApp.app.zip&platform=ios
https://expo.dev/accounts/acme/projects/my-app/simulator-sessions/create?buildId=BUILD_UUID&launchArgs=-UITestMode&launchArgs=1&openUrl=myapp%3A%2F%2Fprofile%2F42

Start Expo Go and load a project from Metro

https://expo.dev/accounts/acme/projects/my-app/simulator-sessions/create?expoGo=true&platform=ios&sdkVersion=58&openUrl=exp%3A%2F%2Fmetro.example.ngrok.dev

EAS installs the Expo Go release for the requested SDK version and opens the openUrl value in it. Omit sdkVersion to use the current Expo Go release. The remote simulator must be able to reach Metro. Start Metro with a public tunnel before you open the link:

Terminal
- EXPO_UNSTABLE_TUNNEL_V2=1 npx expo start --tunnel

For more information, see Use Expo Go.

If no Expo Go release is published for the requested SDK version, the link shows a validation error.

After authentication, expo.dev validates the parameters and build, then creates the session. It shows the session's startup progress while reserving a simulator and preparing the browser preview. This can take about a minute. When the browser preview becomes available, expo.dev redirects directly to its webPreviewUrl with fullscreen=1, so the preview fills the page.

To return to or share the same session without starting another one, open it from the project's Simulator sessions page. Its session page URL uses this format:

https://expo.dev/accounts/<account>/projects/<project>/simulator-sessions/<session-id>

Closing the page or navigating away does not cancel a session creation that the service already accepted, and it does not stop a running session. Stop the session when you finish so that it does not continue consuming usage.

If the parameters or build are invalid, expo.dev shows a Cannot start simulator session error instead. Common causes include:

  • An unfinished or expired build
  • An iOS device build
  • A fingerprint or expoGo link without platform
  • No installable build for a fingerprint
  • An unsupported archive URL
  • sdkVersion without expoGo=true
  • An SDK version without a published Expo Go release
  • More than one application source