Show HN: Stream Android Emulators to a Browser Window A new open-source tool called serve-avd lets developers stream Android emulators to a browser window for use with AI agent tools like Codex, Cursor, or Claude Desktop, capturing the emulator's screen via adb screenrecord and exposing it as an H.264 WebCodecs stream with full interaction support. Created by an unnamed developer, serve-avd is a port of Evan Bacon's serve-sim for Android, requiring the Android SDK platform-tools and Node.js 18.17+, and works with any running Android emulator or physical device over adb without root or plugins. The npx serve of Android Emulators. Host your emulator for use with Agent tools like Codex, Cursor, or Claude Desktop — locally, over your LAN, or host on a remote machine and tunnel anywhere. npx serve-avd → Preview at http://localhost:3200 serve-emu.mov serve-avd captures the emulator's screen via adb screenrecord , exposes it as an H.264 WebCodecs stream with an MJPEG fallback plus a WebSocket control channel, and serves a browser preview UI on top. It works with any running Android Emulator and most physical devices over adb — no root, no plugin, no instrumentation in your app. It is a faithful Android port of serve-sim https://github.com/EvanBacon/serve-sim by Evan Bacon: same interface, same streaming design, same wire protocol — rebuilt on what Android and adb provide. - Smooth H.264 video stream in the browser WebCodecs , with instant paint on connect — no waiting for the next frame. - Full interaction: tap, drag, and fling with the mouse; scroll with the wheel. - Android navigation from the browser: Back, Home, Recents, power, volume, theme toggle, screenshot. - Keyboard forwarding — type into the emulator directly, Escape acts as Back, ⌘⇧H goes Home. - logcat is forwarded to the browser and mirrored into the browser console for browser-use MCP tools to read . - Recent actions are available in the browser Tools panel and serve-avd event-log . - UI hierarchy dumps for agents: serve-avd ax uiautomator → JSON . - Multiple emulators at once — boot and attach AVDs straight from the Devices panel. - Works headless over the same HTTP API when no browser is attached. Hosted emulators can be hard to test. serve-avd lets you test the hosted infra locally first for faster iteration. When you're ready to host an emulator remotely, simply tunnel the served URL and users can interact with the emulator as if it were running locally on their device. It's also a great way to hand an emulator to an AI agent: everything is driveable over plain HTTP + WebSocket, screenshots and UI dumps are one command away, and the event log tells you what the agent did. Requires the Android SDK platform-tools adb ; the emulator binary is needed to boot AVDs by name and a maintained Node.js LTS release https://nodejs.org/en/about/previous-releases Node 18.17+ . serve-avd finds your SDK via $ANDROID HOME , $ANDROID SDK ROOT , or the default SDK locations on macOS and Linux. The H.264 stream needs screenrecord --output-format=h264 present on every emulator image from the last decade . If it's unavailable, serve-avd automatically falls back to an MJPEG screenshot stream. serve-avd device... Start preview server default: localhost:3200 device = adb serial or AVD name boots it if needed serve-avd --no-preview device... Stream in foreground without a preview server serve-avd gesture '