# plottypus vs Stats

Canonical: https://plottypus.com/vs/stats

Last updated: 2026-09-24

> Stats 3.0.17 (exelban) and plottypus 1.0.0. A free menu-bar app against a terminal monitor, and why CPU power reads 0 W on macOS 27 in delta-based tools.

**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](https://github.com/exelban/stats/releases/tag/v3.0.17), [Stats README](https://github.com/exelban/stats#readme), [Stats Sensors reader](https://github.com/exelban/stats/blob/master/Modules/Sensors/readers.swift).

## 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](https://github.com/exelban/stats/blob/master/Modules/Sensors/readers.swift)). 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](https://plottypus.com/blog/macos-27-cpu-power-0w).

## Menu bar versus terminal

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.
