This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.
Start a remote Android Emulator or iOS Simulator session
Edit page
Start an Expo Simulators session from EAS CLI, the REST API, or expo.dev, then confirm that the remote device is ready to use.
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 if you are interested in trying it.
An Expo Simulators session is one remote Android Emulator or iOS Simulator that runs on EAS infrastructure for a limited time. To start a session, run eas simulator:start with a platform and a session type. The command waits until the device is ready, then writes the connection details to .env.eas-simulator.
This page shows the four ways to start a session and how to confirm that the session is ready. For a first-time walkthrough that includes account setup, see Get started with Expo Simulators.
Choose how to start the session
Start a session with EAS CLI
Run the command from the project directory. Pass the platform, the session type, and a name that describes the purpose of the session:
EAS CLI shows a warning when you start an Android session. Android Emulator support is still in development, and some features that work on iOS may not work on Android yet.
The start command does these steps:
- It creates the session and prints the session page URL on expo.dev.
- It waits while the session is in the queue. Queue time does not count toward the startup timeout.
- It waits up to 15 minutes for the device and controller to start.
- It writes .env.eas-simulator and prints the connection instructions.
If the session stops or fails before it is ready, the command reports the failure and links to the session page. If the startup timeout expires, EAS CLI stops the session.
--non-interactivedoes not stop the session when the command returns. The remote device keeps running until you stop it, it reaches its maximum duration, or it reaches its idle limit, if you set one. See How long an Expo Simulators session runs.
Stay attached or return immediately
Add an app, a device, or limits
You can add more flags to the same command:
Start a session with the REST API
Send a POST request with an Expo access token. The response returns before the device is ready:
Save data.id from the response. Then poll the session every five seconds until it is ready. See Get a session.
Start a session on expo.dev
Open the project's Simulator sessions page and select New simulator. The Create new simulator dialog has these fields:
An uploaded build file must be 1 GB or smaller. Upload an APK for Android or an iOS Simulator .tar.gz archive for iOS. The dialog does not set a maximum duration or an idle limit, so the maximum duration is your account limit. You need the Developer role or higher to start a session.
Confirm that the session is ready
A session is ready when its status is in progress and its connection details are present. Check both values:
Continue when status is IN_PROGRESS and remoteConfig is present.
Continue when data.status is in-progress and data.remoteConfig is not null.
EAS CLI shows status values in uppercase, such as IN_PROGRESS. The REST API returns lowercase values, such as in-progress.
Do not use the .env.eas-simulator file alone as proof that the device is live. The file can contain the ID of a session that has already stopped.
Start a second session safely
eas simulator:start creates a new session by default, even when .env.eas-simulator already contains a session ID. The command replaces the file, but it does not stop the earlier remote session. EAS CLI prints a warning with the stop command for the earlier session.
To make the start command fail instead of creating a second session, pass --no-force:
To run more than one session at the same time from one directory, see How EAS CLI and agents select an Expo Simulators session.
Stop the session
Stop each session when you finish:
The command stops the session in .env.eas-simulator. Pass --id <session-id> to stop a different session. Running simulator:stop on a session that already stopped succeeds, so you can run it again safely.
Common questions
How long does a session take to start?
Startup time varies with capacity. A session can wait in a queue, then take time to start the device. EAS CLI shows when the session is in the queue. The 15-minute startup timeout starts after the session leaves the queue.
Can I start a session without an Expo project?
Yes. You need an EAS project, but not a local Expo project directory. The REST API, expo.dev, and create session links need only the EAS project. EAS CLI needs a project directory with package.json and an app config that contains the EAS project ID. See Run a native Android or iOS app on Expo Simulators.