Run iOS simulators and Android emulators in any browser β no toolchain setup, no device management, no cloud uploads.
App data never leaves your network.
π Docs Β Β·Β π Quick Start Β Β·Β π₯ Demo
new-demo.mp4
v0.x: tapflow is under active development. Breaking changes may appear in minor versions until v1.0.0. See ROADMAP for the full plan.
If you work on a mobile product, you've probably seen this.
Physical devices are never enough. Covering every OS version is even harder β iOS doesn't support downgrading, so maintaining a range of versions means managing a pool of locked devices, which is overhead nobody wants.
But the bigger friction is access. Simulators only run on a developer's Mac, behind complex developer toolchains. Anyone on the team who isn't a mobile developer has to ask one every single time they need to verify something:
Server / FE developer β "How do I install the sandbox build to check what was deployed?"
Product manager β "I keep having to install and remove different versions just to compare behavior."
Designer β "I need to check the layout across screen sizes, but I don't have the right devices."
Cloud simulator services exist. But uploading internal app builds to an external service β and paying monthly fees for simulators already running on Macs you own β was never something we wanted to do.
So we built tapflow.
| Solution | Problem |
|---|---|
| Appetize / BrowserStack | Expensive β app data leaves your network |
| Physical devices | Cost, loss, management overhead |
| Xcode / Android Studio | Every QA member needs their own Mac + full toolchain setup |
| tapflow | Use the Mac you already own β data stays on-prem, whole team does QA from a browser |
tapflow focuses on:
- Zero setup for QA β any browser, no toolchain. Designers, PMs, and server devs test without asking a mobile developer.
- Data on-premises β app binaries and session recordings never leave your network.
- Your existing Mac β no new hardware, no monthly cloud subscription.
- API-first β REST endpoints and PATs built in, ready for CI/CD and AI agent workflows.
What's included:
- iOS & Android streaming β ~30 fps, no additional app required on the device
- Touch, swipe & pinch β real-time input forwarded to the simulator
- Deeplink β jump directly to any screen from the QA toolbar, no manual navigation
- Keyboard shortcuts β simulator toolbar actions without leaving the keyboard
- App Center β upload
.app.zip/.apk, track builds by status (Backlog / In Progress / Done / Rejected) - Session recordings β record and share QA sessions, retained 72 hours
- Screenshot REST endpoint β
GET /api/v1/sessions/:sessionId/screenshotfor CI and AI agents - Mac resource monitoring β CPU & RAM per agent, spot overloaded hosts before assigning sessions
- Team management β invite links, roles (Admin / Developer / QA / Viewer), Personal Access Tokens
- MCP Server (experimental) β
@tapflowio/mcp-serverlets Claude Code and other LLM agents control simulators as native tools.
Browser (your team) ββ WebSocket ββ Relay Server ββ WebSocket (outbound) ββ Mac Agent
(Linux / Mac) (iOS Β· Android)
- The Mac Agent connects outbound to the relay β no inbound firewall rules needed.
- Anyone on the team opens the dashboard in any browser and sees all available devices.
- Touch events are forwarded in real time; the screen streams back to the browser.
- The relay also serves the dashboard SPA on the same port β no separate web server needed.
npm install -g tapflow
# or: yarn global add tapflow | pnpm add -g tapflowtapflow start
# β Relay started on http://localhost:4000
# β iOS Agent connected (3 simulators available)This starts both the relay and the agent on the same Mac (local mode).
tapflow init
# ? Admin email: admin@yourteam.com
# ? Password: ********
# β Admin account createdNavigate to http://localhost:4000 and sign in with the account you just created.
Having issues? Run
tapflow doctorto auto-diagnose Node.js, Xcode,adb, and other prerequisites.
| Component | Requirements |
|---|---|
| Relay server | Node.js β₯ 20, any OS (Linux/macOS), ~512 MB RAM |
| iOS Agent | macOS, Xcode with iOS Simulator Runtime, Node.js β₯ 20 |
| Android Agent | macOS, Android SDK (adb in $PATH or $ANDROID_HOME set), AVD with google_apis/arm64-v8a (android-34), Node.js β₯ 20 |
| Browser (QA) | Any modern browser β Chrome, Firefox, Safari, Edge |
Relay and agent on the same machine β ideal for a single developer or small team.
tapflow startRun the relay on a Linux server or dedicated Mac. Each Mac with simulators runs the agent.
Relay server:
# Recommended: PM2 for automatic restarts
npm install -g pm2 tapflow
JWT_SECRET=$(openssl rand -hex 32) pm2 start tapflow --name relay -- relay start
pm2 save && pm2 startupEach Mac agent:
tapflow agent start --relay wss://your-relay-urlFor nginx / Caddy reverse proxy setup and external access, see Self-Hosting the Relay.
| Command | Description |
|---|---|
tapflow start |
Start relay + agent together (local mode) |
tapflow relay start |
Start relay only |
tapflow agent start --relay <url> |
Start agent and connect to a relay |
tapflow init |
Create the first admin account |
tapflow doctor |
Diagnose environment (Node, Xcode, adbβ¦) |
tapflow devices |
List available simulators and emulators |
tapflow boot <name|udid> |
Boot a simulator or emulator |
tapflow status |
Show connected agents, devices, active sessions |
tapflow reset |
Shut down all simulators and emulators |
tapflow logs |
Show recent relay log entries |
Full reference β CLI docs
Getting Started
Setup
Dashboard
AI Agent
- MCP Server (experimental)
Reference
Requirements: Node.js β₯ 20, pnpm β₯ 9
git clone https://github.com/jo-duchan/tapflow.git
cd tapflow
pnpm install
pnpm devSee CONTRIBUTING.md for branch strategy, commit conventions, and architecture overview.
MIT β Copyright Β© 2025-present tapflow contributors
tapflow bundles scrcpy-server (Apache-2.0) for Android screen streaming. See NOTICE for full attribution.