compare

plottypus vs btop

verdict

Use btop if you also watch Linux or BSD machines and want one tool, one config and one set of keys on all of them. It runs on Linux, macOS, FreeBSD, NetBSD and OpenBSD, it is open source (Apache-2.0), and on Linux it reads NVIDIA, AMD and Intel GPUs, which plottypus does not. Use plottypus if the machine you care about is an Apple Silicon Mac. On our M5 Pro, btop 1.4.7 showed no CPU watts, no cluster clocks, 18 unlabelled cores and a GPU temperature of 0 °C. plottypus shows the Super and Performance clusters with their MHz, CPU and GPU watts, and per-process energy.

At a glance#

Checked 2026-09-24 on a MacBook Pro Mac17,8 (M5 Pro, 6 Super + 12 Performance cores, 20-core GPU), macOS 27.0, btop 1.4.7 from Homebrew with a fresh config.

plottypus 1.0.0 btop 1.4.7
CPU watts on macOS 27 Live from SMC power rails on the M5 Pro; other chips get the last IOReport batch, marked with its age Not shown on macOS
GPU watts Yes Yes, from IOReport (added in 1.4.7)
GPU MHz / °C Yes / yes 338 MHz shown / 0 °C on the M5 Pro
Per-cluster clocks Super, Performance and Efficiency clusters with MHz Cores listed flat as C0–C17, no clocks
Per-process energy / GPU Watts per process; GPU share in the details card No / no
Needs sudo No No
Self-cost, same Mac and method ~1.5% of one core at 500 ms, ~1.0% at 1 s 1.30% at its 2 s default, 2.28% at 1 s
Works over ssh / in tmux Yes Yes
Process actions TERM, KILL, INT, STOP/CONT, any signal, renice, background QoS TERM, KILL, any signal, nice
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 41 bundled theme files; theme_background = false for a transparent background
Platforms macOS on Apple Silicon only Linux, macOS, FreeBSD, NetBSD, OpenBSD
Price / licence Free download, proprietary EULA; a paid Pro tier is planned, not on sale Free, Apache-2.0

Sources: btop 1.4.7 release, btop README, btop’s key list, btop’s macOS collector. The btop screen readings are from our own capture at 160×45 on the machine above.

What btop shows on an M5 Pro#

btop’s CPU box lists the 18 cores as C0 to C17, each with a load bar and a temperature. It does not say which six are Super cores, and it shows no clock for any of them. On a Mac with two kinds of core that matters: a core at 100% and 1.3 GHz is doing a fraction of the work of one at 100% and 4.4 GHz.

The GPU line shows load, memory in use and power, and the GPU box (5) adds a clock. Its temperature read 0°C on our M5 Pro; plottypus read 74–75 °C for the same GPU a few minutes earlier. btop tracks this as issue #1653, open on 2026-09-24. Its network download rate reading 0 B/s on recent macOS is issue #1850, also open.

plottypus puts the clusters first. Here is one sample from plottypus --json with every core busy:

json
"clusters": [
  {"kind": "performance", "cores": 12, "usage": 1.0, "scaled": 1.0,  "freq_mhz": 4380},
  {"kind": "super",       "cores": 6,  "usage": 1.0, "scaled": 0.948, "freq_mhz": 4368}
]

usage is the share of time the cores were busy; scaled weights it by clock, so a cluster idling along at a low frequency does not look as busy as one at full speed.

Watts#

btop 1.4.7, the latest release (1 May 2026), shows GPU power on Apple Silicon: #1541 added a GPU backend that reads IOReport’s GPU Energy channel. It shows no CPU power on macOS. The CPU power readout it gained in 1.4.5 (#1227) is wired up in the Linux and BSD collectors only, and the 1.4.7 macOS collector never turns it on. plottypus reads CPU power without sudo. On the M5 Pro it comes from the SMC’s CPU power rails, calibrated against IOReport. On other chips it comes from IOReport’s CPU Energy counter, divided by the driver’s own timestamps rather than by the sampling interval. On macOS 27 that counter publishes in batches seconds to minutes apart, so plottypus holds the last batch, marks it with its age, and shows once it is more than 10 s old. It never shows a made-up 0.

System watts (the SMC PSTR key), GPU watts and, when the counters publish, ANE and DRAM watts sit beside it.

Cost of leaving it open#

Both tools only repaint when something changed: 0 idle redraws each. Measured with our perf-smoke.py script (160×45 pty, fresh config, medians of three 20 s windows, M5 Pro, macOS 27, 2026-09-23):

plottypus 1.0.0 btop 1.4.7
CPU, default interval ~1.5% (500 ms) 1.30% (2 s)
CPU at 1 s ~1.0% 2.28%
Energy (kernel estimate) ~0.007 W (500 ms) 0.011 W (2 s), 0.028 W (1 s)

The btop runs and the plottypus 1.0.0 runs were taken hours apart on a machine with other builds going, so treat differences under about 0.3 points as noise. At its own defaults btop is a little cheaper, because it samples a quarter as often.

Processes#

Both have a filterable, sortable process table with a tree view, a details pane and signals. btop has per-process mini graphs and “follow process”. plottypus adds, per process:

  • energy in watts (the kernel’s per-task estimate), GPU share, disk I/O and wakeups;
  • footprint memory, the figure Activity Monitor calls Memory;
  • STOP/CONT, renice and a background-QoS toggle in the details card;
  • a kill refused if the pid has been reused since you selected it.

Without sudo, macOS will not describe other users’ processes. plottypus shows in those cells rather than a zero.

Scripting#

btop is interactive only. plottypus prints the same data as JSON, using macmon’s field names where they exist:

sh
plottypus --json | jq '{cpu_power, gpu_power, sys_power}'
plottypus --json-stream --count 60 -i 1s > build.ndjson
plottypus --diagnose        # "Busy: rustc using 9.1 cores" plus the evidence

Switching from btop#

plottypus ships a btop key profile. Turn it on in any of three ways:

sh
PLOTTYPUS_KEYS=btop plottypus       # this session only
toml
# ~/.config/plottypus/config.toml
keymap = "btop"

or s → keys → key profile inside the app. The help screen (?) follows the profile you pick.

btop In plottypus with the btop profile
f or / filter same
sort column, r reverse same
e tree same (t also toggles the tree)
o options o or s opens settings
Enter details same
q quit, m menu, ? help same
t SIGTERM x (plottypus asks y/n first)
k SIGKILL K (k moves up, vim-style)
s signal menu Enter, then X in the details card
N nice Enter, then + / - in the details card
+ / - update timer (±100 ms) ] or + samples faster, [ or - slower
p presets, 15 toggle boxes 15 are presets (silicon, ml, laptop, sre, ricer); p pauses

Watch t and k. In btop they send signals; in this profile they toggle the tree and move the selection up, and every kill goes through x, K or the signal picker, each behind a y/n prompt.

Two config lines that make plottypus feel closer to btop’s defaults:

toml
interval_ms = 2000        # btop's update_ms default; accepts 250, 500, 1000, 2000 or 5000
glass = "on"              # like theme_background = false: never paint a cell background