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

Run a Flutter app on a remote Android Emulator or iOS Simulator

Edit page

Build a Flutter app for the Android Emulator or iOS Simulator, then install and control it on Expo Simulators from an archive URL.


Expo Simulators runs Flutter apps that are built for the Android Emulator or iOS Simulator. Build the app for the emulator or simulator with the Flutter CLI, publish the build to a URL, and pass the URL to eas simulator:start. You control the app with device-level commands, such as snapshots, presses, and screenshots.

Build the app

Terminal
- flutter build apk --debug

Use the .apk that the command creates. An .aab fails to install.

Start a session with the build

Upload the file to storage that returns it directly. Then pass its URL:

Terminal
- eas simulator:start --platform ios --type agent-device --application-archive-url "https://example.com/Runner.app.tar.gz" --name "Flutter build review" --non-interactive

EAS CLI needs package.json and an app config with the EAS project ID in the current directory. You can also use the REST API with only the project ID. For both setups, see Native Android and iOS apps.

Control the app

Terminal
- eas simulator:exec npx agent-device@latest open <application-id> --platform ios
- eas simulator:exec npx agent-device@latest snapshot -i
- eas simulator:exec npx agent-device@latest screenshot ./artifacts/home.png

Replace <application-id> with the bundle identifier or package name of the Flutter app. Stop the session when you finish:

Terminal
- eas simulator:stop

Limitations

Device-level control works for Flutter apps. The React Native features of the controllers do not work, and Fast Refresh with Metro does not apply. See Expo Simulators limitations.

Common questions

Can I use Flutter hot reload with Expo Simulators?

No. Expo Simulators does not provide a Flutter hot reload workflow. To see a change, rebuild the app and start a new session with the new build.