Skip to content
Go back

btop vs htop vs bottom: Top Replacements

By SumGuy 10 min read
btop vs htop vs bottom: Top Replacements

Your server is dragging. Something’s eating memory, load average is climbing, and you’ve got maybe 90 seconds before your boss notices the dashboard. You ssh in and type top.

And then top greets you with its classic 1984 energy: a wall of numbers, no colors, no mouse, and that special kind of inscrutable UI that makes you feel like you’re filing a tax return. Great tool. Built for a different era.

It’s 2026. There are better options, and honestly they’re not even hard to install. Let’s compare the three that actually come up in every “replace top” conversation: btop, htop, and bottom (the one with the dumb name that ruins every search).


What We’re Actually Comparing

All three are terminal process monitors. They all show CPU, memory, processes, and let you kill stuff. The differences are in aesthetics, feature depth, configurability, resource overhead, and how much you’ll enjoy staring at them at 2 AM.

Quick version reference:

Installation everywhere you’d want it:

Terminal window
# htop
sudo apt install htop # Debian/Ubuntu
sudo dnf install htop # Fedora/RHEL
sudo pacman -S htop # Arch
# btop
sudo apt install btop # Ubuntu 22.04+
sudo dnf install btop # Fedora 36+
sudo pacman -S btop # Arch
# bottom (the binary is `btm`, of course)
sudo pacman -S bottom # Arch
cargo install bottom # anywhere with Rust toolchain
# or grab the binary from GitHub releases:
curl -LO https://github.com/ClementTsang/bottom/releases/download/0.10.2/bottom_x86_64-unknown-linux-gnu.tar.gz
tar -xzf bottom_*.tar.gz
sudo mv btm /usr/local/bin/

htop — The Reliable Old Friend

htop has been around since 2004. It replaced top the way a decent mechanical keyboard replaces a rubber-dome: same purpose, dramatically better to use. If you’ve been on Linux for more than 15 minutes, you’ve probably already run it.

Terminal window
htop

What you get:

htop’s killer feature is that it’s immediately usable. No config file to learn. Open it, you understand it. Press F9 to kill a process, F6 to sort by column, / to search. Done. It’s the Toyota Camry of process monitors: not exciting, works every time.

The process tree view (F5) is genuinely useful when you need to see which parent spawned the runaway child process eating your RAM:

Terminal window
htop -t # start with tree view
htop -u www-data # filter to one user immediately
htop -p 1234,5678 # watch specific PIDs only

Where htop falls short: The UI is frozen in roughly 2010. The meters are functional but not beautiful. There’s no GPU monitoring. No disk I/O breakdown by process. And the config format (~/.config/htop/htoprc) is a barely-documented flat file that you’ll edit once, break, and never touch again.

It also has no network throughput per-process view, which matters more than people admit. You’ll find yourself opening nethogs in a separate pane, which kind of defeats the point of an all-in-one monitor.


btop — The One That Actually Looks Good

btop started as a Python rewrite of a rewrite (bpytop), then became a C++ project (btop++) — which is what it remains today. Whatever version you’re running, the defining characteristic is: it’s gorgeous.

Terminal window
btop

Open it for the first time and it looks like someone actually cared about the UI. You get:

The default theme is legitimately nice. But if you want to tweak it:

Terminal window
# Config lives here after first run:
~/.config/btop/btop.conf

A few useful config options to know about:

~/.config/btop/btop.conf
# How often to update (ms) — lower = more accurate, more CPU
update_ms = 2000
# Color theme
color_theme = "Default"
# Show temperatures (requires lm-sensors or similar)
check_temp = True
# CPU graph mode: "normal", "inverted", "default"
graph_symbol = "braille"
# Sort processes by (pid, program, arguments, threads, user, memory, cpu lazy, cpu direct)
proc_sorting = "cpu lazy"
# Show process tree by default
proc_tree = False

The graph_symbol = "braille" setting is the one that makes btop look like the screenshots people post. It uses Unicode braille characters to get smoother, higher-resolution graphs than block characters. On any modern terminal (kitty, alacritty, WezTerm, even modern gnome-terminal) this works great. On older terminals, fall back to "block".

Network monitoring in btop is solid enough to replace casual nethogs use:

Terminal window
# btop shows per-interface totals — if you want per-process, you still need nethogs
sudo nethogs eth0

btop doesn’t do per-process network attribution (a kernel limitation, not a btop limitation), but the interface-level view is there and it’s live.

Where btop falls short: It’s heavier than htop. Not dramatically, but if you’re on a very constrained system (sub-512MB RAM, shared hosting VPS, ancient ARM board), you’ll notice. It also has more configuration surface area, which is a feature and a bug. The keybindings are different from htop muscle memory, and the first session is slightly disorienting.

Check your distro’s package version — some ship older builds and the upstream 1.4.x releases move quickly.


bottom — The Rust One With the Confusing Name

bottom is invoked as btm. Not bottom. Not bot. btm. This is the first and last time the project’s naming makes any sense, and I say this with affection.

Terminal window
btm

bottom is the most opinionated of the three. It came out of the Rust CLI tool renaissance and it shows: the defaults are more aggressive, the config is TOML, and it’s designed more around keyboard-driven navigation than casual point-and-click.

