verdict
Use htop on servers, in containers, on Linux, on anything you ssh into and did not set up yourself. It is packaged everywhere, it is small, it is GPL-2.0, and it has been around for two decades. Keep using it on your Mac too if processes are all you look at. Use plottypus when the question is about the Mac itself: why the fans spun up, what the chip is clocked at, how many watts a build draws. htop 3.5.3 on macOS has no temperature, clock or power readings; plottypus shows them next to a process table that takes htop’s keys.
At a glance#
Checked 2026-09-24. htop from its 3.5.3 source (the macOS platform code); plottypus 1.0.0 on an M5 Pro, macOS 27.0.
| plottypus 1.0.0 | htop 3.5.3 on macOS | |
|---|---|---|
| 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 |
No |
| GPU MHz / °C | Yes / yes | GPU load meter only |
| Per-cluster clocks | Super, Performance and Efficiency clusters with MHz | No (CPU frequency and temperature are not read on macOS) |
| Per-process energy / GPU | Watts per process; GPU share in the details card | No / no |
| Needs sudo | No | No |
| Self-cost | ~1.5% of one core at 500 ms, ~1.0% at 1 s (our measurement) | Not measured |
| Works over ssh / in tmux | Yes | Yes |
| Process actions | TERM, KILL, INT, STOP/CONT, any signal, renice, background QoS | Any signal, nice, tag several processes, open files (lsof) |
| JSON output | --json, --json-stream |
No |
| Themes / translucent windows | 10 built-in plus one built from your terminal’s palette; glass keeps cell backgrounds clear |
8 built-in colour schemes |
| Platforms | macOS on Apple Silicon only | Linux, macOS, FreeBSD, OpenBSD, NetBSD, DragonFly BSD, Solaris |
| Price / licence | Free download, proprietary EULA; a paid Pro tier is planned, not on sale | Free, GPL-2.0 |
Sources: htop 3.5.3 release, htop’s macOS platform code (it sets CPU frequency and temperature to “not available” and reads GPU load from the IOAccelerator’s PerformanceStatistics), htop.dev.
What htop reads on a Mac#
htop’s macOS build fills its CPU meters from Mach, its memory and swap meters from the VM statistics, and a GPU load meter from the IOAccelerator’s statistics. Frequency and temperature are marked not available in the source. There is no power meter.
plottypus reads the same Mach counters for CPU load and processes, then adds what only the SoC tells you:
plottypus --json | jq '{cpu_power, gpu_power, sys_power, gpu_freq_mhz, temp}'{
"cpu_power": 23.26,
"gpu_power": 0.36,
"sys_power": 49.33,
"gpu_freq_mhz": 338,
"temp": {"cpu_temp_avg": 86.08, "gpu_temp_avg": 74.54, "hotspot_c": 88.42,
"e_cluster_c": null, "p_cluster_c": 85.79, "s_cluster_c": 86.65}
}That is one real sample from the M5 Pro under load. e_cluster_c is null because the M5 Pro has no Efficiency cores; plottypus does not invent a reading for them.
CPU percentages#
htop and plottypus count a process’s CPU the same way: 100% is one fully busy core. The machine-wide graph differs. plottypus weights each core’s busy time by the clock it ran at, so 12 cores busy at 1.3 GHz do not look like 12 cores busy at 4.4 GHz. The cluster rows show both numbers side by side.
Processes: what htop still does better#
htop’s process table has had a lot of work, and some of it plottypus does not have in 1.0.0:
- tagging several processes with
Spaceand signalling them together (the key is bound in the htop profile but shows “not available yet”); - sort by time (
T, same story); lfor a process’s open files,sto trace syscalls (withstrace, on Linux), and a setup screen where you pick every column and meter.
What plottypus adds per process: energy in watts, GPU share, disk I/O, wakeups, footprint memory (the figure Activity Monitor calls Memory), STOP/CONT, background QoS, and a kill that is refused if the pid was reused since you selected it. Without sudo, macOS will not describe other users’ processes to plottypus; it shows — in those cells, not 0.
Switching from htop#
plottypus has an htop key profile. Turn it on for one session, for good, or from the settings page:
PLOTTYPUS_KEYS=htop plottypus# ~/.config/plottypus/config.toml
keymap = "htop"Or press s, go to keys, and change “key profile”. Help (F1 or ?) lists the keys of the profile in use.
| htop | In plottypus with the htop profile |
|---|---|
F1 help |
same |
F2 setup |
F2 or S opens settings |
F3 search, F4 filter |
both open the filter |
F5 tree |
F5 or t |
F6 sort by |
cycles the sort column |
P M N sort by CPU, memory, pid |
same |
I invert sort |
same |
F7 / F8 nice |
same (raise / lower priority) |
F9 kill |
sends TERM after a y/n prompt; K sends KILL |
F10 quit |
same (q works too) |
Z pause |
same |
Space tag, T sort by time |
bound, but not available in 1.0.0 |
In htop, F9 opens a signal list. In plottypus that list is Enter, then X, in the details card. Note that K is force-kill here, not htop’s “hide kernel threads”.
One config tip: htop’s default refresh is 1.5 s. plottypus defaults to 500 ms and accepts interval_ms of 250, 500, 1000, 2000 or 5000 in the config file, or any value from 100 ms to 60 s with -i for one run:
plottypus -i 1.5s