Bring your local development stack up with one command.
up is a terminal-based supervisor for local developer tools and services. It
starts the commands you normally run by hand, keeps long-running processes alive,
shows a responsive colored monitor, streams recent logs, and can start services
on a simple schedule.
Use it for anything you run during development:
- frontend dev servers
- backend APIs
- Python or Go workers
- batch files and shell scripts
- Docker Compose commands
- recurring local jobs
No health endpoint is required. A port is optional metadata used for display and clickable localhost links.
go install github.com/alinemone/up@latestMake sure Go's bin directory is in your PATH.
Linux/macOS:
echo 'export PATH="$PATH:$HOME/go/bin"' >> ~/.bashrc
source ~/.bashrcWindows PowerShell:
$env:Path += ";$(go env GOPATH)\bin"Check the installed version:
up versionAdd a service:
up add api --cwd ~/projects/api --port 8080 "npm run dev"Run it:
up apiAdd a few services and run them together:
up add web --cwd ~/projects/web --port 5173 "npm run dev"
up add worker --cwd ~/projects/worker "go run ./cmd/worker"
up group add dev api web worker
up run devup add claude-web --cwd F:\projects\claude-web --port 8766 --env PYTHONUTF8=1 --env PYTHONIOENCODING=utf-8 "uv run python main.py"
up add front --cwd F:\projects\front --port 5173 "npm run dev"
up add claude-web-bat --port 8766 "call F:\projects\claude-web\dev.bat"up run ... opens a responsive terminal dashboard:
SERVICE STATUS PID PORT UPTIME RESTARTS NEXT
api RUNNING 18420 8080 12m04s 0 -
web RUNNING 18712 5173 11m51s 1 -
backup SCHEDULED - - - 0 14:00:00
The monitor shows:
- current status
- process ID
- optional localhost port
- uptime
- restart count
- next scheduled run
- recent logs
- runtime controls for starting and stopping services
Keys:
aopens the service picker and starts another configured service.enterstarts or stops the selected service.sstops the selected service.rrestarts the selected service.qquits and stops all running services.
If a service has a port, terminals that support OSC 8 hyperlinks can open
http://localhost:<port> directly from the dashboard.
Disable terminal links:
UP_NO_LINKS=1 up run allStart a service at a daily time:
up add morning-api --at 09:00 --cwd ~/projects/api --port 8080 "npm run dev"Run a repeated job:
up add backup --every 2h --no-restart "bash ~/jobs/backup.sh"Schedule options:
--at HH:MMstarts at the next daily time.--every 30m,--every 2h, or--every 1h30mstarts after that interval.- With
--restartenabled, the process is kept alive after it starts. - With
--no-restart,--everybehaves like a repeated job interval.
up add <name> [--cwd <path>] [--port <port>] [--env KEY=VALUE] [--at HH:MM] [--every 2h] <command>
up run <name|group|all>[,<name|group>...]
up list
up delete <name>
up group add <group> <service...>
up group remove <group> <service...>
up group delete <group>
up version
Shortcuts:
up api
up api,web
up allConfig is stored at:
~/.up/services.json
Example:
{
"services": {
"api": {
"cwd": "/home/ali/projects/api",
"command": "npm run dev",
"port": 8080,
"restart": true
},
"backup": {
"command": "bash /home/ali/jobs/backup.sh",
"restart": false,
"schedule": {
"every": "2h"
}
}
},
"groups": {
"dev": ["api"]
}
}