Llim.run

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:

ProductWhat it isWhat you do with it
iOS simulatorA real Mac running the iOS SimulatorStream it in a browser. Drive it programmatically: taps, screenshots, video, app launch, log streaming, element queries.
Xcode build sandboxA real Mac running xcodebuildSync your source, run xcodebuild remotely, get the logs back.
Android emulatorA booted emulator with an ADB tunnelLocal 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

rocket

Quickstart

Get the CLI installed and run an iOS app on a remote simulator in three minutes.

bot

CLI for coding agents

The cookbook page coding agents use to drive a build, test, ship loop.

monitor-play

Embed the simulator

Stream a live iOS or Android instance into your web app with <RemoteControl /> from @limrun/ui.

hammer

Build with remote Xcode

Source sync, xcodebuild over SSE, code signing, IPA upload to Asset Storage.