entropyconquers / simfleet
git clone https://github.com/entropyconquers/simfleet.git
v0.1.1 · 22d ago
One control plane for parallel React Native work on macOS: slimmed iOS simulators & Android emulators, live dashboard, leased Metro ports, shared native build cache, and Claude Code / Codex device attribution.
—
stars, 24h
—
stars, 7 days
+122
stars, 30 days · #1,917
122
★ total
4
forks · 3 open issues
Star history starts 2026-10-20; the chart appears after the second daily snapshot.
LanguageTypeScript
LicenseMIT
Created2026-09-25 (25d ago)
Last push22d ago
Watchers0
OwnerUser
GitHub topics
Links
- GitHub: github.com/entropyconquers/simfleet
- Homepage: https://entropyconquers.github.io/simfleet/
- Releases · Issues · Hacker News mentions
README excerpt
simfleet One control plane for parallel React Native work on macOS. Slimmed iOS simulators and Android emulators, a live browser dashboard, leased Metro ports, a shared native build cache, and per-agent device attribution for Claude Code and Codex. Documentation · Quickstart · API reference https://github.com/user-attachments/assets/96422e28-f5a8-400b-b8d9-9a2530fa1eda --- Running several branches of a React Native app at once usually means five simulators eating 4 GB each, Metro servers fighting over port 8081, native rebuilds every time you switch environments, and coding agents stepping on each other's devices. simfleet turns that into one managed fleet: - **Always slim.** Every iOS simulator is trimmed with SimSlim (about 3.8 GB → 1.3 GB) and every Android emulator with avdslim (`-lowram`, host GPU, ~45 background packages disabled). Devices booted any other way (Xcode, Android Studio, `simctl`) are slimmed automatically. - **One live dashboard.** Every booted device streams into a browser wall you can drive directly: iOS over MJPEG, Android as hardware H.264 through scrcpy's device server with real touch down/move/up (15–80 ms input-to-frame on an M-series Mac). - **Lanes, not port juggling.** A lane is one worktree on one device with one leased Metro port from the environment's range. Lanes refuse to steal a device, worktree, or port. - **Native builds once.** An Expo `buildCacheProvider` fingerprints native inputs (JS excluded) and single-flights misses, so ten agents on JS-only branches share one build, and switching staging/production never rebuilds native. - **Know which agent is where.** Every CLI call from a Claude Code or Codex session is attributed to the device it touches; sessions can claim devices. A menu-bar icon shows who is driving what. ## Requirements - macOS, Bun ≥ 1.1 - iOS: Xcode, plus `brew install mobai-app/tap/simslim baguette watchman` - Android: the Android SDK (platform-tools and emulator, via `ANDROID_HOME` or `~/Library/Android/sdk`), plus `brew tap kdbhalala/avdslim https://github.com/kdbhalala/avdslim.git && brew install avdslim scrcpy` Each platform is optional; `simfleet status` and the dashboard report what is missing. ## Quick start [code] Then, in another terminal (or from an agent): [code] Android works the same way with AVD names: [code] ## Using the dashboard Open http://127.0.0.1:8790 (or click the menu-bar icon). The wall shows every simulator and emulator with state, memory footprint, slim status, lane, and attached agents. Open a device to control it: click to tap, drag to swipe, scroll to scroll, press Enter to send keystrokes and Esc to release. The inspector has lifecycle actions, hardware buttons, text entry, deep links, and lane controls. The page follows the system light/dark theme, is keyboard and screen-reader accessible, and reloads itself when the dashboard is upgraded. The menu-bar icon starts with `simfleet serve` (disable with `--no-tray` or `SIM_FLEET_TRAY=0`