finds.dev← search

// the find

EvanBacon/serve-sim

★ 2,558 · TypeScript · Apache-2.0 · updated Jul 2026

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.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →