The Stats tray group renders up to three live widgets:
- CPU — total usage across all cores, with per-core breakdown in the popover
- Memory Pressure — used memory (wired + active + compressed) as % of physical RAM
- Network — aggregate up/down throughput across non-loopback interfaces
Each widget is 36×28: a faint sparkline behind a 9pt monospaced numeric readout, with smooth tweening between samples.
Toggling
Settings → Stats has independent toggles for CPU, RAM, and Network. Each enabled widget exposes its own update interval (0.5–10s).
Interval tradeoff: lower numbers feel more responsive but sample the kernel more often. CPU at 1s is fine; Network at 0.5s is fine; the sample is cheap. RAM is cheaper still.
Hover popovers
Each tray widget opens a 240–280pt popover with the full picture:
- CPU — bigger sparkline, per-core LinearGauge grid
- RAM — bigger sparkline, wired/active/compressed/free breakdown in GB
- Network — separate up/down sparklines, top apps by bytes (when available)
The popover refreshes at 2 Hz while open (regardless of the tray cadence), so you can see a fast-changing process settle.
Notes
- CPU and memory numbers come from the same kernel sources Activity Monitor uses. The "Memory Used" percentage matches Activity Monitor exactly.
- Network throughput is summed across every active non-loopback interface. Per-interface breakdown is on the roadmap.
- The sparkline drawing is shared with YAML widget sparklines, so a custom widget can match the look of the built-ins.
Building a custom stat widget
If you need something the built-in widgets don't show — disk I/O, fan speed, GPU usage — write a YAML widget. The CPU pulse recipe is a good starting point.
Hide the built-in cell first via Settings → Stats to avoid duplicates.