heft walks /proc and DRM fdinfo (amdgpu, i915, xe), then draws a tree:
Host → each User (Applications, User Services, Containers) → System.
Docker and Podman workloads are never billed to dockerd, containerd, or
the starter daemon.
Grab a binary from the latest release — the musl build is static and needs no toolchain — or build it:
cargo run --release -- --onceSee HUMANS.md for install, keybindings, and how a saved view is written.
- Application weight — a terminal, an idle shell, and
claudeare sibling identities; workers and launchers fold into the app they serve. - Containers as workloads —
docker-*.scopenever lands in System or ondockerd. - No root — every visible PID is listed;
EACCESblanks that metric and keeps the row. Heft does not kill, nice, or write/proc. - One row, every dimension — CPU, PSS/RSS/swap, disk, GPU memory and engine percent, per-container network, threads and age. Hide the columns you do not want; a metric heft cannot read stays blank rather than reading zero.
- Slow, not just busy — per-cgroup CPU/IO/memory stall percentages, so a row that is blocked on the disk stops looking the same as one that is idle.
- TUI plus scripts — fullscreen table by default;
--onceand--jsonfor one sample,--followto keep sampling (NDJSON, or a repeating table), and--sort,--asc/--desc,--filter(a regex),--topand--userfor the shape you want.
| Doc | Purpose |
|---|---|
| HUMANS.md | Install, run, keys, XDG paths, verification |
| AGENTS.md | Layout, grouping invariants, gates |
| CONTRIBUTING.md | Commits, tests, review bar |
| CODE_OF_CONDUCT.md | Expected conduct and enforcement |
| SECURITY.md | Observe-only boundary and disclosure |
| CHANGELOG.md | Release notes |
Apache-2.0. See LICENSE.