Skip to content

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

FieldRequiredDescription
idUnique identifier — used as terminal name prefix
labelDisplay name in the server menu and status bar
commandShell command to start the server
pathRelative working directory from project root ("" = root)
portTCP port to monitor for live status (0 = no monitoring)
startWithAllInclude 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

ActionKeybindingHow to open
Start all (bulk)Ctrl+Alt+STools menu (Ctrl+Alt+M) → Start all servers — only entries with startWithAll not false
Stop allCtrl+Alt+QTools menu or server menu → Stop all — stops every configured server
Restart allCtrl+Alt+RServer menu → Restart all — stop all, then bulk start
Per-server Start / Stop / RestartClick the server indicator in the status bar → pick a server → choose action
Manage ServersCommand 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+S skips entries with startWithAll: false
  • Status bar → server menu → pick Prisma StudioStart
  • 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.

StatusMeaning
🟢 RunningPort is open and terminal is alive
🔴 StoppedPort is closed or terminal was closed
⚪ No portServer has port: 0 — terminal presence only