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
- 🌍 Machine-wide projects (NEW v0.5) — register projects once at
~/.gumrun/projects.json and they show up in any VS Code window, regardless of which folder you opened. Useful when you keep switching between projects but want one place to launch them all.
- 🖱 Right-click a project to Open Folder, Open in New Window, or Reveal in File Explorer — jump straight to the code from the sidebar
- 🐍 Python venv auto-wire (NEW v0.5) — when a
venv/, .venv/, or env/ is present, GumRun rewrites detected commands to use the venv interpreter (venv\Scripts\python.exe run.py, ... -m flask run, etc.) so you don't have to activate manually
- 🔍 Auto-detect services in your project (
go.mod, package.json, Cargo.toml, manage.py, pom.xml, Gemfile, *.csproj, …)
- 📁 Add From File… — 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, and app.run(port=…) in Python source, so GumRun uses the actual port your project listens on
- 🧩 Multiple services per project — run frontend + backend together (e.g.
npm run dev + go run ./cmd/api)
- 🌐 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, Waitress, run.py entry, plain script — venv-aware |
| 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)
- Click Add Project… (the
+ icon at the top) and pick any folder on disk — GumRun remembers it machine-wide
- From the project's right-click menu, pick Auto-detect Services, Add Service, or Add From File…
- Click any service to start it. Click again to stop.
Once a project is registered, it stays visible from any VS Code window — even ones where the folder isn't open. Right-click the project to Open Folder, Open in New Window, or Reveal in File Explorer.
Coming from v0.4? If you already have .vscode/gumrun.json in a workspace folder, GumRun imports it into the machine-wide registry the next time it activates. The workspace file is left untouched.
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" |
run.py / app.py / main.py |
app.run(port=NNNN) or os.environ.get("PORT", NNNN) |
| npm scripts |
--port NNNN flag |
Python venv
If venv/, .venv/, or env/ exists in the project root, detected commands are rewritten to use the venv interpreter directly — no shell activation needed:
| Original |
Rewritten |
python run.py |
venv\Scripts\python.exe run.py |
flask run --debug |
venv\Scripts\python.exe -m flask run --debug |
uvicorn main:app --reload |
venv\Scripts\python.exe -m uvicorn main:app --reload |
gunicorn app:app |
venv\Scripts\python.exe -m gunicorn app:app |
Works on Windows (Scripts\python.exe) and POSIX (bin/python) layouts.
Configuration
GumRun keeps a single machine-wide registry at ~/.gumrun/projects.json. Projects here are visible from any VS Code window:
{
"projects": [
{
"id": "p-abc12345",
"name": "my-api",
"rootPath": "/Users/me/code/my-api",
"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" }
}
]
}
]
}
${workspaceFolder} inside a service resolves to the project's rootPath (not the open VS Code workspace), so services run correctly even when their project folder is not the one currently open.
Legacy workspace config
.vscode/gumrun.json (v0.4 format) is still recognised — on activation GumRun imports any workspace folder that has one into the machine-wide registry. After import the workspace file is informational only; edits should go through the GumRun sidebar or ~/.gumrun/projects.json.
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: Add Project… |
Pick a folder from disk and register it as a GumRun project |
| GumRun: Open Project Folder |
Open the project in the current window |
| GumRun: Open Project in New Window |
Open it in a new window |
| GumRun: Reveal Project in File Explorer |
Reveal in OS file manager |
| GumRun: Rename / Remove Project |
Manage registry entries |
| GumRun: Auto-detect Services |
Scan a project's folder, 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 (or all in one project from its right-click menu) |
| GumRun: Open Registry |
Edit ~/.gumrun/projects.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
| |