Run simulators in the browser — no Appetize, no BrowserStack, no monthly fees.
App data never leaves your network.
alpha: tapflow is in active development (v0.x). Breaking changes may appear in minor versions until v1.0.0. See ROADMAP for known gaps.
tapflow-clip-final-compressed.mp4
| 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, QA team uses a browser |
- Browser-based — QA team needs no installation. Any modern browser works.
- iOS Simulator — JPEG frame streaming at ~30 fps via SimulatorKit IOSurface. No WebDriverAgent required.
- Android Emulator — H.264 streaming via scrcpy at ~30 fps.
- Touch, swipe & pinch — real-time input forwarded to the simulator.
- App Center — upload
.app.zip(iOS) or.apk(Android), manage builds by status (Backlog / In Progress / Done / Rejected). - Session Recordings — record QA sessions, share with your team. Retained for 72 hours.
- Mac Resources — CPU & RAM monitoring per agent. Spot overloaded hosts before assigning sessions.
- Team management — invite links, roles (Admin / Developer / QA / Viewer), Personal Access Tokens for CI/CD.
- Self-hosted — deploy anywhere. No cloud dependency.
Browser (QA 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.
- QA 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
- Introduction
- Quick Start
- Self-Hosting the Relay
- iOS Agent Setup
- Android Agent Setup
- Uploading Builds (CI/CD)
- CLI Reference
- Troubleshooting
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.