This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.
How Expo Simulators sessions work
Edit page
An Expo Simulators session is a time-limited job on EAS that starts a remote Android Emulator or iOS Simulator with a controller. Learn its states, its startup sequence, and its session page.
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 device that runs for a limited time on EAS infrastructure. Each session belongs to an EAS project. It starts one Android Emulator or iOS Simulator, the controller that you selected, and a browser preview. EAS runs each session as a job, in the same way that it runs other EAS jobs.
What a session contains
Select Open preview on the session page on expo.dev to open 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.
For a list of the session types, see Expo Simulators session types.
Session states
A session moves through these states:
A session goes from starting to in progress when the device and the controller are ready. New, queued, and starting sessions are not final, so a stop request ends them. It goes to stopped when you stop it, when it reaches a limit, or when its job finishes or is canceled. It goes to errored when its job fails. An errored session stays errored, even if you send a stop request.
The REST API returns connection details, such as controller tokens, only while the session is in progress.
What happens when a session starts
- EAS creates the session in the new state and returns its ID and session page URL.
- The session waits in the queue. EAS CLI shows a queue message during this step.
- A machine on EAS starts the device and the controller.
- If you gave an application source, EAS downloads, installs, and launches the app. It also applies launch arguments and opens a URL if you gave them.
- The controller reports its connection details, and the session goes to in progress.
- EAS CLI writes .env.eas-simulator and prints the connection instructions.
EAS CLI waits up to 15 minutes for steps 3 to 5. Queue time does not count toward this limit. If the limit expires, EAS CLI stops the session. If the job fails before the session is ready, the session goes to errored, and EAS CLI exits with an error.
Ways to create a session
The Create new simulator dialog on the Simulator sessions page has these fields:
- Session name
- Platform
- Controller
- Build source: the latest app build, Expo Go, a URL, or an uploaded build file
- Build, or the SDK version for Expo Go
- Device
- Metro URL
- Launch arguments and tags, under Advanced options
The dialog does not set a maximum duration, an idle timeout, or local egress. Use EAS CLI or the REST API for the duration and idle limits, and EAS CLI for local egress. To create a session, you need the Developer role or higher.
The session page
Each session has a page on expo.dev:
https://expo.dev/accounts/<account>/projects/<project>/simulator-sessions/<session-id>
The page has these sections, from top to bottom:
- Summary. The status, duration, the person who started the session, the start time, and a Stop session button.
- Preview or recordings. An Open preview button while the session runs, or the screen recordings after it stops.
- Session activity. The controller actions, with a Drive this session button while the session runs.
- Artifacts. Files from the session, in groups: screenshots, screen recordings, traces, performance metrics, native profiles, React profiles, session events, and other files.
- Logs. The logs of the job that ran the session. This section starts collapsed.
Android session pages also show a warning that Android Emulator support is still in development.
Common questions
Is a session the same as an EAS Build?
No. Both run as jobs on EAS, but a session runs a device for you to use. It does not create a build. Use EAS Build to create the build that a session installs.