bottom

A cross-platform graphical process and system monitor for the terminal, featuring a customizable interface with CPU, memory, disk, and network views.

bottom (invoked as btm) is a feature-rich, cross-platform system monitor for the terminal. It provides an at-a-glance overview of your system's CPU, memory, disk, network, and process activity in a clean, interactive TUI — think htop, but more visually polished and highly configurable.

Features

  • Multi-widget layout — simultaneously view CPU usage, memory, disk I/O, network throughput, and process list
  • Responsive and resizable — layout adapts to your terminal size; widgets can be navigated with the keyboard
  • Filtering — filter the process list in real time by name or command
  • Sorting — sort processes by CPU, memory, PID, name, and more
  • Grouped mode — group processes by name to see aggregate resource usage
  • Battery info — optionally display battery charge and status
  • Highly configurable — tweak colours, default widgets, update rate, temperature units, and more via a TOML config file
  • Cross-platform — works on Linux, macOS, and Windows

Installation

cargo install bottom --locked

Or via your package manager:

# macOS
brew install bottom

# Arch Linux
pacman -S bottom

# Debian / Ubuntu
apt install bottom

# Fedora
dnf install bottom

# Nix
nix-env -iA nixpkgs.bottom

Usage

# Launch with default layout
btm

# Use a basic, more htop-like mode
btm --basic

# Set the update rate to 500ms (default is 1000ms)
btm --rate 500

# Show temperature in Fahrenheit
btm --fahrenheit

# Launch with a specific config file
btm --config ~/.config/bottom/bottom.toml

Keybindings

KeyAction
?Open help menu
q / Ctrl+cQuit
Arrow keys / hjklNavigate between widgets and within lists
ddKill the selected process
fFreeze the display
/Filter processes
+ / -Zoom in/out on graphs
eExpand the selected widget to full screen

Configuration

bottom reads from ~/.config/bottom/bottom.toml. A minimal example:

[flags]
rate = 500          # update every 500ms
temperature_type = "celsius"
default_widget_type = "proc"

[colors]
table_header_color = "LightBlue"
selected_text_color = "Black"
selected_bg_color = "Cyan"