tddworks/baguette
tddworks/baguetteHeadless iOS Simulator manager/farm + host-side input injection for iOS 26 — taps, swipes, multi-finger gestures, and 60 fps streaming
From the README
Baguette
Bon appétit.
Headless iOS Simulator manager + host-side input injection for iOS 26.
A single Swift CLI — baguette — that creates / boots / shuts down
simulator devices, streams their screens at 60 fps, and injects taps
/ swipes / multi-finger touches without booting the Simulator.app GUI.
Optionally serves a self-contained web UI on localhost so you can
control any booted simulator from a browser.
Demo
The raw clip lives at
assets/demo.mp4— drag it into a GitHub web edit of this README to upload as a CDN-hosted video and replace the line above with the auto-generated URL.
- Frame streaming — MJPEG or H.264 / AVCC over stdout or WebSocket. Runtime-tunable bitrate / fps / scale.
- Host-HID input — taps / swipes / streaming 1- and 2-finger gestures /
home & lock buttons / scroll wheel, all through SimulatorKit's 9-argument
IndigoHIDMessageForMouseNSEventfrom Xcode 26's preview-kit. No dylib injection, noDYLD_INSERT_LIBRARIES, no per-app priming. - Standalone web UI —
baguette serveopens ` with a list page, live stream, gesture input, and DeviceKit-sourced bezels for every simulator family. - Device farm —
is an interactive multi-device dashboard. Every booted simulator streams in a wall / grid / list, with filtering and sorting; click a tile to focus it for full-quality streaming + gesture and hardware-button input through the sameGestureDispatcher→IndigoHIDInput` pipeline as the CLI. - Layered, test-driven — bounded-context Domain / Infrastructure / App
split; 110+ Mockable-backed tests;
swift testruns without a booted simulator.
Install
brew install tddworks/tap/baguette
Apple Silicon only. Requires Xcode 26 — baguette links against private
SimulatorKit / CoreSimulator frameworks shipped with Xcode.
Quickstart
# Start the web UI
baguette serve
# Single-device dashboard — list, boot/shutdown, per-device stream pages
open
# Device farm — every booted simulator side-by-side, click to focus
open
/simulators lists every simulator on the machine with Boot / Shutdown
buttons; click any booted device to open its Stream page — live frames,
mouse/touch input, and the DeviceKit-sourced bezel.
/farm is the multi-device control surface. See
Device farm below.
Headless from the terminal works too:
baguette list
baguette boot --udid
baguette tap --udid --x 219 --y 478 --width 438 --height 954
Build from source
make # release build via ./build.sh
swift test # run the test suite
Hybrid build: SPM fetches de