Introduction
Limrun lets cloud coding agents do mobile development. macOS for iOS, accelerated emulators for Android, and physical-device hardware all run as on-demand cloud services, so an agent on a Linux VM can build iOS apps without a Mac, drive simulators from a CI runner, embed a live simulator in a web app, or share a preview URL reviewers open in any browser.
Three products
Limrun is three composable cloud services:
| Product | What it is | What you do with it |
|---|---|---|
| iOS simulator | A real Mac running the iOS Simulator | Stream it in a browser. Drive it programmatically: taps, screenshots, video, app launch, log streaming, element queries. |
| Xcode build sandbox | A real Mac running xcodebuild | Sync your source, run xcodebuild remotely, get the logs back. |
| Android emulator | A booted emulator with an ADB tunnel | Local Android Studio, Appium, and scrcpy attach as if it were a USB device. |
The iOS simulator and Xcode sandbox can be created as a paired instance in one call. A successful build auto-installs on the attached simulator, which is the most common shape.
Limrun also offers Asset Storage for build artifacts: .apk for Android, and .app folders zipped or tarballed for iOS simulator installs. Upload once, then pre-install on new instances or share via preview URLs.
See the Quickstart for a three-minute walkthrough.
Common use cases
Shipping iOS or Android code from a cloud coding agent. A coding agent picks up a ticket on its Linux VM, calls Limrun to build and run the app on a real Mac, drives the simulator to verify the change, and posts a preview link on the PR for reviewers.
Mobile builds and tests from Linux CI. Run xcodebuild from a Linux runner, drive Appium tests against cloud simulators, post artifacts and preview links on every PR. No macOS minutes required.
Embedded simulators inside a product. A backend creates instances on behalf of users; the frontend embeds <RemoteControl /> from @limrun/ui to stream the live simulator into the product UI.
The CLI wraps the SDK; both reach every operation.
Architecture
An instance is anything you create through Limrun: an iOS simulator, an Android emulator, or an Xcode build sandbox. Each one has an ID, exposes its own endpoints, and lives until you delete it or its inactivity timeout fires.
Limrun is split into a control plane (where you create and manage instances) and per-instance data planes (where you actually interact with each instance). Your org API key authenticates the control plane; each instance returns its own per-instance token that authenticates everything tied to that instance, including its MCP server.
Each instance also exposes a signed stream URL with a token baked into it. Anyone with the URL can open the running simulator in a browser without signing in. This is what lets a cloud agent surface the live device to a human reviewer (a Slack link, a PR comment, a browser pane inside the agent's own UI) without putting them through an interactive auth flow.
Drive Limrun from your environment with the lim CLI (for cloud agents and CI), the @limrun/api SDK in TypeScript / Python / Go (for backends that provision instances on behalf of users), or <RemoteControl /> from @limrun/ui (to embed a live device in a web app). All three wrap the same REST API. MCP-aware tools can call the per-instance MCP server directly.
How to get started
Quickstart
Get the CLI installed and run an iOS app on a remote simulator in three minutes.
CLI for coding agents
The cookbook page coding agents use to drive a build, test, ship loop.
Embed the simulator
Stream a live iOS or Android instance into your web app with <RemoteControl /> from @limrun/ui.
Build with remote Xcode
Source sync, xcodebuild over SSE, code signing, IPA upload to Asset Storage.
Was this guide helpful?