compose-pulse

module
v0.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 12, 2026 License: MIT

README

cpulse

CI GitHub release

cpulse shows why your Docker Compose stack is stuck. A terminal UI that watches every container in real time, renders the depends_on graph as a tree, names the root cause, and lets you probe, restart, and inspect without leaving the TUI.

cpulse dashboard demo

The problem

docker compose up dumps interleaved logs from every container into one stream. When something won't start, you're left guessing which service is the actual blocker, scrolling through thousands of log lines, and jumping between terminal tabs. cpulse turns that graph into something you can just look at — and tells you what's blocking what.

What it shows you

Every service gets one of these states, derived from its container state, exit code, restart count, and dependency graph — not just raw Docker status:

Glyph State Meaning
green healthy Running, healthcheck passing (or none defined)
yellow (spinning) starting Container exists, healthcheck in its start period
gray blocked Waiting on a depends_on condition that isn't satisfied yet
gray pending Not blocked, just doesn't have a container yet
green completed Exited 0 — a migration/init job that did its job
red failed Exited non-zero, or exited with no known code
red unhealthy Running, but the healthcheck is failing
yellow degraded Running, but restarted 3+ times (restart loop)

An init container that finishes with exit 0 looks nothing like one that crashed — that distinction alone used to require reading logs by hand.

Installation

Homebrew (macOS / Linux)
brew tap hyturing/cpulse
brew trust hyturing/cpulse   # required once for third-party taps (Homebrew 4.6+)
brew install cpulse

Verify: cpulse --version

To upgrade later: brew update && brew upgrade cpulse

Download a binary

Grab the latest release for your platform from GitHub Releases.

# macOS (Apple Silicon)
curl -L https://github.com/hyturing/compose-pulse/releases/latest/download/cpulse_darwin_arm64.tar.gz | tar xz
sudo mv cpulse /usr/local/bin/
Build from source

Requires Go 1.25+.

git clone https://github.com/hyturing/compose-pulse.git
cd compose-pulse
make build
# binary at ./bin/cpulse

Usage

Run cpulse anywhere — it auto-discovers every container on your local Docker daemon:

cpulse

Compose-managed containers appear as dependency trees grouped by project. Everything else shows up in a flat OTHER CONTAINERS section below. New stacks and containers appear automatically — no restart needed.

Bring up stacks in other terminals as usual:

docker compose up
Headless doctor

Diagnose without the TUI — prints root cause + findings, exits 1 if any critical finding:

cpulse doctor
cpulse doctor --project myapp
Commands & flags
Command / flag Description
cpulse Launch the TUI dashboard
cpulse doctor Diagnose why a stack is stuck
cpulse doctor --project NAME Limit diagnosis to one compose project
cpulse --version Print version and exit
cpulse help Print usage

Interface

Lazydocker-style layout: select on the left, inspect on the right.

  • Top bar — live count of services per state, and how long ago the last poll landed.
  • Left column — project rows + nested dependency tree. Each service row shows a state glyph, name, state label, short hint (exit 1, ←2 deps, waiting-since), and live CPU/MEM columns.
  • Main panel (right) — tabs follow what you selected:
    • Service selected1 Logs · 2 Stats (CPU/MEM sparklines) · 3 Deps (waits-on, blocks, restart order) · 4 Health (inspect healthcheck; Enter runs a probe inside the container)
    • Project selected1 Doctor (root cause + findings) · 2 Timeline (scaled startup Gantt) · 3 Graph (roomy pstree with edge conditions)
  • Enter zooms the main panel (or jumps to a service / runs a health probe, depending on context). Esc always goes back — never quits.

Keyboard shortcuts

Dashboard
Key Action
/k, /j Move selection
Tab, / Switch between left column and main panel
14 / [ ] Switch tabs (service: logs/stats/deps/health · project: doctor/timeline/graph)
Enter Zoom · jump to service · run health probe
Esc Back / un-zoom / clear filter — never quits
f Cycle filter: all → failed → waiting
/ Filter service list text, or grep logs when focused on Logs
d Jump to Doctor tab
t Jump to Timeline tab
x Open the actions menu for the selection
? Toggle the help overlay
q Quit (in zoom: un-zoom)
Ctrl+C Always quit
Logs
Key Action
g / End Jump to bottom and resume following
/ Filter logs by regex
n / N Next / previous match
l Load older logs
/, k/j, mouse wheel Scroll
PgUp/PgDn, Ctrl+U/Ctrl+D Page scroll
Home Jump to top; press again to load older logs
Enter Full-screen zoom
Esc / q (in zoom) Back to dashboard
Actions menu (x)

Restart, stop, start, rebuild, cascade a restart to dependents, run a health probe, or drop into an in-TUI exec shell — without leaving cpulse.

Requirements

  • Docker Desktop or Docker Engine running locally
  • macOS or Linux

Contributing

Pull requests are welcome. See CONTRIBUTING.md for setup instructions and guidelines.

License

MIT — © 2026 hyturing

Directories

Path Synopsis
cmd
cpulse command
internal
dag
ui

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL