# tapflow

> Self-hosted tool that streams iOS simulators and Android emulators running on your own Macs to any browser for team mobile QA.

tapflow is an open-source, MIT-licensed tool from jo-duchan that lets a team run iOS simulators and Android emulators in a browser. Simulators keep running on Macs the team already owns, while builds, streams, and recordings stay on infrastructure the team controls. The latest release listed on GitHub is v0.28.1, and the README describes the project as v0.x and actively developed.

## What It Is

tapflow is a self-hosted alternative to cloud simulator services such as Appetize and BrowserStack, aimed at mobile QA teams. It lets non-mobile teammates such as backend developers, product managers, and designers test apps from a browser without installing Xcode or Android Studio. The README states that it is not a device farm and does not replace native mobile development tools.

## How It Works

The system has three parts: a self-hosted relay (Linux or Mac) that also serves the dashboard, a macOS agent that drives the iOS Simulator and Android emulator, and a browser dashboard. The agent connects outbound to the relay, so no inbound firewall rules are needed, and it injects iOS touch input without WebDriverAgent. Users pick an available device in the dashboard and interact with it in real time, with video streamed as H.264 and a JPEG fallback for browsers that lack a suitable decoder.

## QA and Automation Features

The dashboard supports touch, swipe, and pinch input, clipboard sync, device audio, network on/off control, deeplinks, and keyboard shortcuts. An App Center takes `.app.zip` and `.apk` uploads and tracks builds by status. Session recordings are kept on the relay for about 72 hours. For automation, there is a REST API with Personal Access Tokens and a screenshot endpoint, an experimental YAML flow runner that produces JUnit reports, and an experimental MCP server for LLM agents.

## Setup Path

Install the CLI through npm, run `tapflow setup` on the Mac that will host an agent, and run `tapflow start` to launch the relay and agent locally. For teams, the relay can run on a separate Linux server or Mac, through PM2 or Docker, with each Mac agent pointed at it using an agent-scope token. The relay needs Node.js 22 or later, and agents run on macOS only.

## Features
- Browser streaming of iOS simulators and Android emulators
- H.264 streaming with WebCodecs/WASM decoding and JPEG fallback
- Touch, swipe and pinch input
- Clipboard sync and device audio
- Network on/off control for offline testing
- Deeplink toolbar and keyboard shortcuts
- App Center for .app.zip and .apk builds
- Session recordings kept about 72 hours
- Screenshot REST endpoint
- Mac resource monitoring per agent
- Team management with roles and Personal Access Tokens
- Experimental YAML flow runner with JUnit report
- Experimental MCP server for LLM agents
- Self-hosted relay via npm, PM2 or Docker

## Integrations
Docker, PM2, Xcode, Android SDK, scrcpy, Claude Code, MCP, nginx, Caddy

## Platforms
MACOS, LINUX, ANDROID, IOS, WEB, API, CLI

## Pricing
Open Source

## Version
v0.28.1

## Links
- Website: https://www.tapflow.dev
- Documentation: https://www.tapflow.dev/get-started/introduction
- Repository: https://github.com/jo-duchan/tapflow
- EveryDev.ai: https://www.everydev.ai/tools/tapflow