What sets it apart:

Widget-based layout. The UI is divided into resizable, movable widgets. You can restructure the whole layout by editing the config. Want CPU on top-left, memory bottom-left, process list taking the full right half? Write that in TOML:

~/.config/bottom/bottom.toml
[[row]]
ratio = 30
[[row.child]]
type = "cpu"
[[row.child]]
type = "mem"
[[row]]
ratio = 70
[[row.child]]
type = "proc"
ratio = 2
[[row.child]]
type = "net"

This level of layout control doesn’t exist in htop or btop. If you’ve ever wanted a monitoring setup that’s exactly the layout you want and nothing else, bottom is the path.

It’s fast. Rust, low overhead, and it shows. On a system with 128MB RAM and an ancient CPU, btm will run where btop might stutter.

Temperature and disk I/O widgets are built in and well-integrated. The disk widget shows read/write per device in real time. Temperature display works with lm-sensors on Linux.

Some useful flags:

Terminal window
btm --rate 500 # update every 500ms (default 1000ms)
btm --expanded # start with selected widget expanded full-screen
btm --color gruvbox # built-in color themes
btm --mem_as_value # show memory as absolute values not percentages
btm -b # basic mode, less UI chrome

Where bottom falls short: The default keybindings are non-obvious. dd to kill a process (vim-style) is slick if you’re a vim person and baffling if you’re not. The documentation is thorough but you need to read it. First-run experience is rougher than btop or htop.

Also, btm as the command name causes genuine problems. Every time you tell someone to use bottom, you have to explain that the command is btm. It’s a solvable problem (alias bottom=btm in your shell config) but it shouldn’t be a problem in 2026.


Side-by-Side: What Actually Matters

Featurehtop 3.3btop 1.4bottom 0.10
Install size~200KB~2-5MB~3MB (Rust bin)
Memory footprint~5-15MB~20-40MB~10-20MB
Per-core CPU graphsBars onlyTime seriesTime series
Network monitorNoPer interfacePer interface
Disk I/ONoPer devicePer device
GPU monitoringNoNvidia (partial)No
TemperatureNoYesYes
Layout customizationMinimalTheme-basedFull TOML layout
Mouse supportYesYesLimited
Config formatFlat fileKey=valueTOML
First-run UXExcellentGoodRough
Startup timeInstantFastFast

On a resource-constrained box (Raspberry Pi, cheap VPS, LXC container with 256MB RAM): htop. No contest. It’ll run anywhere, it’s in every distro’s base repos, and it uses basically nothing.

On a development machine or home lab server where you’re regularly checking on things: btop. The visual quality genuinely improves usability. When CPU usage spikes, the scrolling time series graph tells a story that a single bar cannot. The disk and network views mean you rarely need to open a separate tool.

If you’re a keyboard person who wants a custom monitoring layout: bottom. The TOML layout system is legitimately unique. Once configured, it’s exactly what you want and nothing you don’t.


Practical Setup: Making the Right One Work

If you’re adding btop to a server you actually care about, a reasonable starting config:

~/.config/btop/btop.conf
update_ms = 1000
proc_sorting = "cpu lazy"
proc_tree = False
graph_symbol = "braille"
check_temp = True
shown_boxes = "cpu mem net proc"

For bottom on a dev machine where you want a clean layout:

~/.config/bottom/bottom.toml
[flags]
rate = "1000ms"
color = "gruvbox"
mem_as_value = false
[[row]]
ratio = 40
[[row.child]]
type = "cpu"
ratio = 2
[[row.child]]
type = "temp"
[[row]]
ratio = 30
[[row.child]]
type = "mem"
[[row.child]]
type = "net"
[[row]]
ratio = 30
[[row.child]]
type = "proc"
ratio = 3

And if you’re a shell config person, a few aliases that actually help:

Terminal window
# In ~/.bashrc or ~/.zshrc
# Launch btop watching a specific set of processes
alias btop-web='btop --filter "nginx|php|mysql"'
# bottom with faster refresh for active debugging
alias btm-fast='btm --rate 250'
# htop sorted by memory for memory leak hunting
alias htop-mem='htop --sort-key PERCENT_MEM'

The Bottom Line

Use htop if: you’re on a constrained system, you SSH into many different boxes and want consistency, or you just need a reliable tool you already know how to use. htop 3.3 is genuinely good software that doesn’t need to prove anything.

Use btop if: you spend real time in a terminal monitor, you care that your tools look decent, and you want disk + network + CPU in one place without opening three tools. It’s the default recommendation for most people in 2026.

Use bottom if: you want full layout control, you’re comfortable with a config file, and the keyboard-driven philosophy clicks with you. The TOML layout system is the feature nobody else has.

The honest answer is: install all three. They’re tiny. btop gets the daily driver slot, htop stays as the universal fallback you can always count on, and btm lives configured on the machine where you actually care about the layout. None of these cost you anything except the 30 seconds it takes to install them.

And none of them are top. That’s the whole point.


Share this post on:

Send a Webmention

Written about this post on your own site? Send a webmention and it'll show up above once verified.


Next Post
Boundary vs Teleport

Discussion

Powered by Garrul . Sign in with GitHub or Google, or post anonymously.

Related Posts