---
modificationDate: October 15, 2026
title: Get started with Expo Simulators
description: Check whether Expo Simulators is available, start a remote device session, and connect to it.
---

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.

# Get started with Expo Simulators

Check whether Expo Simulators is available, start a remote device session, and connect to it.

<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/get-started/" "<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/get-started/","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.

#### Prerequisites

##### An Expo account with Expo Simulators access

Expo Simulators access is granted directly to select partners. Check the current project's account before starting a session.

##### A linked Expo project

Run these commands from the project directory. If the project does not have an EAS project ID, run `eas init` first.

##### A recent EAS CLI

The `simulator:*` commands are experimental. [Install or update EAS CLI](https://docs.expo.dev/eas/cli.md) before using them. Since the preview changes quickly, use `eas simulator:start --help` to check the flags supported by your installed version.

## Expo Skills for AI agents

If you use an AI agent, install [Expo Skills](https://docs.expo.dev/skills.md) and ask it to use the Expo Simulators skill. The skill can perform the session workflow below, drive the app, and collect evidence for you. Use this page when you want to understand or run the commands manually.

[eas-simulator](https://github.com/expo/skills/blob/main/plugins/expo/skills/eas-simulator/SKILL.md) — Run and control a user's app on a remote iOS/Android simulator hosted on EAS cloud.

## Start a session manually

The steps below use EAS CLI. To manage sessions directly from your own HTTP client, see the [REST API reference](https://docs.expo.dev/preview/simulators/reference/rest-api.md). To start a browser-preview-only session when someone opens an authenticated expo.dev URL, see [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).

### Authenticate and verify the project

On an interactive machine, log in and confirm the current user:

```sh
eas login
eas whoami
```

In CI or a headless agent environment, provide an [Expo access token](https://docs.expo.dev/accounts/programmatic-access.md) in `EXPO_TOKEN` instead of starting an interactive login.

If the project is not linked to EAS, initialize it:

```sh
eas init
```

### Check account availability

The availability check is read-only. It does not start a device or consume simulator usage. The `--json` flag is optional, but it makes the result easy for an agent or script to inspect:

```sh
eas simulator:availability --json
```

An enabled account returns:

```json
{
  "available": true,
  "accountName": "my-account"
}
```

If `available` is `false`, do not call `simulator:start`. Use a local simulator or emulator, or [join the waitlist](https://expo.dev/services/simulators) for access.

### Protect the session configuration

EAS CLI writes the current session ID and controller credentials to **.env.eas-simulator**. Add the file to **.gitignore** before starting:

```sh .gitignore
.env.eas-simulator
```

Do not commit or share this file. It includes the token that lets a controller reach the remote device.

### Choose a session type and start a remote device

Choose the controller you plan to use for installation and device actions. Each controller-backed session also includes a browser preview. If you only need the browser preview, use `web-preview-only` without a controller. Pass the session type explicitly when you start the session.

#### agent-device

See [agent-device and Expo](https://docs.expo.dev/agents/agent-device.md) for controller setup and commands.

```sh
eas simulator:start --platform ios --type agent-device --name "Checkout flow screenshots" --non-interactive
```

#### Argent

See [Argent and Expo](https://docs.expo.dev/agents/argent.md) for controller setup and commands.

```sh
eas simulator:start --platform ios --type argent --name "Checkout flow screenshots" --non-interactive
```

#### Appium

Use an Appium client when you already have Appium tests or automation. EAS CLI writes the remote server URL and capabilities to the session configuration.

```sh
eas simulator:start --platform ios --type appium --name "Checkout flow tests" --non-interactive
```

#### Browser preview only

Use the browser preview without provisioning a programmatic controller.

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

Give each session a short name that describes its purpose. The name appears in `simulator:list`, `simulator:get`, and on expo.dev, which makes parallel and historical sessions easier to identify.

Use `--platform android` for an Android Emulator. 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.

Use `--device` to select an Android virtual device hardware profile, or a specific iOS Simulator name or unique device identifier (UDID). If you omit the flag, the remote runner uses `medium_phone` on Android and `iPhone 17` on iOS. See [Expo Simulators devices](https://docs.expo.dev/preview/simulators/reference/devices.md).

For an unattended or shareable session, use `--max-duration-minutes` to set an automatic stop time. Any plan can set a value up to the account limit. The limit is 40 minutes on the Free plan and 115 minutes on paid plans. A value above the limit returns an error. Without the flag, the maximum duration is the account limit. You can also use `--max-idle-time-minutes` to stop after a period without session activity.

When `--platform` is omitted in an interactive terminal, EAS CLI asks which platform to use. Non-interactive runs require the flag.

The start command waits for the session to become ready, then writes **.env.eas-simulator**. It also prints:

-   A direct simulator session page on expo.dev
-   A temporary browser preview URL
-   The command pattern for controlling the device

To install and launch an app before the session becomes ready, pass exactly one of `--build-id`, `--build-fingerprint`, `--application-archive-url`, or `--expo-go`. You can also pass launch arguments and an Expo or development-client URL. See [Install an app on a remote Android Emulator or iOS Simulator](https://docs.expo.dev/preview/simulators/how-to/install-your-app.md) for complete examples.

> `--non-interactive` does not automatically stop the session. The command returns when the session is ready, and the remote device remains active.

### Confirm that the session is active

Use the session ID from **.env.eas-simulator**:

```sh
eas simulator:get --json --non-interactive
```

Continue when `status` is `IN_PROGRESS` and `remoteConfig` is present. A stopped session can still have old connection configuration, so the dotenv file alone is not proof that the device is live.

### Open the web surfaces

The start command links to a session page with this shape:

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

The project-level session list is:

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

Open the browser preview URL in a desktop browser to view the live device. On iOS, you can also interact with it. In `--json` output, the URL is `remoteConfig.webPreviewUrl`, or `remoteConfig.previewUrl` for a `web-preview-only` session. The preview URL is not an application deep link. Do not pass it to a controller command that opens apps or URLs.

### Stop the session

When you finish, stop the current session:

```sh
eas simulator:stop
```

If EAS CLI is still attached, press Ctrl + C once to stop the session and let EAS CLI reset **.env.eas-simulator**. EAS CLI stays attached only in an interactive terminal without `--non-interactive`.
