compare

plottypus vs htop

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:

sh
plottypus --json | jq '{cpu_power, gpu_power, sys_power, gpu_freq_mhz, temp}'
json
{
  "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 Space and signalling them together (the key is bound in the htop profile but shows “not available yet”);
  • sort by time (T, same story);
  • l for a process’s open files, s to trace syscalls (with strace, 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:

sh
PLOTTYPUS_KEYS=htop plottypus
toml
# ~/.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:

sh
plottypus -i 1.5s