Announcing DroidFleet — public beta
DroidFleet is open for public beta today. It's a tool for testing Android apps on a fleet of real, physical phones — drag an APK onto a desktop window, watch it install in parallel on every device you own, see logs and crashes streamed back as they happen.
I've been building it for the better part of a year, on and off, mostly because I needed it myself. Today it's stable enough that other people should have it too. Here's the pitch, the story, and what's next.
The pitch
Mobile QA tools come in two flavors. Cloud test farms (BrowserStack, AWS Device Farm) rent you virtual access to phones in a datacenter. They're slow (every interaction round-trips through a video stream), expensive ($0.10–$1.00 per device-minute), and miss real-hardware bugs because the underlying devices are recycled, possibly tampered, and don't behave like the phone in your pocket. USB hubs are the DIY answer: plug 4 phones into your laptop, run ADB. Fast and cheap, but only one developer can use them at a time, ADB drops connections every other day, and the moment you want to share with a teammate it falls apart.
DroidFleet is a third option. The phones you already own — sitting in a drawer, on the office shelf, in your backpack — become a test grid. They connect outbound over the internet through a thin relay, so they don't need to be on the same Wi-Fi as your computer or each other. You drop an APK once; it goes to all of them in parallel. Logs stream back live. Crashes are deduplicated automatically. And it's free for up to 2 phones, $29/mo for 10.
What's in the beta
- Stable phone pairing. Each device gets a server-minted p_<12hex> identity. Survives reinstalls, deviceId rotations, and SharedPreferences wipes (as long as you re-pair).
- Drag-drop install. One file, one click, all phones — in parallel. Watch progress per device.
- Live log streaming. SSE-backed. Filter by phone, by package, by level. Export to file.
- Crash deduplication. Identical stack traces (top 5 app frames, line numbers stripped) merge into one CrashGroup. The same NullPointerException from 100 phones shows up once with a counter, not 100 separate tickets.
- Screenshot regression diffs. Compare cold-start, post-rotation, etc. between builds. Red overlay on changed pixels.
- A/B rollout cohorts. Push v2 to 20% of phones, keep v1.5 on the rest. Compare crash rates.
- Memory + network capture. dumpsys meminfo + ss -tpn samples sent back per session.
- Identify mode. Three identical phones on your desk? Click "ping" — it vibrates and shows a Toast. You know which is which.
- Webhooks. Subscribe Slack, Discord, your CI pipeline to install / crash / phone events. HMAC-signed payloads.
- Admin dashboard, account settings, status page, full HTTP API, OpenAPI-style docs, Prometheus metrics, Sentry hook, JWT + API keys, GDPR/CCPA-compliant data export, Stripe billing. The whole "real product" surface.
Architecture
Three pieces:
- Server (Node + TypeScript) — runs on your laptop or your VPS. SQLite by default; Postgres available for scale. Hosts the web UI, the HTTP API, and the relay client.
- Android agent (Kotlin + Jetpack Compose) — installs on each phone. Connects out to the relay. Handles install commands, log streaming, crash reporting, screenshot capture, memory + network sampling, and self-update.
- Relay (TypeScript on Render) — a stateless WebSocket fan-out that lets the server and the phones meet in a private "room" without either needing a public IP. You can self-host this too if you want full control.
Your phones never expose anything to the internet. The relay sees encrypted message envelopes; it doesn't see APKs or log contents. APK delivery uses an on-demand Cloudflared tunnel so the download URL works from anywhere in the world without you running a public file server.
Honest about what's NOT in the beta
- iOS. Coming this year. Same architecture, just a Swift agent.
- Test recording / replay. On the roadmap.
- Bluetooth peripheral simulation. On the roadmap.
- SOC 2 Type II. Q4 target.
Try it
# Self-host (Docker)
git clone https://github.com/droidfleet/droidfleet
cd droidfleet
docker compose up -d
# → http://localhost:3100
# Or VPS one-liner
curl -sSL https://get.droidfleet.dev/install.sh | bash -s -- \
--domain you.example.com --email [email protected]
Or click the big green button at droidfleet.dev and we'll provision a hosted account in 30 seconds. Free tier supports 2 phones; no credit card.
What I'm asking for
Try it. Tell me what breaks. [email protected] — I read every email.
If you have phones on a desk and you're tired of plugging cables, this is for you. If you're paying $200/mo to a cloud farm to test what your own hardware could do for free, this is definitely for you.
Thanks for reading. Now go test something.