Headless iOS simulator control that bypasses Xcode entirely
Baguette exists so you can farm, stream, and finger-tap iOS simulators from a browser or terminal without waking Xcode.

What it does
Baguette is a single Swift binary that wraps Apple’s private SimulatorKit and CoreSimulator frameworks into a headless control plane for iOS 26 simulators. It boots devices, streams their screens at 60 fps over WebSocket or stdout, and injects taps, swipes, multi-finger gestures, keyboard events, and hardware button presses from the host side. A built-in web UI renders a device farm, per-simulator focus pages, and in-browser MP4 recording, while the CLI returns accessibility trees, unified logs, and screenshots as structured data.
The interesting bit
Instead of poking at Simulator.app’s NSView layer, Baguette fires raw IOHIDDigitizerDispatch events and GSEventTypeDeviceOrientationChanged mach messages directly at PurpleWorkspacePort, which keeps the host truly headless and triggers real iOS gesture recognizers live. It even pipes your Mac’s webcam into the simulator’s camera stack by pumping BGRA frames through a shared-memory ring buffer, though that particular path does require a small dylib injection.
Key highlights
- Streams MJPEG or H.264/AVCC with runtime-tunable bitrate, fps, and scale
- Injects host-side HID input including two-finger gestures, pinch, pan, and Apple Watch digital crown without
DYLD_INSERT_LIBRARIESon the input path - Exposes the accessibility tree as JSON via the private
AccessibilityPlatformTranslationframework - Rotates devices by firing a
GSEventTypeDeviceOrientationChangedmach message atPurpleWorkspacePort, bypassing SimulatorKit’s NSView path entirely - Ships with 460+ Swift Testing cases using auto-generated mocks for every external port, so the test suite needs no simulator to run
Caveats
- Requires Xcode 26 and runs only on Apple Silicon Macs
- Camera injection relies on a vendored
VirtualCamera.dylibloaded viaDYLD_INSERT_LIBRARIES, unlike the clean host-HID path
Verdict
Worth a look if you’re building CI pipelines or automation around iOS simulators and need real gesture fidelity without the Simulator.app window. Skip it if you’re not on Apple Silicon or you’re uncomfortable relying on Xcode’s private framework symbols.
Frequently asked
- What is tddworks/baguette?
- Baguette exists so you can farm, stream, and finger-tap iOS simulators from a browser or terminal without waking Xcode.
- Is baguette open source?
- Yes — tddworks/baguette is open source, released under the Apache-2.0 license.
- What language is baguette written in?
- tddworks/baguette is primarily written in Swift.
- How popular is baguette?
- tddworks/baguette has 1.6k stars on GitHub.
- Where can I find baguette?
- tddworks/baguette is on GitHub at https://github.com/tddworks/baguette.