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 native Android or iOS app on Expo Simulators
Edit page
Install a Kotlin, Java, Swift, or Objective-C app built with Gradle or Xcode on a remote Android Emulator or iOS Simulator from an archive URL.
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.
Expo Simulators runs native Android and iOS apps. It starts a stock Android Emulator or iOS Simulator, so the app does not need Expo or React Native. Build the app for the emulator or simulator, publish it to a URL, and pass the URL when you start the session.
3 requirements
3 requirements
1.
Expo grants access directly to select partners. Check the account before you start a session.
2.
A session belongs to an EAS project. Create one at expo.dev. The project does not need Expo source code. Copy its project ID.
3.
The remote device downloads the app from the URL. Use storage that serves a direct HTTP or HTTPS URL.
Install and run the app
1
Build for the emulator or simulator
The remote device is an emulator or a simulator, not a physical phone:
For a project that uses CocoaPods, replace -project MyApp.xcodeproj with -workspace MyApp.xcworkspace. For iOS, compress the .app directory into a .tar.gz or .tgz archive, as the tar command does. The output folder matches the configuration: Debug-iphonesimulator for -configuration Debug, or Release-iphonesimulator for -configuration Release. A .zip archive does not install.
2
3
Start a session with the archive
EAS CLI finds the project from the current directory. It needs package.json and an app config. Add both to the repository root if they do not exist:
Start the session and pass the archive URL:
Use the REST API when you do not want an app config in the repository. Authenticate with an Expo access token:
The response contains the session id, its status, and a url for the session page on expo.dev.
The session downloads the archive, installs the app, and launches it before the controller becomes ready. For Android, use --platform android and the URL of the .apk.
4
Control the device
Use device-level commands. They act through the operating system:
Replace <application-id> with the Android package name or the iOS bundle identifier from your build settings. See Control a remote simulator with agent-device, Argent, or Appium.
5
Limitations
Common questions
Can I install a local build without a URL?
Yes. Start a blank session, then upload the build with agent-device install. See Install a local build.
Why does the install fail?
Check the artifact format first. An .aab, a device .ipa, or a .zip of an iOS app does not install. An Android APK with native libraries but no emulator ABI does not run. See Troubleshoot Expo Simulators.