Promenade - Local Dev Process Manager

## Why Promenade?

Modern apps need multiple services running locally: your API, frontend dev server, background workers, maybe a database. Promenade lets you define them once in a simple YAML file and start everything with `promenade start`.

▶

### One command to start everything

Define your services once, start them in the right order automatically. Your API starts before your frontend, every time.

♥

### Health checks built in

Know when your services are actually ready, not just running. HTTP and TCP health checks with configurable timeouts.

☰

### Unified log viewer

All your service logs in one place, color-coded and filterable. No more switching between terminal tabs.

↻

### Hot reload your config

Change your promenade.yaml and services automatically restart. No manual restarts needed.

⏻

### Runs on startup

Set it up once with launchd or systemd and your services are always there when you need them.

## Quick Start

Create a `promenade.yaml` in your project:

    services:
      api:
        command: flask run --port 5001
        directory: ./backend
        port: 5001
        ready_check:
          type: http
          path: /health

      frontend:
        command: npm run dev
        directory: ./frontend
        port: 3000
        depends_on:
          - api

Then run:

    promenade start

Open `http://localhost:7766` to see the web UI with status, health, and logs for all your services.

## CLI Commands

promenade start # Start all services with web UI
promenade stop # Stop everything
promenade status # See what's running
promenade logs -f # Follow logs in terminal
promenade restart api # Restart a single service
promenade reload # Reload config, restart changed services

## Configuration

Promenade looks for `promenade.yaml` in your current directory, or at `~/.config/promenade/promenade.yaml` for a global config.

    manager:
      port: 7766              # Web UI port
      log_buffer_lines: 1000  # Lines to keep per service

    defaults:
      restart_policy: once    # "never", "once", or "always"
      env:
        NODE_ENV: development

    services:
      api:
        command: flask run --port 5001
        directory: ./backend
        port: 5001
        env:
          FLASK_DEBUG: "1"
        ready_check:
          type: http
          path: /health
          timeout: 30

      worker:
        command: python worker.py
        directory: ./backend
        restart_policy: always  # Keep this one running