GumRun
Start · Stop · Restart your dev / web servers from VS Code — without dropping into a terminal manually every time.
Supports Go, Node.js, Python, Rust, .NET, Java, PHP, Ruby, Elixir, Deno, Bun out of the box, plus any custom command.
Features
- ▶ One-click Start / Stop / Restart — from the activity-bar sidebar or the status bar
- 🔍 Auto-detect services in your project (
go.mod, package.json, Cargo.toml, manage.py, pom.xml, Gemfile, *.csproj, …)
- 📁 Add From File… (NEW v0.4) — pick any file (Makefile, package.json, Cargo.toml, .sh, .ps1, *.go, *.py, …) and GumRun figures out how to run it; supports multi-target picks (Makefile targets, npm scripts, cargo bins)
- 🎯 Real port detection — reads
config.yaml, config.toml, .env, appsettings.json, npm script --port flags so GumRun uses the actual port your project listens on, not a generic default
- 🧩 Multiple services per project — run frontend + backend together (e.g.
npm run dev + go run ./cmd/api)
- 📋 Per-project config at
.vscode/gumrun.json — version-controllable
- 🌐 Open in Browser — jump to your dev server URL
- 🎨 Live status icons — green (running), yellow (starting), grey (stopped)
- ⚙️ Per-service environment variables, working directory, and command
- 🛑 Graceful stop — sends Ctrl+C first, then disposes terminal
Built-in Presets
| Language |
Presets |
| Go |
go run, air (hot reload), Fiber, Gin |
| Node |
npm run dev, npm start, nodemon, tsx watch, Vite, Next.js |
| Deno / Bun |
deno task dev, bun run dev |
| Python |
Uvicorn, Flask, Django, Gunicorn, Streamlit, Poetry, plain script |
| Rust |
cargo run, cargo watch, Actix Web, Axum |
| .NET |
dotnet run, dotnet watch run |
| Java |
Spring Boot (Maven / Gradle), java -jar |
| PHP |
Laravel artisan serve, built-in php -S, Symfony |
| Ruby |
Rails, Sinatra, Jekyll |
| Elixir |
Phoenix |
| Static |
Vite preview, http-server, python http.server |
| Custom |
any shell command |
Quick Start
- Install GumRun
- Click the green ▶ icon in the activity bar (left side)
- Auto-detect — scans for known config patterns (
go.mod, package.json, Cargo.toml, …)
- Add From File… — point at any Makefile / package.json / Cargo.toml / .sh / .py / etc. and GumRun figures out the right command (and lists all sub-targets to pick from)
- Add a custom service — paste any shell command yourself
After services are added, click any one to start it. Click again to stop.
Add From File… examples
| File you pick |
What you get |
Makefile |
List of all targets (make run, make dev, make test, …) — pick one |
package.json |
All scripts entries via the right package manager (npm/pnpm/yarn/bun) |
Cargo.toml |
cargo run, cargo run --release, plus each [[bin]] |
pyproject.toml |
Each [tool.poetry.scripts] entry as poetry run X |
Procfile |
One option per process line |
docker-compose.yml |
docker compose up (foreground or detached) |
*.sh / *.bat / *.ps1 |
Direct execution with the right shell |
main.go / app.py / index.ts |
go run, python, npx tsx accordingly |
*.csproj |
dotnet run / dotnet watch run |
Port detection
When you add a service GumRun reads project config to use the real port, not a hardcoded default:
| Source |
Pattern |
config.yaml / config.yml |
server: \n port: NNNN (nested) or top-level port: NNNN |
application.yml |
Same — Spring Boot |
config.toml / rocket.toml |
port = NNNN |
.env |
PORT=, SERVER_PORT=, HTTP_PORT=, APP_PORT=, LISTEN_PORT=, BIND_PORT= |
appsettings.json |
"applicationUrl": "http://...:NNNN" |
| npm scripts |
--port NNNN flag |
Configuration
GumRun stores its services in .vscode/gumrun.json:
{
"services": [
{
"id": "svc-abc123",
"name": "API",
"language": "go",
"command": "go run ./cmd/api",
"cwd": "${workspaceFolder}",
"url": "http://localhost:8080",
"ports": [8080]
},
{
"id": "svc-def456",
"name": "Web",
"language": "node",
"command": "npm run dev",
"cwd": "${workspaceFolder}/frontend",
"url": "http://localhost:5173",
"ports": [5173],
"env": {
"NODE_ENV": "development"
}
}
]
}
Variables available in cwd:
${workspaceFolder} — absolute path of the workspace folder
Status Bar
Click the status bar item (bottom-left) to toggle the primary service:
▶ name → click to start
⏹ name → click to stop
Configure which service shows up via gumRun.statusBar.serviceName.
Commands (Command Palette)
| Command |
What it does |
| GumRun: Auto-detect Services |
Scan workspace, suggest services to add |
| GumRun: Add Service |
Pick a preset, customize, save |
| GumRun: Start / Stop / Restart |
Toggle a service |
| GumRun: Start All / Stop All |
All services in workspace |
| GumRun: Open Config |
Edit .vscode/gumrun.json |
| GumRun: Open in Browser |
Launch the configured URL |
Settings
| Setting |
Default |
Description |
gumRun.statusBar.enabled |
true |
Show the status bar quick toggle |
gumRun.statusBar.serviceName |
"" |
Primary service name shown on status bar |
gumRun.killSignal |
"auto" |
How to stop: auto, SIGINT, ctrlC |
gumRun.restartDelayMs |
800 |
Delay between stop/start when restarting |
Tip — restart-after-edit
For projects where you edit code and need to bounce the server:
- Click the service in the GumRun sidebar — it goes from green → grey
- Click again — server restarts
Or use GumRun: Restart from the Command Palette (and bind it to a keyboard shortcut for one-key restart).
Companion extensions
Part of the Gum Suite:
- 🟢 GumRun — start / stop / restart dev servers
- 🟦 GumGo Preview — Go HTML template preview with click-to-jump
- 🟣 GumDotNet Form Viewer — preview C# / VB.NET WinForms designer files
License
MIT
| |