Orchestrate your entire dev environment with a single command.
Conductor is a lightweight, powerful process orchestrator designed for modern development workflows. Start your entire stackโbackend, frontend, database, cache, workersโwith one command. Manage everything from a beautiful native UI or the terminal.
No Docker. No complexity. Just pure simplicity and power.
Features โข Installation โข Quick Start โข Documentation โข Contributing
- โก Instant Setup โ Define services in a single YAML file
- ๐ Lightning Fast โ Start services respecting dependency order; built in pure Go
- ๐จ Dual Interface โ Beautiful CLI dashboard or native desktop GUI
- ๐ Health Monitoring โ HTTP or command-based health verification with visual indicators
- ๐ Unified Logs โ Color-coded, aggregated logs from all services with real-time streaming
- ๐ Live Reload โ Restart services on-the-fly without stopping others
- โป๏ธ Auto-Restart โ Configurable restart policies (
always,on-failure,never) with exponential backoff - ๐ Auto-Discovery โ Scan projects and detect services from
package.json,go.mod,Cargo.toml,docker-compose.yml,pyproject.toml - ๐ฅ๏ธ UI Management โ Add, remove, configure services directly from the desktop app
- ๐ Cross-Platform โ Linux, macOS, Windows support
- ๐ฆ Zero Dependencies โ Single binary, no external runtime required
- Scan & Setup โ Browse any directory; auto-detect services and dependencies
- Visual Dashboard โ Real-time status dots, uptime, PID, port monitoring, restart counts
- Service Forms โ Intuitive UI for creating and managing services with color picker, env vars, depends_on
- Smart Logs โ Filterable, auto-scrolling, color-coded log viewer with Ctrl+F search and file export
- Config Editor โ Edit
conductor.yamldirectly in the app with live validation - Config Hot-Reload โ Desktop app detects changes to
conductor.yamland reloads automatically - Port Conflict Detection โ Warns before starting if a configured port is already in use
- Safe Operations โ Confirmation dialogs prevent accidental config changes
- Demo Mode โ One-click demo project to explore features
# Generate demo services
conductor demo
conductor up
# Or start with your existing project
conductor init # creates conductor.yaml
conductor up # starts everythingconductor-desktopOn Linux, Conductor integrates with your desktop environmentโsearch for it in rofi, dmenu, or your app launcher.
name: my-fullstack-app
services:
frontend:
cmd: npm run dev
dir: ./frontend
port: 3000
color: cyan
env:
NODE_ENV: development
depends_on:
- api
health:
url: http://localhost:3000
interval: 5s
api:
cmd: go run ./cmd/server
dir: ./backend
port: 8080
color: green
depends_on:
- db
health:
cmd: curl -f http://localhost:8080/health
db:
cmd: postgres -D /usr/local/var/postgres
port: 5432
color: yellow
health:
cmd: pg_isready -h localhostDownload the latest release for your platform from Releases.
# Extract and place in your PATH
tar xzf conductor-linux-x64.tar.gz
sudo mv conductor /usr/local/bin/
sudo mv conductor-desktop /usr/local/bin/git clone https://github.com/VendavalSC/conductor
cd conductor
# CLI only
make build
sudo cp bin/conductor /usr/local/bin/
# Full installation (CLI + Desktop + Linux desktop entry)
make install-all- CLI: Go 1.22+ or pre-built binary
- Desktop App: Requires GTK3 on Linux; macOS and Windows bundles everything
# Fedora / RHEL / CentOS
sudo dnf install webkit2gtk3-devel
# Debian / Ubuntu
sudo apt-get install libwebkit2gtk-4.0-dev
# Arch
sudo pacman -S webkit2gtkname: my-app # Project name (required)| Key | Type | Description |
|---|---|---|
cmd |
string | Command to run (supports shell features like pipes) |
dir |
string | Working directory (relative to conductor.yaml location) |
port |
integer | Exposed port (appears in dashboard) |
color |
string | Terminal color: cyan, green, yellow, red, magenta, blue, orange, purple |
env |
object | Environment variables (inherited by child process) |
depends_on |
array | Service dependencies (startup order) |
health |
object | Health check configuration |
restart |
string | Restart policy: never (default), on-failure, always |
max_restarts |
integer | Maximum restart attempts (0 = unlimited, default: 0) |
services:
web:
cmd: npm run dev
restart: on-failure # restart only if process exits non-zero
max_restarts: 5 # give up after 5 attempts (exponential backoff: 1s, 2s, 4sโฆ)
worker:
cmd: ./worker
restart: always # restart even on clean exit
max_restarts: 0 # unlimited restarts
db:
cmd: postgres
restart: never # default โ don't restarthealth:
url: http://localhost:3000
interval: 5s # check frequency
timeout: 3s # request timeout
retries: 3 # consecutive failures before marking unhealthyhealth:
cmd: pg_isready -h localhost
interval: 5s
retries: 3| Command | Description | Example |
|---|---|---|
conductor init |
Create template config | conductor init |
conductor demo |
Create demo config | conductor demo |
conductor up |
Start all services | conductor up |
conductor up -c custom.yaml |
Use custom config | conductor up -c config/dev.yaml |
conductor status |
Show service status | conductor status |
conductor logs |
Stream all logs | conductor logs |
conductor logs <service> |
Stream service logs | conductor logs api |
conductor restart <service> |
Restart a service | conductor restart frontend |
conductor down |
Stop all services | conductor down |
conductor version |
Show version | conductor version |
| Key | Action |
|---|---|
โ / โ or k / j |
Navigate services |
Enter or s |
Start/stop service |
r |
Restart service |
l |
View service logs |
q |
Quit (stops all services) |
? |
Show help |
- Config Loading โ Reads
conductor.yamlfrom current directory or walks up the tree - Dependency Resolution โ Topological sort determines startup order
- Process Spawning โ Executes commands via
sh -c(supports pipes, redirects, complex syntax) - Log Aggregation โ Combines stdout/stderr with per-service color coding
- Health Monitoring โ Periodically checks health endpoints (HTTP or command)
- Graceful Shutdown โ SIGTERM โ 5s wait โ SIGKILL if still running
| Feature | Conductor | Docker Compose | Foreman | Overmind |
|---|---|---|---|---|
| Configuration | YAML | YAML | Procfile | Procfile |
| Desktop GUI | โ Native | โ | โ | โ |
| Auto-detect Services | โ | โ | โ | โ |
| Health Checks | โ HTTP + Cmd | โ | โ | โ |
| Service Dependencies | โ | โ | โ | โ |
| Docker Required | โ | โ | โ | โ |
| Single Binary | โ | โ | โ | โ |
| Real-time Logs | โ | โ | โ | โ |
- CLI with beautiful TUI dashboard
- Native desktop GUI (Wails + React)
- Health checks (HTTP + command)
- Service dependencies (topological sort)
- Environment variables
- UI service management (add/remove/edit)
- Auto-discovery (package.json, go.mod, Cargo.toml, docker-compose, pyproject.toml)
- Desktop entry for Linux app launchers
- Demo project generator
- Auto-restart on crash (
always,on-failure,neverwith exponential backoff) - Port conflict detection (warns before start if port is already bound)
- Config hot-reload (desktop app detects conductor.yaml changes)
- Raw config editor (edit YAML directly in the desktop app)
- Log export to file (save logs via native file dialog)
- Env vars & depends_on in Add Service UI
- System tray with crash notifications
- Unix socket IPC (signals running instance)
- Plugin system for custom health checks
- Save/restore session profiles
- Conditional startup hooks (pre/post commands)
conductor/
โโโ cmd/
โ โโโ conductor/ # CLI entry point
โ โโโ conductor-desktop/ # Desktop app entry point
โโโ internal/
โ โโโ cli/ # CLI commands (Cobra)
โ โโโ config/ # YAML config parsing
โ โโโ health/ # Health check engine
โ โโโ logmux/ # Log aggregation & formatting
โ โโโ process/ # Process lifecycle
โ โโโ tui/ # Terminal UI (Bubble Tea)
โ โโโ version/ # Version management
โโโ desktop/
โ โโโ app.go # Wails backend
โ โโโ config_ops.go # Config operations
โ โโโ scanner.go # Project auto-detection
โ โโโ frontend/ # React + TypeScript
โโโ assets/ # Icons, desktop entry
โโโ Makefile # Build automation
โโโ go.mod / go.sum # Go dependencies
โโโ .goreleaser.yml # Release configuration
โโโ conductor.example.yaml # Example configuration
We welcome contributions! Whether it's bug reports, feature suggestions, or code contributions, please read CONTRIBUTING.md first.
git clone https://github.com/VendavalSC/conductor
cd conductor
# Run tests
make test
# Build and test locally
make build
./bin/conductor up
# Format code
make fmt
# Run linter
make lintConductor is distributed under the MIT License. See LICENSE for details.
services:
frontend: { cmd: npm run dev, dir: ./frontend, port: 3000 }
api: { cmd: go run ./cmd/api, dir: ./backend, port: 8080 }
db: { cmd: postgres ... }services:
auth-service: { cmd: npm start, port: 3001 }
user-service: { cmd: go run ./main.go, port: 3002 }
order-service: { cmd: python app.py, port: 3003 }services:
web: { cmd: python manage.py runserver, port: 8000 }
celery: { cmd: celery -A config worker }
redis: { cmd: redis-server, port: 6379 }
postgres: { cmd: postgres ... }Conductor looks for conductor.yaml in the current directory and walks up the tree. Make sure the file exists or use -c path/to/config.yaml.
Check that your service is actually listening on the configured port/endpoint. Use conductor logs <service> to debug.
On Linux, ensure GTK3 development libraries are installed. See Installation for platform-specific requirements.
chmod +x /usr/local/bin/conductor-desktopHave questions? Found a bug? Open an issue or start a discussion.
Made with โค๏ธ by VendavalSC