Profile
Back to NewsBack
GitHub Trending 3 min
Reader Mode
tddworks/baguette: Headless control for Apple's Simulators — 3D models, taps, swipes, multi-finger gestures, 60 fps streaming, and a multi-device farm

tddworks/baguette: Headless control for Apple's Simulators — 3D models, taps, swipes, multi-finger gestures, 60 fps streaming, and a multi-device farm

10 hours ago

Baguette

Baguette

Bon appétit.

Headless iOS Simulator manager + host-side input injection for iOS 26.

CI Coverage Latest release License Swift 6.2 macOS 15+ Xcode 26

A single Swift CLI — baguette — plus a self-contained web UI that gives you full headless control of an iOS simulator without opening Xcode or Simulator.app. Boot devices, stream their screens at 60 fps, dispatch taps, swipes, multi-finger and system gestures, keyboard and hardware buttons, read the accessibility tree, tail the unified log, take screenshots and recordings, and feed the simulator a camera, a location, motion and a slower network — on iOS 26 and later, where the 5-argument HID call idb and AXe rely on stopped working.

Demo

https://github.com/user-attachments/assets/e904413f-16bb-4b3d-86d5-162333403cee

https://github.com/user-attachments/assets/c49c9f4b-0e4b-47ea-9272-3223b1ac7739

https://github.com/user-attachments/assets/65dc62ee-f0c7-48fb-9c57-5bd267c8c02f

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.

Install

brew install baguette

Apple Silicon with Xcode 26 — baguette links the private SimulatorKit / CoreSimulator frameworks that ship with Xcode. If Homebrew complains about Rosetta, see Troubleshooting.

Quick start

baguette serve                          # web UI at http://127.0.0.1:8421/simulators
open http://localhost:8421/farm         # every booted simulator side by side

baguette list baguette boot --udid <UDID> baguette tap --udid <UDID> --x 219 --y 478 --width 438 --height 954 baguette describe-ui --udid <UDID> # what's on screen, frames in device points

an App Store-sized screenshot, and a 10-second clip at the same size

baguette screenshot --udid <UDID> --size appstore-6.9 --output hero.png baguette record --udid <UDID> --size appstore-6.9 --duration 10 --output demo.mp4

Coordinates are device points, and --width / --height are the screen size in points (baguette chrome layout --udid tells you). For a long-lived session, pipe JSON gestures into baguette input — see the wire protocol.

What it covers

| Area | What you can do | |---|---| | Touches & gestures | Tap, swipe, pinch, pan, streamed one- and two-finger touches, home-indicator and pull-down system gestures → touches, double-tap | | Buttons & keyboard | Home, lock, volume, action, Watch crown; keystrokes, typed text, paste and clipboard sync → buttons, keyboard, paste | | Screen capture | Screenshots, recordings, frame streams to stdout, one output-size vocabulary, 3D device renders → screenshot, stream, recording, capture-size, 3d-rendering | | Accessibility | The on-screen AX tree as JSON, hit-testing, a hover inspector in the browser → accessibility, ax-inspector, ax-hit-test-sweep | | Logs | Live unified log, filtered by level, predicate or bundle id → logs | | Web UI | Focus-mode page with bezel, a multi-device farm, a JS SDK for your own page → device-farm, chrome-bezel, baguette-sdk, serve routes | | Device lifecycle | Boot, shut down, repair input after Xcode 27's Device Hub → boot, device-hub | | Device settings | Orientation, appearance, contrast, text size, status bar, shake → orientation, interface, status-bar, shake | | Simulated world | Mac webcam or a file as the camera, GPS and routes, CoreMotion, network conditioning → camera, location, motion, network | | Apps & files | Deep links and URL schemes, drag-and-drop app install and Photos → deep-links, file-upload | | Other screens | CarPlay and paired Watch, iPhone Duo and its hinge, a physical iPhone (preview) → companion-screens, iphone-duo, hinge, device-twin | | Plugins | Add panels and commands from a trusted bakery; they run as subprocesses → plugins |

More

Docs index · Commands · Wire protocol · Serve routes · Architecture · Contributing · Changelog

License

Apache License 2.0 — see LICENSE.

Chat with me