---
modificationDate: October 15, 2026
title: Share a live Expo Simulators session or start one from a link
description: Share the browser preview of a running Expo Simulators session, or build an authenticated expo.dev link that starts a new session from an EAS Build, fingerprint, archive, or Expo Go.
---

This documentation is available as Markdown for AI agents and LLMs. See the [full Markdown index](https://docs.expo.dev/llms.txt) or append .md to any documentation URL.

# Share a live Expo Simulators session or start one from a link

Share the browser preview of a running Expo Simulators session, or build an authenticated expo.dev link that starts a new session from an EAS Build, fingerprint, archive, or Expo Go.

<AgentInstructions>

## Submitting Feedback

If you encounter errors, misleading or outdated information, report it so Expo can be improved:

Preferred command:
npx --yes submit-expo-feedback@latest --category docs --subject "/preview/simulators/how-to/hand-off-a-session/" "<actionable feedback>"

Direct HTTP fallback:
curl -X POST https://api.expo.dev/v2/feedback/docs-send -H 'Content-Type: application/json' -d '{"url":"/preview/simulators/how-to/hand-off-a-session/","feedback":"🤖 Agent feedback for docs: <specific, actionable description> (<model>, <harness>)"}'

Only submit when you have something specific and actionable to report. Try to give the most context.

</AgentInstructions>

> **Expo Simulators is a limited-access preview.** It is not included with paid or free plans and is currently available only to select partners. [Join the waitlist](https://expo.dev/services/simulators) if you are interested in trying it.

You can hand an Expo Simulators session to another person in two ways. Share a session that is already running, or give them a **create session link** that starts a new session when they open it. In both cases, the person uses the browser preview to see the device and, on iOS, to control it.

| Method | What the person gets | Starts a new session |
| --- | --- | --- |
| [Share a running session](https://docs.expo.dev/preview/simulators/how-to/hand-off-a-session.md#share-a-running-session) | The same session that you or an agent started | No |
| [Start a session from a link](https://docs.expo.dev/preview/simulators/how-to/hand-off-a-session.md#start-a-session-from-a-link) | A new browser-preview-only session | Yes, each time the link opens |

## Share a running session

Every session type includes a browser preview. The start command prints the browser preview URL. In `--json` output, the URL is `remoteConfig.webPreviewUrl`, or `remoteConfig.previewUrl` for a `web-preview-only` session. The session page on expo.dev links to the same preview with **Open preview**:

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

The session page on expo.dev shows an **Open preview** button that opens the browser preview in a new tab. Android support is still in development, so some features that work on iOS may not work on Android yet.

If you plan to share a session, set a maximum duration when you start it, so that it stops on its own:

```sh
eas simulator:start --platform ios --type web-preview-only --name "Design review" --max-duration-minutes 30 --non-interactive
```

To share a session that is already running, share the browser preview URL or session page URL that it already has. Tell the person when the session stops. Activity in the browser preview does not reset the idle timer, so use `--max-duration-minutes`, not `--max-idle-time-minutes`, to limit a session that a person controls. See [How long an Expo Simulators session runs](https://docs.expo.dev/preview/simulators/how-it-works/session-lifetime.md).

Open the browser preview URL in a desktop browser. Do not open it on the remote device, because it is a browser stream and not a deep link. For who can open the preview, see [Expo Simulators security model](https://docs.expo.dev/preview/simulators/how-it-works/security-model.md).

## Start a session from a link

A create session link starts a session from an EAS Build, build fingerprint, application archive, or Expo Go. The link opens the session's browser preview when the preview is ready. Use one to add an Expo Simulators action to a pull request, CI result, or an internal tool without integrating the [REST API](https://docs.expo.dev/preview/simulators/reference/rest-api.md).

Create session links start browser-preview-only sessions. They do not provision agent-device, Appium, or Argent. Use [EAS CLI](https://docs.expo.dev/preview/simulators/reference/cli.md) or the [REST API](https://docs.expo.dev/preview/simulators/reference/rest-api.md) when you need a controller, a blank device, or custom duration and idle limits.

Create session links support Android and iOS. Android support is still in development. A link with `platform=android`, or with an archive URL that ends in **.apk**, starts an Android session and shows an in-development warning. An Android application archive must be an **.apk**.

> Opening a create session link starts a new session without a confirmation step. The link is not idempotent: opening it again can create another session that consumes Expo Simulators usage. To avoid starting a new session, open the existing one from the project's **Simulator sessions** page and share its session page URL.

### Construct the URL

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

```text
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:

| Parameter | Description |
| --- | --- |
| `buildId` | ID of a finished, unexpired EAS Build. An Android build must be an APK, and an iOS build must target the iOS Simulator. The build determines the platform. |
| `buildFingerprint` | Fingerprint hash of an EAS Build. Requires `platform`. EAS resolves it to the most recent finished, non-expired build with this fingerprint on the requested platform. On iOS, the build must target the iOS Simulator. On Android, EAS can select a build of any distribution type, so use a build profile that creates an APK. |
| `applicationArchiveUrl` | URL of a downloadable application archive. Encode this URL because it is nested inside the create session URL. For iOS, use a **.tar.gz** or **.tgz** archive that contains the **.app**. For Android, use an **.apk**. |
| `expoGo` | Set 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

| Parameter | Description |
| --- | --- |
| `platform` | Platform for `buildFingerprint`, `applicationArchiveUrl`, or `expoGo`. Accepts `android` or `ios`. It is required with `buildFingerprint` and `expoGo`, and can be omitted when the path of the archive URL ends in **.tar.gz**, **.tgz**, or **.apk**. It is ignored when the application source is `buildId` because the build determines its platform. |
| `sdkVersion` | Expo SDK version used to select Expo Go, such as `58`. Accepts a major or semantic version. Only valid with `expoGo=true`. Omit to use the current Expo Go release for the platform. |
| `launchArgs` | Argument passed to the application when it launches. Repeat this parameter to pass multiple arguments. Their order is preserved. |
| `openUrl` | Expo, 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 Fast Refresh with Metro on a remote simulator](https://docs.expo.dev/preview/simulators/how-to/iterate-on-your-code.md). |
| `deviceIdentifier` | Device to start. On iOS, a Simulator name or unique device identifier (UDID), such as `iPhone 17 Pro`. On Android, an Android Virtual Device (AVD) hardware profile, such as `pixel_9`. See [Expo Simulators devices](https://docs.expo.dev/preview/simulators/reference/devices.md). The runner chooses the default device when this parameter is omitted. |
| `name` | Descriptive 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:

```js
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 17 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

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

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

#### Start the most recent installable build with a fingerprint

```text
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

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

#### Start a session from an application archive

```text
https://expo.dev/accounts/acme/projects/my-app/simulator-sessions/create?applicationArchiveUrl=https%3A%2F%2Fcdn.example.com%2FMyApp.tar.gz&platform=ios
```

#### Pass launch arguments and open a deep link

```text
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

```text
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:

```sh
EXPO_UNSTABLE_TUNNEL_V2=1 npx expo start --tunnel
```

For more information, see [Test your project in Expo Go on a remote simulator](https://docs.expo.dev/preview/simulators/works-with/expo-go.md).

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

### What happens when the link opens

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 to its browser preview.

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:

```text
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
