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

Get started with EAS Simulator

Edit page

Check whether EAS Simulator is available, start a remote device session, and connect to it.


Prerequisites

3 requirements

1.

An Expo account with EAS Simulator access

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

2.

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.

3.

A recent EAS CLI

The simulator:* commands are experimental and hidden. Install or update EAS CLI 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 and ask it to use the EAS Simulator 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

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. To start a browser-preview-only session when someone opens an authenticated expo.dev URL, see Create session links.

1

Authenticate and verify the project

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

Terminal
eas login
eas whoami

In CI or a headless agent environment, provide an Expo access token in EXPO_TOKEN instead of starting an interactive login.

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

Terminal
eas init

2

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:

Terminal
eas simulator:availability --json

An enabled account returns:

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

If available is false, do not call simulator:start. Use a local simulator or emulator, or join the waitlist for access.

3

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:

.gitignore
.env.eas-simulator

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

4

Choose a session type and start a remote device

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

See agent-device and Expo for controller setup and commands.

Terminal
eas simulator:start --platform ios --type agent-device --name "Checkout flow screenshots" --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. Android sessions do not currently include a live browser preview. Use --device to select a specific iOS Simulator name or unique device identifier (UDID), or an Android virtual device hardware profile. If the flag is omitted, the remote runner chooses a device.

For an unattended or shareable session, use --max-duration-minutes to set an automatic stop time. You can also use --max-idle-time-minutes to stop after a period without session activity. A custom maximum duration is available on paid plans.

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 webPreviewUrl for supported iOS sessions
  • The command pattern for controlling the device

To install and launch an app before the session becomes ready, pass exactly one of --build-id, --application-archive-url, or --expo-go. You can also pass launch arguments and an Expo or development-client URL. See Run and control an app for complete examples.

5

Confirm that the session is active

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

Terminal
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.

6

Open the web surfaces

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

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

The project-level session list is:

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

For supported iOS sessions, open webPreviewUrl in a desktop browser to view and interact with the live simulator. The preview URL is not an application deep link. Do not pass it to a controller command that opens apps or URLs.

7

Stop the session

When you finish, stop the current session:

Terminal
eas simulator:stop

If you started EAS CLI without --non-interactive, it remains attached. Press Ctrl+C once to stop the session and let EAS CLI reset .env.eas-simulator.