Skip to main content

Recipe: three projects in parallel

The mental model: one project = one terminal tab = one Metro. The shared registry lets each project see what the others occupy (busy devices, taken ports).

Setup (once)

cd ~/code/storefront && npx simgrid-cli init
cd ~/code/dashboard && npx simgrid-cli init
cd ~/code/chat && npx simgrid-cli init

Tab 1 — Storefront on two iPhones

~/code/storefront $ simgrid

simgrid Storefront
iOS Simulators
› [x] iPhone 15 ✅ build installed
[x] iPhone SE (3rd gen) ⚙️ will build

▶ Metro for Storefront on port 8081
iPhone 15: dev client → localhost:8081 ✓
iPhone SE (3rd gen): dev client → localhost:8081 ✓
✔ Storefront — Ctrl+C to stop

One Metro (:8081) for both iPhones. iPhone 15 launches instantly; iPhone SE is built once (simgrid asks how, then remembers).

Tab 2 — Dashboard on a Pixel

~/code/dashboard $ simgrid

iOS Simulators
[ ] iPhone 15 ✅ build installed · 🔴 busy: Storefront :8081
Android Emulators
› [x] Pixel 7 ✅ build installed

▶ Metro for Dashboard on port 8082
Pixel 7: dev client → localhost:8082 ✓
✔ Dashboard — Ctrl+C to stop

Note the 🔴 busy: Storefront :8081 tag — Dashboard sees iPhone 15 is taken, and its Metro takes the next free port, :8082.

Tab 3 — Chat on a busy sim → clone

~/code/chat $ simgrid

iOS Simulators
› [x] iPhone 15 ✅ build installed · 🔴 busy: Storefront :8081

? iPhone 15 is busy with "Storefront". Clone a fresh iPhone 15 for Chat? › Yes

▶ Metro for Chat on port 8083
iPhone 15 — simgrid: dev client → localhost:8083 ✓
✔ Chat — Ctrl+C to stop

Picking a busy simulator offers a clone (iPhone 15 — simgrid) — two windows of the same model, zero conflict.

The dashboard

$ simgrid status
● Storefront → iPhone 15 (Metro :8081, pid 41201)
● Storefront → iPhone SE (3rd gen) (Metro :8081, pid 41201)
● Dashboard → Pixel 7 (Metro :8082, pid 41588)
● Chat → iPhone 15 — simgrid (Metro :8083, pid 41922)

Three projects, four devices, three Metros — all visible. If a process dies, status purges it automatically (PID reconciliation).