Skip to content
xcross
v1.0.0Native Windows and Linux support

Run and debug Flutter iOS apps from Windows or Linux. Without a Mac.

xcross reimplements the Flutter iOS run pipeline and the iOS 17+ CoreDevice launch protocol in pure Dart. Launch on a real iPhone with full hot reload, breakpoints and DevTools - straight from Windows or Linux.

No Mac. No Xcode. No macOS anywhere.

>irm https://raw.githubusercontent.com/arxdeus/xcross/main/install.ps1 | iex
$curl -fsSL https://raw.githubusercontent.com/arxdeus/xcross/main/install.sh | sh
xcross - windows powershell
xcross flutter run
✓ Resolving dependencies 1.8s
✓ Fetching Flutter engine artifacts 12.4s
✓ Compiling Dart kernel 6.1s
✓ Compiling Runner 2.3s
› Device iPhone 15 Pro 00008130-000A2D9E0299001C
✓ Installing to device 4.6s
› App com.example.myapp debug/JIT, hot reload
✓ Debugger attached
› vm-service: ws://127.0.0.1:52117/ws
› Hot reload ready — r reload · R restart · q quit
✓ Reloaded 0.3s
>

Needs on the host

Flutter

app SDK + engine artifacts

Swift

SwiftPM plugins & glue

LLVM

clang, ld64.lld

Python 3

pymobiledevice3

Xcode.xip

SDK input, processed once

Capabilities

Everything the official toolchain does on a Mac - reimplemented.

xcross does not wrap or patch Flutter’s iOS tooling - it refuses to run off macOS. Instead it re-implements the parts that matter for running and debugging on a device, using the same engine artifacts, the same compilers and the same device protocols.

Native Windows & Linux

Runs directly on the host with the official Swift and LLVM toolchains - no macOS VM and no remote Mac. WSL works too, once the device is attached with usbipd-win.

Hot reload & hot restart

The full r / R workflow on a real iPhone over an iOS 17+ RSD tunnel, backed by a faithful DevFS reimplementation.

Real devices, your Apple ID

A free Apple account is enough, or use an App Store Connect API key. Provisioning and install happen in-process, with no external Apple tooling.

SwiftPM plugins

Swift Package Manager iOS plugins work on both hosts and load into your running app through a Flutter-compatible registrant.

IDE debugging

One command wires up VS Code (F5, breakpoints, DevTools) or JetBrains IDEs through a Debug Adapter Protocol server.

No Xcode in the loop

Everything runs on your host with Flutter’s own engine artifacts, untouched. Xcode’s toolchain is never installed and never executed.

Scope

xcross targets debug (JIT) runs on a device. Release/AOT output still requires Flutter’s macOS tooling, and launching needs iOS 17+.

Why?

Quick start

Four commands to a running app.

01

Install and set up the host

The installer adds xcross to your PATH and reports anything missing. Then setup installs the remaining host dependencies.

$xcross setup
02

Prepare the private Darwin SDK

Runs once. Pure-Dart xar / pbzx / cpio readers extract the iOS SDK and frameworks from an Xcode archive.

$xcross sdk install ~/Downloads/Xcode.xip
03

Sign in with your Apple ID

Only the resulting Developer Services session is stored - never your password. A free Apple account works.

$xcross auth --apple-id you@example.com
04

Start the tunnel, then run

Mount the Developer Disk Image once per device reconnect, then launch on the device and hot reload as you edit.

$xcross tunnel && xcross flutter run
ESC