Dev Servers
SnakeFlow can manage any number of dev servers — Next.js, Vite, FastAPI, Django, Rails, Go, Rust, PHP — any runtime, any command.
Each server runs in a named VS Code terminal and is monitored via TCP port check + terminal presence. Status is visible in the sidebar and status bar in real time.
Server Configuration
Add servers to .vscode/settings.json:
"devManager.project.servers": [ { "id": "web", "label": "Frontend", "command": "npm run dev", "path": "", "port": 3000 }, { "id": "api", "label": "API Server", "command": "python manage.py runserver 8000", "path": "backend", "port": 8000 }, { "id": "studio", "label": "Prisma Studio", "command": "npx prisma studio", "path": "", "port": 5555, "startWithAll": false }]Server Fields
| Field | Required | Description |
|---|---|---|
id | ✅ | Unique identifier — used as terminal name prefix |
label | ✅ | Display name in the server menu and status bar |
command | ✅ | Shell command to start the server |
path | — | Relative working directory from project root ("" = root) |
port | — | TCP port to monitor for live status (0 = no monitoring) |
startWithAll | — | Include in Start all (Ctrl+Alt+S). Default true. Set false for optional tools you start only from the server menu (e.g. Prisma Studio, Storybook). |
Commands
| Action | Keybinding | How to open |
|---|---|---|
| Start all (bulk) | Ctrl+Alt+S | Tools menu (Ctrl+Alt+M) → Start all servers — only entries with startWithAll not false |
| Stop all | Ctrl+Alt+Q | Tools menu or server menu → Stop all — stops every configured server |
| Restart all | Ctrl+Alt+R | Server menu → Restart all — stop all, then bulk start |
| Per-server Start / Stop / Restart | — | Click the server indicator in the status bar → pick a server → choose action |
| Manage Servers | — | Command Palette → SnakeFlow: Manage Servers, or server menu → Manage Servers |
Examples
Single-app (Node.js)
[{ "id": "web", "label": "Dev Server", "command": "npm run dev", "path": "", "port": 3000 }]Monorepo (Turborepo / pnpm)
[ { "id": "web", "label": "Frontend", "command": "pnpm run dev", "path": "apps/web", "port": 5173 }, { "id": "api", "label": "API", "command": "pnpm run dev", "path": "apps/api", "port": 8787 }, { "id": "inngest", "label": "Inngest", "command": "pnpm dlx inngest-cli@latest dev", "path": "apps/web", "port": 8288 }]Python + React
[ { "id": "frontend", "label": "React", "command": "npm run dev", "path": "frontend", "port": 3000 }, { "id": "backend", "label": "Django", "command": "python manage.py runserver 8000", "path": "backend", "port": 8000 }, { "id": "celery", "label": "Celery Worker", "command": "celery -A config worker -l info", "path": "backend", "port": 0 }]Go microservices
[ { "id": "gateway", "label": "API Gateway", "command": "go run ./cmd/gateway", "path": "services/gateway", "port": 8080 }, { "id": "auth", "label": "Auth", "command": "go run ./cmd/auth", "path": "services/auth", "port": 8081 }]Optional tools (menu only)
Add a separate server entry for each command you want in the menu — nothing is built into the extension:
{ "id": "studio", "label": "Prisma Studio", "command": "npx prisma studio", "path": "", "port": 5555, "startWithAll": false}Ctrl+Alt+Sskips entries withstartWithAll: false- Status bar → server menu → pick Prisma Studio → Start
- Stop all still stops Studio if it was started (same full stop cycle: Ctrl+C → port kill → dispose terminal)
When adding a server via Manage Servers, step 5 asks whether to include it in bulk start.
Status Monitoring
Server status is shown in:
- Status bar — combined server indicator; click to open the per-server menu
- Server menu — live status line per entry (
Running,Stopped, port/PID when applicable)
Status uses a combined check: TCP port open AND the terminal is still running. This avoids false positives from external processes using the same port.
| Status | Meaning |
|---|---|
| 🟢 Running | Port is open and terminal is alive |
| 🔴 Stopped | Port is closed or terminal was closed |
| ⚪ No port | Server has port: 0 — terminal presence only |