Перейти до вмісту

Dev-сервери

SnakeFlow керує будь-якою кількістю dev-серверів — Next.js, Vite, FastAPI, Django, Rails, Go, Rust, PHP — будь-який runtime і команда.

Кожен сервер працює у іменованому терміналі VS Code; статус перевіряється за TCP-портом і наявністю терміналу. Індикатори — у сайдбарі та status bar у реальному часі.

Конфігурація серверів

Додайте в .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
}
]

Поля сервера

ПолеОбов’язковеОпис
idУнікальний ідентифікатор — префікс імені терміналу
labelНазва в меню серверів і status bar
commandShell-команда запуску
pathВідносна робоча директорія від кореня ("" = корінь)
portTCP-порт для статусу (0 = без моніторингу порту)
startWithAllВключати в Start all (Ctrl+Alt+S). За замовчуванням true. false — лише з меню (Prisma Studio, Storybook тощо).

Команди

ДіяКлавішіЯк відкрити
Запустити всі (bulk)Ctrl+Alt+STools (Ctrl+Alt+M) → Start all — лише записи з startWithAll не false
Зупинити всіCtrl+Alt+QTools або меню серверів → Stop all — усі налаштовані сервери
Перезапустити всіCtrl+Alt+RМеню серверів → Restart all — stop all, потім bulk start
Один сервер Start / Stop / RestartКлік по індикатору серверів у status bar → сервер → дія
Manage ServersПалітра → SnakeFlow: Manage Servers, або меню серверів

Приклади

Один застосунок (Node.js)

[{ "id": "web", "label": "Dev Server", "command": "npm run dev", "path": "", "port": 3000 }]

Монорепо (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-мікросервіси

[
{
"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 }
]

Опційні утиліти (лише з меню)

Окремий запис у servers на кожну команду — нічого не захардкожено в розширенні:

{
"id": "studio",
"label": "Prisma Studio",
"command": "npx prisma studio",
"path": "",
"port": 5555,
"startWithAll": false
}
  • Ctrl+Alt+S пропускає записи з startWithAll: false
  • Status bar → меню серверівPrisma StudioStart
  • Stop all зупиняє Studio, якщо вона була запущена (той самий цикл: Ctrl+C → kill порту → dispose терміналу)

У Manage Servers крок 5 питає, чи включати сервер у bulk start.

Моніторинг статусу

Статус показується:

  • Status bar — спільний індикатор; клік відкриває меню по серверах
  • Меню серверів — рядок статусу на кожен запис (Running, Stopped, порт/PID за наявності)

Використовується комбінована перевірка: порт відкритий і термінал ще живий. Це зменшує хибні спрацьовування, коли порт зайнятий іншим процесом.

СтатусЗначення
🟢 RunningПорт відкритий, термінал активний
🔴 StoppedПорт закритий або термінал закрито
⚪ No portport: 0 — лише наявність терміналу