pm

pm

Docker-compose-like process manager with TUI dashboard. Runs any command, not limited to Node/Bun.

Linux
curl -fsSL appcrate.dev/pm | sh

Rust binary. Linux x86_64. MIT License.

Features

Docker-compose style config

Define services in pm.yaml — command, environment, depends_on, working_dir, restart policy.

Interactive TUI

Navigate services, start/stop/restart individually or all at once. Keyboard-driven.

Daemon mode

pm up starts a background daemon. Services keep running after TUI exit.

Per-service logs

pm logs <service> tails output. Add -f to follow.

Restart policies

no, on-failure, or always. Exponential backoff: 1s to 32s cap.

Hot reload

pm reload picks up config changes without restarting running services.

Usage

pm # launch TUI (default)
pm up # start all services
pm up api db # start named services
pm stop # stop all
pm stop api # stop named
pm restart # restart all
pm status # print status table
pm logs api # tail logs
pm logs api -f # follow logs
pm reload # reload config
pm shutdown # shut down daemon

TUI keybindings

↑/↓ or k/j Navigate services
s / Enter Start selected
x Stop selected
r Restart selected
a Start all
z Stop all
R (shift) Reload config
q Quit TUI (services keep running)

Config example

Create pm.yaml in your project root:

services:
  web:
    command: python3 -m http.server 8080
    environment:
      PYTHONUNBUFFERED: "1"
    depends_on:
      - logger
    restart: on-failure

  logger:
    command: bash -c "while true; do echo heartbeat; sleep 5; done"

All fields except command are optional. working_dir defaults to the config directory.

Tags

rustprocess-managerdocker-composetuidaemoncli

Changelog

2026-04-19v0.1.0Initial release — daemon, TUI, YAML config, restart policies, per-service logs