Headless iOS sim control that actually streams at 60 fps
A Swift CLI and web UI for driving iOS 26 simulators without ever opening Xcode.

What it does
baguette is a single Swift binary that boots, streams, and pokes at iOS simulators from the terminal or a browser. It wraps Apple’s private SimulatorKit frameworks into a headless tool: 60 fps screen streaming (MJPEG or H.264), multi-finger gestures, keyboard input, hardware button presses, accessibility tree inspection, unified log tailing, and even webcam injection into the simulator’s camera APIs. The web UI at localhost:8421 gives you a device list, per-simulator focus mode, and a multi-device “farm” wall.
The interesting bit
The input path is the clever part. For touch, it calls IOHIDDigitizerDispatch directly through SimulatorKit’s private symbols with iOS 26 calling conventions — so home-indicator swipes and Notification Center pull-downs trigger real iOS gesture recognizers without any DYLD_INSERT_LIBRARIES hackery. For orientation changes, it fires a GSEventTypeDeviceOrientationChanged mach message at PurpleWorkspacePort, bypassing SimulatorKit’s NSView path entirely. The host stays genuinely headless.
Key highlights
- CLI + web UI in one binary:
baguette servespins up the full dashboard;baguette tap/swipe/keywork from scripts - 460+ Swift Testing cases with auto-generated mocks for every external port —
swift testneeds no simulator - Camera injection (0.1.72): pipes Mac webcam BGRA frames through a shared-memory ring buffer into
AVCaptureVideoPreviewLayer - Accessibility inspector:
describe-uireturns JSON AX trees in device points, ready to pipe straight back into tap coordinates - In-browser MP4 recording composites bezel + screen + gesture overlays
Caveats
- Apple Silicon and Xcode 26 only; links against private frameworks that ship with Xcode
- Camera feature requires
DYLD_INSERT_LIBRARIESinto every sim-launched app via a vendoredVirtualCamera.dylib - README notes the demo video upload is manual: “drag it into a GitHub web edit of this README”
Verdict
Worth a look if you’re running CI on macOS or building any kind of remote iOS simulator lab. Skip it if you’re not on Apple Silicon or not ready to pin your workflow to Xcode 26’s private framework surface.