Skip to content

jo-duchan/tapflow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

584 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

tapflow

A self-hosted Appetize / BrowserStack alternative for mobile QA teams

Run iOS simulators and Android emulators in any browser β€” no toolchain setup, no device management, no cloud uploads.
App data never leaves your network.

MIT License Node.js β‰₯ 20 macOS Agent PRs welcome Roadmap

πŸ“– 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.


Why tapflow?

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

Features

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/screenshot for 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-server lets Claude Code and other LLM agents control simulators as native tools.

How it works

Browser (your team)  ←─ WebSocket ─→  Relay Server  ←─ WebSocket (outbound) ─→  Mac Agent
                                    (Linux / Mac)                           (iOS Β· Android)
  1. The Mac Agent connects outbound to the relay β€” no inbound firewall rules needed.
  2. Anyone on the team opens the dashboard in any browser and sees all available devices.
  3. Touch events are forwarded in real time; the screen streams back to the browser.
  4. The relay also serves the dashboard SPA on the same port β€” no separate web server needed.

Quick Start

1. Install

npm install -g tapflow
# or: yarn global add tapflow  |  pnpm add -g tapflow

2. Start relay + agent

tapflow 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).

3. Create the first admin account

tapflow init
# ? Admin email: admin@yourteam.com
# ? Password: ********
# βœ“ Admin account created

4. Open the dashboard

Navigate to http://localhost:4000 and sign in with the account you just created.

Having issues? Run tapflow doctor to auto-diagnose Node.js, Xcode, adb, and other prerequisites.

Requirements

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

Self-Hosting

Local (single Mac)

Relay and agent on the same machine β€” ideal for a single developer or small team.

tapflow start

Team (separate relay server)

Run 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 startup

Each Mac agent:

tapflow agent start --relay wss://your-relay-url

For nginx / Caddy reverse proxy setup and external access, see Self-Hosting the Relay.

CLI Reference

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

Documentation

www.tapflow.dev

Getting Started

Setup

Dashboard

AI Agent

Reference

Troubleshooting

Development

Requirements: Node.js β‰₯ 20, pnpm β‰₯ 9

git clone https://github.com/jo-duchan/tapflow.git
cd tapflow
pnpm install
pnpm dev

See CONTRIBUTING.md for branch strategy, commit conventions, and architecture overview.

License

MIT β€” Copyright Β© 2025-present tapflow contributors

tapflow bundles scrcpy-server (Apache-2.0) for Android screen streaming. See NOTICE for full attribution.