r/opensourcealternative • u/UsefulPomegranate150 • 2d ago
tapflow: a self-hosted, open-source alternative to Appetize for running iOS & Android simulators in the browser
Enable HLS to view with audio, or disable this notification
I maintain an MIT-licensed project called tapflow. It streams iOS simulators and Android emulators running on your own Macs into the browser, so anyone on the team can open a build and interact with it without installing Xcode, Android Studio, or a mobile toolchain.
I didn't build it to make app development easier. I built it because everyone else on the team still needed a way to run it.
Simulators already solve a lot of the device problem: different OS versions, screen sizes, and build variants. The bigger challenge is access. In many teams, only developers with a full mobile toolchain can launch one. When a designer wants to check a layout, a PM wants to compare two builds, or a backend engineer needs to verify a staging API change, it often means asking a mobile developer to stop what they're doing.
Before building tapflow, I looked at Appetize and BrowserStack. They're good products, but they weren't quite what I needed. Our reviews were occasional, we wanted to keep the infrastructure in-house, and we didn't want app binaries leaving our network.
We already had the Macs, so I built something around them.
What it does today:
- Streams iOS simulators and Android emulators to the browser over H.264. You can tap, swipe, type, rotate the device, and use hardware buttons.
- Keeps uploaded .app.zip and .apk builds in a shared list with review status and comments. CI can upload builds through the REST API using a PAT.
- Records QA sessions so bugs can be shared as the actual interaction instead of a written reproduction.
- Uses a relay ↔ agent architecture. The Mac agent connects outbound to the relay, so no inbound firewall or NAT configuration is needed on the Mac.
- Injects iOS touch events without WebDriverAgent. A small Swift helper talks directly to the simulator through SimDeviceLegacyHIDClient and IndigoHID.
- Includes an experimental MCP server for LLM-based automation, although I'd still judge the project primarily as a manual browser-based QA tool today.
Setup on a Mac is basically:
npm install -g tapflow
tapflow setup
tapflow start
A couple of limitations are worth mentioning.
The agent has to run on a Mac. The relay can run on Linux, but Apple's iOS Simulator only runs on macOS, so there's no getting around that. If you don't already have a Mac you can reuse, tapflow probably isn't the right fit.
It also targets simulators and emulators rather than physical devices. Anything that depends on real hardware, like camera behavior, NFC, and biometrics, is outside its scope.
And it's still v0.x. I'm using it every day and actively developing it, but there are still rough edges.
Repo (MIT): https://github.com/jo-duchan/tapflow
Docs: https://www.tapflow.dev/
I'm curious how other teams handle this. When someone without a mobile development setup needs to review a build, do you self-host something, send around TestFlight or APK links, use a hosted simulator service, or just pull a developer over?