Quickstart
Build an iOS app on a remote Xcode sandbox and watch the result stream into your browser, all from your terminal.
If you're handing this off to a coding agent, read CLI for coding agents instead. That page is the skill an agent should follow end to end.
Try it in your browser first
If you'd rather poke at an instance before installing anything, console.limrun.com has a Playground that creates and streams an instance from a dropdown. Pick an OS, pick an app to preinstall, hit Start.

The rest of this page covers the CLI flow.
Set up the build
Requires Node.js 20 LTS or newer.
# Pick your package manager
npm install --global @limrun/cli
pnpm add --global @limrun/cli
bun add --global @limrun/cliOpen the console in your browser, grab the API key from the page, and write it to ~/.lim/config.yaml:
lim loginOn a headless host (CI, a devcontainer), set LIM_API_KEY in the environment instead.
Use the sample app for the quickest path. Already have an iOS project locally? Skip the clone and cd into your project directory.
git clone https://github.com/limrun-inc/sample-native-app.git
cd sample-native-appA single lim ios create --xcode provisions a simulator and an attached Xcode sandbox in one call. --reuse-if-exists makes re-runs return the same instance instead of creating a new one.
lim ios create --xcode --reuse-if-exists --label project=quickstartOpen the Signed Stream URL from the output in any browser to watch the simulator live. The URL has its own token embedded, so no sign-in is needed.
From inside the project directory:
lim xcode build .For multi-scheme projects, add --scheme <name> and either --workspace <path> or --project <path>.
Build logs stream back as they happen. On success, the build artifact auto-installs and auto-launches on the attached simulator. The streaming tab updates to your app's first screen a few seconds after the build completes.

Drive the app
Once the build lands, you can read state and drive the UI directly from your shell. Most commands default to the last-created instance, so you rarely need to pass --id.
lim ios screenshot ./screen.png
lim ios element-tree
lim ios tap-element --ax-label "Continue"
lim ios type "Hello"The element tree is the source of truth for what the UI shows: labels, accessibility IDs, types, frames. Reach for it before every action; it's faster and more reliable than visual inspection.
Tear down
When you're done, delete the instance. Without an ID, lim ios delete removes the last iOS instance the CLI created for you (the pointer is in ~/.lim/last-instances.json).
lim ios deleteWhere to go next
CLI for coding agents
Hand the build, drive, and ship loop off to a coding agent via the bundled skill.
Build with remote Xcode
Every lim xcode build flag, real-device IPAs, source-sync internals, MCP-wrapped build tools.
Embed the simulator
Stream a live iOS or Android simulator into your web app with <RemoteControl /> from @limrun/ui.
Run an Android Emulator
ADB tunnel, scrcpy streaming, Appium, and the rest of the Android toolchain over a remote emulator.
Was this guide helpful?