Back to feed

tddworks/baguette

tddworks/baguette
652
+27/day
24
Swift

Headless 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 IndigoHIDMessageForMouseNSEvent from Xcode 26's preview-kit. No dylib injection, no DYLD_INSERT_LIBRARIES, no per-app priming.
  • Standalone web UIbaguette serve opens ` with a list page, live stream, gesture input, and DeviceKit-sourced bezels for every simulator family.
  • Device farmis 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 sameGestureDispatcherIndigoHIDInput` pipeline as the CLI.
  • Layered, test-driven — bounded-context Domain / Infrastructure / App split; 110+ Mockable-backed tests; swift test runs 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