// the find
EvanBacon/serve-sim
The `npx serve` of Apple Simulators.
serve-sim turns any booted iOS Simulator into a browser-accessible remote session: MJPEG/H.264 video stream, WebSocket input injection, and a React UI on top. It's aimed at AI coding agents that need to see and drive a simulator without a physical Mac in front of them, but it's equally useful for plain remote debugging or CI screenshot testing.
The architecture is clean — a small compiled Swift binary handles framebuffer capture via simctl io, keeping the Node layer thin and the stream fast. Camera injection via DYLD_INSERT_LIBRARIES and AVFoundation swizzling is the right way to fake camera input in a simulator; the shared-memory approach means the helper outlives individual app launches. The Connect middleware integration is a genuine convenience — dropping `simMiddleware()` into an existing Vite or Metro server is straightforward, and the `proxyHelpers` option for single-port remote use handles the WebSocket upgrade path correctly. Test coverage is unusually deep for a tool like this, with over 60 test files covering codec parsing, HID input, stream config, and accessibility bridging.
arm64-only is a hard wall that will silently fail on Intel Macs with a binary error rather than a helpful message — the README buries this in a note block. The camera injection mechanism depends on `DYLD_INSERT_LIBRARIES`, which breaks for any app signed with hardened runtime and library validation enabled (common in production-signed builds); the docs don't call this out. The middleware's `proxyHelpers` mode requires callers to manually wire the `upgrade` event, and forgetting this leaves input silently broken — that footgun deserves a runtime warning. No Linux or Windows support is possible by design, which is fine, but the npm package will install everywhere and then fail at runtime with no pre-install guard.