# What plottypus reads on Apple Silicon. Clusters, clocks, watts, heat, fans and processes. On this M5 Pro the CPU rails read 15–48 W.

Canonical: https://plottypus.com/features

Last updated: 2026-09-24

plottypus is a system monitor for Apple Silicon that runs in your terminal. It never prints a zero it did not measure.

Measured with macmon 0.8.2 and mactop 2.1.5 on 24 Sept 2026 ([the run](https://plottypus.com/features#proof)). Live CPU watts on the M5 Pro. On other chips, the last IOReport value with its age (≈), then — once it is more than 10 s old, which on macOS 27 (Golden Gate) is often.

[CPU watts, no sudo](https://plottypus.com/blog/mac-cpu-watts-without-sudo) [Temperature and fans](https://plottypus.com/blog/mac-cpu-temperature-terminal) [Why some tools read 0 W](https://plottypus.com/blog/macos-27-cpu-power-0w) [Docs](https://plottypus.com/docs)

install

```
curl -fsSL https://plottypus.com/install.sh | sh
```

1.0.0 Apple Silicon no sudo ~2.2 MB free

> Terminal frame: plottypus 1.0.0 · M5 Pro · cargo build --release.
>
> The plottypus work screen at 160 by 45 cells. Six braille graphs over the last two minutes: CPU with its watts and temperature, GPU, memory and swap, heat with fan speeds, network, and power. On the right, the process list filtered to rustc.
>
> Real capture, not a mock-up: 20 s at 500 ms while cargo rebuilt plottypus's own release tree. The process list is filtered to rustc.

the measurement

## Same Mac, same 20 seconds

CPU watts reported by macmon, mactop and plottypus, one sample a second, run at the same time

| tool | cpu watts, 1 sample/s | cpu W | at 0.0 | system W |
| --- | --- | --- | --- | --- |
| macmon 0.8.2 | macmon 0.8.2: CPU watts 0.0 over 20 samples | 0.0 | 20 of 20 | 19–104 |
| mactop 2.1.5 | mactop 2.1.5: CPU watts 0.0 over 20 samples | 0.0 | 20 of 20 | 19–96 |
| plottypus 1.0.0 | plottypus 1.0.0: CPU watts 15–48 over 20 samples | 15–48 | 0 of 20 | 19–104 |

MacBook Pro Mac17,8 (M5 Pro), macOS 27.0 (26A428), 2026-09-24, 00:39 IST, no sudo. The three tools ran at once: `macmon pipe`, mactop's headless JSON and `plottypus --json-stream`. Same scale on every row, 0 to 50 W.

Both tools saw the load. Their own system-power figures moved between 19 and 104 W in the same seconds. Only the CPU channel sat at zero.

The reason is upstream of them. On macOS 27 the PMGR “Energy Model” IOReport counters publish in batches 2–108 s apart, and sometimes not for tens of minutes. Divide one second's delta by one second and you get 0.0 W, then a spike. macmon is the tool plottypus learned IOReport from; its maintainers track this as issue #76. Stats users report the same 0.00 W in #3608 and #3621.

[The full write-up](https://plottypus.com/blog/macos-27-cpu-power-0w) [Reproduce it](https://plottypus.com/blog/macos-27-cpu-power-0w#reproduce-it) [The three-tool run, raw](https://plottypus.com/vs/mactop)

what it reads

## Clusters, clocks, zones, rails and every process

> Left: the chip summary (M5 Pro, 6 Super + 12 Performance cores, 20-core GPU, 24 GB), a GPU graph, a fan graph and per-core bars S0 to S5 and P0 to P11. Right: the super cluster at 14% and 2.5 GHz, and the super zone temperature at 74 degrees.
>
> cpu, expanded (crop, --demo data)

- **per-cluster clocks**: Each cluster gets its own graph and clock, computed from IOReport P-state residency.
- **zone temperatures**: From the SMC: 3,626 SMC keys on the M5 Pro, 285 temperature keys among them. No sudo, no helper daemon.
- **per-core load**: Every core as a bar: S0–S5 and P0–P11 on the M5 Pro.
- **power**: System, CPU, GPU, ANE and DRAM watts on one line, battery drain and time left beside them. Anything IOReport has not published is ≈ or —, never 0.
- **interval**: 100 ms to 60 s, 500 ms by default. `[` and `]` change it live.

> A process tree sorted by memory with columns pid, name, user, cpu percent, trend, gpu percent, mem, rss, power, read, write, wakeups per second and started. ollama-runner leads at 136% CPU, 88% GPU, 9.3 GB and 1.9 W.
>
> processes, tree view (--demo data): mem is the physical footprint Activity Monitor shows, cpu% is its unit (100 = one core), power is each process's watts from the kernel's per-task energy counter

honest by default

## — when it does not know. Never a made-up 0.

- **—**: **No reading.** Another user's process without root (the kernel answers EPERM), a sensor this Mac does not have, a watt figure older than 10 s. JSON prints `null`.
- **≈**: **Held.** Between macOS 27 batches plottypus keeps the last IOReport rate, timed by the driver's own timestamp, and shows its age next to it.
- **∅**: **Not drawn.** Hardware that is not there gets no panel: no fans on a fanless MacBook Air, no battery on a Mac mini. Anything under 0.05 W counts as absent.

self-cost

## Cheap enough to leave open all day

1.5% [[1]](https://plottypus.com/features#note-1)

of one core at the default 500 ms

0 [[1]](https://plottypus.com/features#note-1)

redraws while idle; one frame per sample otherwise

0.007 W [[1]](https://plottypus.com/features#note-1)

of its own, the kernel's per-task estimate

2.2 MB [[2]](https://plottypus.com/features#note-2)

one binary, nothing else installed

1. `scripts/perf-smoke.py`: 3 fresh processes, 5 s warm-up, 20 s window each, median. M5 Pro, macOS 27, median of 3, 160×45. About 1% of one core at 1 s. Before the rewrite it cost 7.06% of a core at 250 ms, 5.09% at 1 s and 0.18 W, with 106 empty redraws a second.
2. 2,166,064 bytes, arm64, ad-hoc signed, not notarized.

themes

## It looks like your terminal

The default theme is `auto`. At startup plottypus asks the terminal for its own colours (OSC 10, 11 and 4), waits at most 120 ms, and builds every role from your palette. Over ssh it skips the question.

10 built-in themes besides. Glass mode notices a translucent Ghostty, kitty or Alacritty from its config file and leaves the background to the terminal.

> The same demo moment drawn in the selected theme.
>
> theme auto: your terminal's own palette (Kanagawa Dragon here) (--demo data)

keys and scripts

## Keys you already know. Output you can pipe.

### Key profiles

`PLOTTYPUS_KEYS=htop` or `btop`, or pick one in settings. The mouse works too: click a row, click a header to sort, drag the gutter.

| action | plottypus | htop | btop |
| --- | --- | --- | --- |
| help | `?` | `F1` `?` | `?` |
| settings | `s` | `F2` `S` | `o` `s` |
| filter processes | `/` | `F3` `/` | `f` `/` |
| process tree | `t` | `F5` `t` | `e` `t` |
| sort | `o` `<` | `F6` `P` `M` `N` | `←` `→` |
| quit process (TERM) | `x` | `F9` `x` | `x` |
| force quit (KILL) | `K` | `K` | `K` |
| pause sampling | `p` | `Z` | `p` |
| quit | `q` | `F10` `q` | `q` |

[Every key, all three profiles](https://plottypus.com/docs/keys)

### Scripting

JSON schema 1, macmon field names, null for unmeasured. `--json` prints one sample, `--json-stream` keeps going.

json, schema 1 (head of a real sample)

```
plottypus --json
```

diagnose, during cargo build

```
plottypus --diagnose
```

[Every JSON field](https://plottypus.com/docs/json)

supported Macs

## Apple Silicon, M1 to M5

- M1
- M2
- M3
- M4
- M5

Including Pro, Max and Ultra. Intel Macs: no.

[What each Mac shows](https://plottypus.com/docs/supported-macs)

- **M5 Pro (Mac17,8)**: Live CPU watts from the SMC rails, within about 10% of IOReport. Run on hardware.
- **every other chip**: CPU watts from IOReport, ≈ with an age, — after 10 s. Everything else as on the M5 Pro, from per-chip tables pinned by fixture tests.
- **macOS**: Tested on macOS 27.0; the binary targets macOS 11+.

### Beside the others

| tool | cpu watts on macOS 27 | sudo | lives in |
| --- | --- | --- | --- |
| plottypus 1.0.0 | 15–48 W, measured | no | terminal |
| macmon 0.8.2 | 0.0 W in 20 of 20, measured | no | terminal |
| mactop 2.1.5 | 0.0 W in 20 of 20, measured | no (fan control: yes) | terminal |
| Stats 3.0.17 | 0.00 W in user reports (#3608, #3621) | no | menu bar |
| btop 1.4.7 | not shown | no | terminal |

Measured rows: our M5 Pro, 2026-09-24. Stats: not run by us. btop has the look people copy, and it is cheap at its 2 s default (1.3% of a core on our M5 Pro, btop 1.4.7, measured 2026-09-23). Since 1.4.7 it shows Apple Silicon GPU watts; it does not show CPU watts on macOS.

[Every comparison, dated and sourced](https://plottypus.com/compare)

price

## Free now. Pro later.

Free. Every live reading stays free. Personal or commercial use, on any number of Macs, under the EULA. The source is not open.

Pro is not on sale yet. Planned: $9 at launch, then $12, one time, three Macs, every 1.x update. Built once the free launch passes 500 installs or stars. No waitlist, no email form.

[What Pro will add, and the offline licence](https://plottypus.com/pro)

faq

## Questions a skeptic asks

**Does it need sudo?**

No. Every reading comes from calls an ordinary user may make: the SMC through IOKit, IOReport, HID sensors, Mach and sysctl. Root would only add other users' processes; without it their rows show — (on our Mac, 295 of 890 processes).

**How accurate is it on M1 to M4?**

It has run on one Mac so far, an M5 Pro (Mac17,8) on macOS 27.0. Other chips run from per-chip tables pinned by fixture tests. There, CPU watts come from IOReport: held with ≈ and an age between batches, and — once the last batch is more than 10 s old. If you have another chip, plottypus doctor prints what it can read; please send it.

**Why is it free, and why is the source closed?**

Free to use under the EULA. The source is not open. Free covers personal and commercial use on any number of Macs, and every live reading stays free. A paid Pro edition is planned for later; it is not on sale.

**Does it touch the network?**

The app makes no network connections: no telemetry, no update check, no crash reporter. The site sets no cookies. Vercel Analytics and Speed Insights count page views and load times.

**Does it run on Intel Macs or Linux?**

No. It reads Apple Silicon counters (IOReport channels, SMC keys, cluster residency), so it ships for arm64 macOS only.

**What does — mean?**

No reading. The kernel refused (EPERM for another user's process), the Mac has no such sensor, or a held watt figure is more than 10 s old. plottypus never prints 0 for a number it does not have; the JSON output prints null.

**Why not sudo powermetrics?**

powermetrics is Apple's own sampler and it needs root. plottypus reads the same class of counters without sudo and puts them next to clocks, temperatures, memory and processes on one screen.

install

## One line, no sudo

terminal

```
curl -fsSL https://plottypus.com/install.sh | sh
plottypus
```

The script checks the SHA-256 before it copies anything, installs to `~/.local/bin` (it prints the PATH line if that is missing) and never asks for sudo. A Homebrew tap is coming.

or by hand

[plottypus-v1.0.0-macos-arm64.tar.gz](https://plottypus.com/download/v1.0.0/plottypus-v1.0.0-macos-arm64.tar.gz) (1.1 MB)

sha-256 `89cdc2d1993dde0607d942103f393fb5bda6b38e1666ef96c3534d2c56e59f9b`

[Install, verify, uninstall](https://plottypus.com/docs/install)
