← all repositories
tddworks/baguette

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.

baguette
Velocity · 7d
+36
★ / day
Trend
steady
star history

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 serve spins up the full dashboard; baguette tap/swipe/key work from scripts
  • 460+ Swift Testing cases with auto-generated mocks for every external port — swift test needs no simulator
  • Camera injection (0.1.72): pipes Mac webcam BGRA frames through a shared-memory ring buffer into AVCaptureVideoPreviewLayer
  • Accessibility inspector: describe-ui returns 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_LIBRARIES into every sim-launched app via a vendored VirtualCamera.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.

heatdrop uses Google Analytics to see which pages get read — nothing else. Your call. How we handle data.