One folder, a dozen repos, one screen — no port collisions.
Point Mission Control at the folder where you keep your projects and press start.
It auto-detects every dev project, infers how to launch each one from its own
files, and runs them all at once on collision-free ports — with live logs, git
status, and health in a single view. No cd rituals, no port-clash detective
work, no stray node holding port 5173 from yesterday.
🔒 Local-only by design. Binds
127.0.0.1(HTTP + WebSocket), never0.0.0.0. No accounts, no telemetry, no phone-home.
Part of Fervon — a small studio of local-first developer tools.
⭐ If Mission Control saves you a single
cd+ port-clash hunt, give it a star — it's the fastest way to help it grow. Got a project it can't auto-detect, or an idea? Open an issue.
If you keep a dozen projects in one folder, you know the dance: cd into each
one, remember its dev command, discover two of them both want port 5173, kill
the stray node that's still holding a port from yesterday. Mission Control
replaces all of that with one screen.
- Zero-config auto-detection — scans your projects folder and infers each
project's type and dev command from its own files (
package.jsonscripts, Vite / Next / Astro / Electron, Express/Fastify, static sites, Python/FastAPI, Telegram bots, npm-workspace monorepos, andbackend/+frontend/splits). - Launch many at once, never a port clash — every project gets a unique port
in a configurable range (default
4000–4099), injected at launch (PORTenv + the right CLI flag per framework). Run five at the same time, all isolated. - Live logs streamed over WebSocket (ANSI-clean), with filter / follow / clear.
- Git at a glance — branch, dirty count, ahead/behind, last commit.
- Health — npm/PyPI published version + GitHub CI status (via
gh), cached. - Friendly failures — missing
node_modules? A one-click Install button. Missing env/token? A clear hint instead of a red wall. - Live re-scan — drop a new project folder in and it animates into the grid (filesystem watcher), no restart.
- Clean process control — start/stop with full process-tree kill on Windows
(
taskkill /T /F), so nothing is left holding a port.
Mission Control is meant to live inside the folder it manages:
~/code/ ← your projects root
├── project-a/
├── project-b/
└── mission-control/ ← clone here
git clone https://github.com/JoniMartin27/launchpad
cd launchpad
npm install
npm run build # build the web UI
npm start # serve UI + API + WS on http://127.0.0.1:7777Open http://127.0.0.1:7777. On first run it scans the parent folder, seeds a
local config.json, and shows your projects. That's it.
Different projects folder? Set
MISSION_CONTROL_PROJECTS_ROOT=/path/to/code(env var) or editsettings.projectsRootinconfig.json.
npm run dev # Fastify (:7777) + Vite (:5180) with HMRnpm test # server suite — 67 tests via node:test| Module | Role |
|---|---|
server/src/discovery.js |
Scans the projects root, classifies each project generically (no hardcoded names), resolves unique ports. |
server/src/launcher.js |
Spawns the dev command with the port injected, streams logs, tree-kills on stop. |
server/src/frameworks.js |
Per-framework table: how to inject the port (env var + CLI flag). |
server/src/watcher.js |
Debounced fs.watch on the root → live add/remove of projects. |
server/src/git.js · metrics.js |
Git status and npm/PyPI/CI health, cached and non-blocking. |
See SPEC.md for the full REST + WebSocket contract and
DESIGN.md for the UI design system.
Discovery is hybrid: an automatic filesystem scan, unioned with per-project
overrides in config.json (machine-local, git-ignored — see
config.example.json). Edit it by hand or from the
dashboard. Per project you can override:
| Field | Meaning |
|---|---|
port |
Pin the assigned port |
name |
Display name |
command |
Override the dev command |
portFlag / portEnv |
How the port is passed (e.g. --port, PORT) |
env |
Extra environment variables (${PORT} is substituted) |
hidden / runnable |
Hide a card / mark it non-launchable |
cwd |
Working directory |
Global settings live under settings (projectsRoot, dashboardPort,
portRange, metricsTtlSec, readyRegex, autoScan).
- Node 20+ (CI runs on Node 20 and 22). Optional:
gitand the GitHubghCLI for git/CI panels;uvfor Python/FastAPI projects. All degrade gracefully if absent. - Built and tested on Windows; the launch/port logic is Windows-aware (process-tree kill, dual-stack readiness probe).
Single-user, loopback-only. Every request is checked for a loopback remote
address; the socket binds 127.0.0.1 exclusively. It launches processes you
already have on disk with commands derived from those projects — treat it like
running npm run dev yourself. See SPEC.md §9.
MIT
