Chuyển đến nội dung chính

tapflow: self-hosted simulator streaming for your whole team

tapflow is a self-hosted alternative to Appetize and BrowserStack: it streams iOS Simulators and Android emulators running on your own Macs into any browser. 530★, MIT, last pushed 2026-08-28.

What is tapflow?

Every Flutter team hits the same wall eventually. The mobile developers can run the app whenever they like. Everyone else — the designer checking a layout, the PM comparing two builds, the backend developer who wants to see what actually shipped to sandbox — has to ask a mobile developer, every single time.

The usual answers all cost something. Physical devices cost money and OS coverage and someone’s afternoon. Appetize and BrowserStack cost a subscription and require uploading internal builds to a third party. Giving everyone Xcode costs everyone a Mac and a full toolchain.

tapflow’s answer is to reuse the Macs you already have. It has three pieces:

  1. a relay (Linux or macOS) that also serves the dashboard on the same port
  2. a macOS agent that drives the simulator or emulator, connecting outbound to the relay — no inbound firewall rules, and no WebDriverAgent, because it injects iOS touch directly
  3. a browser dashboard for everyone else

Why it matters for Flutter teams

Flutter’s promise is that one team ships to both platforms. In practice, QA stays stuck on whoever owns the Mac. tapflow moves that bottleneck without moving your builds off your own infrastructure.

The streaming is more considered than you would expect from a v0.x project. Both platforms stream H.264 through a two-tier decoder — WebCodecs on a secure context, a WASM decoder on plain HTTP — deliberately skipping Media Source Extensions so the media element’s buffer never enters the decode path. The project publishes its own latency measurements: p50 around 11–17 ms decode-to-present with the software decoder, plus your network round trip. Older browsers fall back to JPEG rather than failing.

Around the stream sit the things a QA workflow actually needs: touch, swipe and pinch forwarded live; a deeplink toolbar; an App Center that takes .app.zip and .apk uploads and tracks builds through Backlog / In Progress / Done / Rejected; session recordings kept ~72 hours then purged; per-agent CPU and RAM so you can see which Mac is overloaded; and roles — Admin, Developer, QA, Viewer — with invite links and personal access tokens.

Getting started

npm install -g tapflow

On the Mac that will run an agent, install the simulator prerequisites:

tapflow setup

Then start the relay and agent together:

tapflow start

