Skip to content

VendavalSC/conductor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

6 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Conductor

GitHub release License Go Report Card Made with โค๏ธ

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


โœจ Features

Core Capabilities

  • โšก 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

Desktop App (v1.1.0)

  • 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.yaml directly in the app with live validation
  • Config Hot-Reload โ€” Desktop app detects changes to conductor.yaml and 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

๐Ÿ“‹ Quick Start

1. Try It Immediately

# Generate demo services
conductor demo
conductor up

# Or start with your existing project
conductor init       # creates conductor.yaml
conductor up         # starts everything

2. Using the Desktop App

conductor-desktop

On Linux, Conductor integrates with your desktop environmentโ€”search for it in rofi, dmenu, or your app launcher.

3. Basic Config Example

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 localhost

๐Ÿ› ๏ธ Installation

From Pre-built Binaries

Download 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/

From Source

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

Requirements

  • CLI: Go 1.22+ or pre-built binary
  • Desktop App: Requires GTK3 on Linux; macOS and Windows bundles everything

Linux Dependencies (GTK3)

# Fedora / RHEL / CentOS
sudo dnf install webkit2gtk3-devel

# Debian / Ubuntu
sudo apt-get install libwebkit2gtk-4.0-dev

# Arch
sudo pacman -S webkit2gtk

๐Ÿ“– Complete Configuration Reference

Top-Level Config

name: my-app          # Project name (required)

Service Configuration

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)

Restart Policies

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 restart

Health Check Configuration

HTTP Health Check

health:
  url: http://localhost:3000
  interval: 5s        # check frequency
  timeout: 3s         # request timeout
  retries: 3          # consecutive failures before marking unhealthy

Command Health Check

health:
  cmd: pg_isready -h localhost
  interval: 5s
  retries: 3

๐ŸŽฎ CLI Commands

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

TUI Keyboard Shortcuts

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

๐Ÿ—๏ธ How It Works

  1. Config Loading โ€” Reads conductor.yaml from current directory or walks up the tree
  2. Dependency Resolution โ€” Topological sort determines startup order
  3. Process Spawning โ€” Executes commands via sh -c (supports pipes, redirects, complex syntax)
  4. Log Aggregation โ€” Combines stdout/stderr with per-service color coding
  5. Health Monitoring โ€” Periodically checks health endpoints (HTTP or command)
  6. Graceful Shutdown โ€” SIGTERM โ†’ 5s wait โ†’ SIGKILL if still running

๐Ÿ“Š Comparison with Alternatives

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 โœ… โœ… โœ… โœ…

๐Ÿ—บ๏ธ Project Roadmap

  • 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, never with 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)

๐Ÿข Project Structure

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

๐Ÿค Contributing

We welcome contributions! Whether it's bug reports, feature suggestions, or code contributions, please read CONTRIBUTING.md first.

Quick Start for Contributors

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 lint

๐Ÿ“œ License

Conductor is distributed under the MIT License. See LICENSE for details.


๐Ÿ’ก Use Cases

Full-Stack Development

services:
  frontend: { cmd: npm run dev, dir: ./frontend, port: 3000 }
  api: { cmd: go run ./cmd/api, dir: ./backend, port: 8080 }
  db: { cmd: postgres ... }

Microservices

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 }

Python/Django Stack

services:
  web: { cmd: python manage.py runserver, port: 8000 }
  celery: { cmd: celery -A config worker }
  redis: { cmd: redis-server, port: 6379 }
  postgres: { cmd: postgres ... }

๐Ÿ†˜ Troubleshooting

Config Not Found

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.

Health Check Failing

Check that your service is actually listening on the configured port/endpoint. Use conductor logs <service> to debug.

Desktop App Not Launching

On Linux, ensure GTK3 development libraries are installed. See Installation for platform-specific requirements.

Permission Denied (Linux Desktop)

chmod +x /usr/local/bin/conductor-desktop

๐Ÿ“ง Support

Have questions? Found a bug? Open an issue or start a discussion.


Made with โค๏ธ by VendavalSC

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Packages