Xscape

A project by Roman Slack — Lead AI Platform Engineer

Xscape — a project by Roman Slack

Programming · December 2025 · 4.0 hours · built by Roman Slack

Xscape lets developers build and run iOS apps entirely from Linux, removing the need for a Mac on the desk. It works by orchestrating a macOS virtual machine, or a remote physical Mac, that handles the actual Xcode builds and iOS Simulator runs, while the developer interacts through a clean terminal UI on Linux. The name is a play on 'escape' and 'Xcode,' reflecting Roman Slack's goal of freeing iOS development from requiring expensive Apple hardware on hand.

The architecture splits responsibilities across machines. On the Linux host, the xscape CLI communicates over HTTP and WebSocket with an xscape-agent HTTP server running inside a QEMU/KVM macOS VM, which drives the iOS Simulator via simctl and xcodebuild. The running simulator is streamed back to the developer's browser through noVNC, so builds, simulator interaction, and real-time build logs are all accessible from Linux. Xscape supports two modes: a locally managed macOS VM, or connecting to a remote Mac over the network.

Xscape ships an interactive TUI that guides users through project, scheme, and device selection with breadcrumb navigation, back options, an iOS version picker, and progress indicators, alongside a setup wizard that verifies configuration, tests agent connectivity, checks the Xcode installation, and lists available simulators. Built in Rust as a workspace of crates (the Linux CLI, the macOS agent, and shared types), it is configured through a single TOML file. The project notes that running macOS in a VM is only permitted on Apple-branded hardware per Apple's EULA, while the remote Mac mode is fully compliant. It is released under the MIT license.

Key Features

Tech Stack

Rust Linux macOS QEMU/KVM noVNC Xcode xcodebuild simctl TOML WebSocket

View on GitHub →

Designed and built by Roman Slack, Lead AI Platform Engineer. See more of Roman Slack's work on the projects page or get in touch via the contact page.