That prints the relay URL (http://localhost:4000 by default). Open it and tapflow redirects you to /setup to create the first admin account — or use tapflow admin init on a headless server. tapflow doctor re-checks prerequisites if something looks wrong.

Skip tapflow setup on a relay-only Linux box; it only needs Node 22+ and about 512 MB of RAM.

When should you use tapflow?

  • non-developers on your team need to try a Flutter build and currently cannot
  • you are paying for Appetize or BrowserStack mainly for simulator access, not real hardware
  • policy or client contract says internal builds must not be uploaded to a third-party cloud
  • you want an LLM agent or CI job to drive a simulator through MCP or REST

Where it falls short

Agents are macOS-only, and always will be — they drive Xcode’s simulator and the Android emulator on a Mac. The relay runs anywhere; the machines doing the actual work do not.

It is v0.x and says so. The maintainers promise backward compatibility by default and note breaking changes in the changelog, but that is a promise, not a track record.

And it is explicitly not a device farm and not an Appium replacement. It ships a minimal flow runner of its own; wiring in WebDriverAgent or Appium is out of scope by design. If your QA plan depends on real hardware quirks — a specific OEM’s camera stack, a real modem, thermal throttling — a simulator stream will not find those bugs no matter how good the latency is.

Alternatives worth comparing

Frequently asked questions

Is tapflow a device farm?

No. It streams simulators and emulators that run on Macs you already own; it does not manage a pool of physical phones. The project says so explicitly — it makes running simulators reachable from a browser, nothing more.

Do my Flutter builds get uploaded anywhere?

No. tapflow is self-hosted by design. App binaries, device streams and session recordings stay on the relay you run. That is the main reason to pick it over Appetize or BrowserStack.

Does the whole team need a Mac?

Only the machines running agents. The relay runs on any OS with Node 22+, and QA users need nothing but a modern browser — no Xcode, no Android Studio, no Flutter SDK.

Can an AI agent drive tapflow?

Yes. @tapflowio/mcp-server exposes simulator control as MCP tools for Claude Code and other agents, and there is a REST screenshot endpoint at /api/v1/sessions/:sessionId/screenshot for CI.


Part of FlutterCook — hands-on guides to the best open-source Flutter libraries, UI kits, and apps. Explore the live GitHub trends or browse YouTube guides.


Originally published on FlutterCook. Read the latest version there — that copy is the one kept up to date.

Nhận xét

Bài đăng phổ biến từ blog này

5 concepts every Flutter dev should know

  Phụ lục: State management architecture Testing IDE Shortcuts Platform channel Maintaining a project Tôi đã làm việc với Flagship trong một thời gian dài, và đây là những điều mà tôi phát hiện ra là điều cần phải có đối với bất kỳ nhà phát triển Flagship nào, về tổng thể nó sẽ khiến bạn trở thành một nhà phát triển Flagship giỏi trong thời gian dài. 1. State management architecture Đây là một trong những chủ đề quan trọng nhất trong cộng đồng thiết bị rung, nó khá quan trọng nếu bạn muốn duy trì một dự án rung kích thước trung bình hoặc lớn. Nó sẽ giúp tạo một dự án suôn sẻ và thêm các tính năng mới một cách hoàn hảo.  2. Testing Đây là một chủ đề duy nhất mà tôi không hiểu tại sao nó lại quan trọng trước đó trong sự nghiệp của tôi, nhưng khi tôi tiến lên trong sự nghiệp của mình và có kinh nghiệm với nhiều dự án và vấn đề xảy ra trong môi trường sản xuất. Tôi đã nhận ra một cách khó khăn, tại sao điều này lại quan trọng như vậy. Nếu bạn vẫn muốn có thêm lý do để cân nhắc thử...

Thiết kế giao diện với DotNetBar (Phần 1)

Đây là phiên bản DotNetBar hỗ trợ C# và Visual Basic https://www.dropbox.com/s/wx80jpvgnlrmtux/DotNetBar.rar  , phiên bản này hỗ trợ giao diện Metro cực kỳ “dễ thương” Các bạn load về và cài đặt, khi cài đặt xong sẽ có source code mẫu của tất cả các control. Để sử dụng được các control của DotNetBar các bạn nhớ add item vào controls box. Thiết kế giao diện với DotNetBar, giao diện sẽ rất đẹp. Link các video hướng dẫn chi tiết cách sử dụng và coding: http://www.devcomponents.com/dotnetbar/movies.aspx Hiện tại DotNetBar có rất nhiều công cụ cực mạnh, trong đó có 3 công cụ dưới đây: DotNetBar for Windows Forms Requires with Visual Studio 2003, 2005, 2008, 2010 or 2012.   DotNetBar for WPF Requires with Visual Studio 2010 or 2012 and Windows Presentation Foundation.   DotNetBar for Silverlight Requires with Visual Studio 2010 or 2012 and Silverlight. Dưới đây là một số hình ảnh về các control trong DotnetBar.   Metro User Interface  controls with Metro Tiles, toolba...

Announcing Flutter 2

  Phụ lục: Flutter on the web Flutter 2 on desktops, foldables, and embedded devices The growing Flutter ecosystem Dart: The secret sauce behind Flutter Flutter 2: Available now Hôm nay, chúng tôi sẽ công bố Flutter 2: một bản nâng cấp lớn cho Flutter cho phép các nhà phát triển tạo các ứng dụng đẹp, nhanh chóng và di động cho bất kỳ nền tảng nào. Với Flutter 2, bạn có thể sử dụng cùng một cơ sở mã để gửi các ứng dụng gốc cho năm hệ điều hành: IOS, Android, Windows, macOS và Linux; cũng như trải nghiệm web nhắm mục tiêu các trình duyệt như Chrome, Firefox, Safari hoặc Edge. Flutter thậm chí có thể được nhúng vào ô tô, TV và thiết bị gia dụng thông minh, mang đến trải nghiệm di động và lan tỏa nhất cho thế giới điện toán xung quanh. Mục tiêu của chúng tôi là thay đổi cơ bản cách các nhà phát triển nghĩ về việc xây dựng ứng dụng, bắt đầu không phải với nền tảng bạn đang nhắm mục tiêu mà là với trải nghiệm bạn muốn tạo. Flutter cho phép bạn tạo ra những trải nghiệm tuyệt đẹp trong đó ...