compare

plottypus vs Stats

verdict

Use Stats if you want your numbers in the menu bar, always visible, with no terminal open. It is free, MIT-licensed, installs with brew install stats, and covers things plottypus does not: Bluetooth device batteries, a world clock, desktop widgets and (unmaintained) fan control. Use plottypus if you work in a terminal or over ssh, want a full process table with per-process watts, or want the numbers as JSON. It also reads CPU watts on macOS 27, where the method Stats uses reads 0 between batches.

At a glance#

Checked 2026-09-24 against Stats 3.0.17 (released 2026-09-20), its README and its source. We did not run Stats on our test machine for this page; rows marked “from source” come from reading its code.

plottypus 1.0.0 Stats 3.0.17
CPU watts on macOS 27 Yes. Live from SMC power rails on the M5 Pro; other chips get the last IOReport batch, marked with its age Energy-counter change over wall-clock time (from source), which is 0 between macOS 27 batches
System watts SMC PSTR SMC PSTR
GPU MHz / °C Yes / yes GPU utilization; temperatures in the Sensors module
Per-cluster clocks Super, Performance and Efficiency clusters with MHz Not checked
Per-process energy / GPU Watts per process; GPU share in the details card Top processes by CPU and memory in the popups
Needs sudo No No
Self-cost ~1.5% of one core at 500 ms, ~1.0% at 1 s (our measurement) Not measured; its README says Sensors and Bluetooth are the costliest modules
Works over ssh / in tmux Yes No, it is a menu-bar app
Process actions TERM, KILL, INT, STOP/CONT, any signal, renice, background QoS None listed in its README
JSON output --json, --json-stream None listed in its README
Network use No network connections. One local routing socket asks the kernel which interface is the default route Update checks and public IP lookup (api.mac-stats.com, api.github.com)
Platforms macOS on Apple Silicon only macOS 12 or later, Intel and Apple Silicon
Price / licence Free download, proprietary EULA; a paid Pro tier is planned, not on sale Free, MIT

Sources: Stats 3.0.17 release, Stats README, Stats Sensors reader.

Why CPU power reads 0 in Stats on macOS 27#

Stats’ Sensors module computes “CPU Power” from IOReport’s CPU Energy counter: the change since the last read, divided by the wall-clock seconds in between (source). macmon and mactop use the same recipe.

On macOS 27 the counter publishes in batches, 2 to 108 seconds apart in our captures. Between batches it does not move, so a per-read delta is 0, and when a batch lands the whole batch is credited to one short window. We have not measured Stats itself. macmon uses the same method, and on our M5 Pro it reported cpu_power 0.0 in 20 of 20 one-second samples while the machine drew 11 to 77 W.

plottypus avoids the problem two ways. On the M5 Pro it reads the SMC’s CPU power rails, which update on every sweep. Elsewhere it divides the IOReport change by the driver’s own timestamps, holds the result until the next batch, marks it with its age, and shows once it is more than 10 s old.

Stats also reads the SMC PSTR key for whole-system power, as plottypus does, and that figure is not affected.

The long version, with the raw captures: why macOS 27 shows 0.00 W CPU power.

This is the real choice, and it is a matter of taste.

Stats is there whenever the menu bar is, costs no screen space, and needs no terminal. Clicking a module opens a popup with charts and the top processes.

plottypus is a full-screen TUI. It follows you into ssh and tmux, shows every process with filter, sort, tree and signals, and puts the silicon readings in braille graphs on one shared time axis. For a small always-on terminal window, the Glance surface (plottypus --surface glance) is the compact layout.

Processes#

Stats lists the top processes by CPU or memory in its popups. plottypus has the whole table: per-process watts, GPU share, footprint memory, disk I/O, wakeups, and actions from TERM through STOP/CONT, renice and background QoS. A kill is refused if the pid was reused after you selected it.

Privacy#

Both tools collect no telemetry. Stats’ README lists two outbound calls: update checks and a public-IP lookup against its own server. plottypus makes no network connections. It has no auto-update. It reads network counters locally, and opens one PF_ROUTE socket that never leaves the Mac, to learn the default route.

Using both#

They don’t conflict: Stats in the menu bar, plottypus in a terminal when something looks off. Two commands help with that:

sh
plottypus --diagnose      # one line: "All normal", "Busy: Safari using 3.1 cores", "Hot: fans at 80%"
plottypus --json | jq '{cpu_power, sys_power, temp: .temp.cpu_temp_avg}'

The first answers “why is the fan on” without opening anything. The second is a quick way to feed CPU watts to a SwiftBar or SketchyBar script today; a built-in status line is planned for the Pro tier, which is not on sale yet.