slmtop

August 5, 2026 ยท View on GitHub

slmtop is a terminal dashboard developed with Rust for realtime Slurm monitoring. It is inspired by htop and slurm-monitor-top, and built for Slurm-specific jobs, nodes, GPU resources, disks and recent accounting data. image

Features

  • Five focusable TUI panels: jobs, nodes, GPUs/resources, disks and summary/accounting.
  • Realtime refresh from Slurm CLI commands with per-command timeouts and structured errors.
  • Sortable tables by keyboard or mouse header click.
  • Search and typed filters per panel, for example owner=me state=running gpu=a100.
  • Panel focus, resize, show/hide, row selection, and column visibility controls.
  • Job details with guarded cancel, hold, release, and requeue actions.
  • Per-user resource usage stats: Jobs, CPUs, GPUs, memory and job time limit.

Requirements

  • Rust toolchain with Cargo.
  • Slurm CLI commands in PATH: squeue, sinfo, scontrol, scancel, and optionally sacct.

Installation

Download the latest precompiled binary for your platform from the releases page, or build from source as described below.

cargo build --release
./target/release/slmtop

Help:

Realtime Slurm cluster monitor

Usage: slmtop [OPTIONS]

Options:
  -i, --refresh-interval <REFRESH_INTERVAL>
          Refresh interval in seconds [default: 3]
  -t, --command-timeout <COMMAND_TIMEOUT>
          Per-command timeout in seconds [default: 4]
  -l, --accounting-limit <ACCOUNTING_LIMIT>
          Recent sacct rows to keep [default: 100]
  -u, --user <USER>
          Show only jobs owned by this user and use it as the current username
  -T, --theme <THEME>
          Color theme: catppuccin, monokai, tokyonight, dracula, onedark, nightowl, classic [default: catppuccin]
  -h, --help
          Print help
  -V, --version
          Print version

Useful options:

slmtop --refresh-interval 2 --command-timeout 5 --accounting-limit 200 -T nightowl
slmtop --user bob

Keybindings

  • q: quit.
  • ?: help.
  • r: refresh now.
  • t: switch theme.
  • Tab / Shift-Tab or 1-4: change focused panel.
  • Arrow keys or j / k: move selected row.
  • s: cycle sort column for the focused panel.
  • d: toggle sort direction.
  • Mouse left-click on a table header: sort by that column.
  • /: search the focused panel.
  • f: set a typed filter on the focused panel.
  • c: toggle optional columns in the focused panel.
  • x: hide the focused panel.
  • v: show the next hidden panel.
  • [ / ]: resize panel width split.
  • { / }: resize panel height split.
  • Enter on a job: open job details.

In the job details popup:

  • c: cancel job.
  • h: hold job.
  • u: release job.
  • r: requeue job.
  • Esc: close popup.

Job actions require a y confirmation before Slurm is changed.

Filters

Filters are whitespace-separated tokens. Free text searches within the panel row, and key-value tokens narrow the result set:

owner=me state=running
owner=others part=gpu gpu=a100 train
state=pending
node_state=drain gpu=h100

Supported keys include owner, user, state, part, partition, gpu, gpu_type, gres, and node_state.

Workspace Layout

  • crates/slmtop-core: domain models, sorting, filtering, search, summaries, and GPU aggregation.
  • crates/slmtop-parsers: pure parsers for squeue, sinfo, sacct, memory, CPU, and GPU/GRES strings.
  • crates/slmtop-slurm: backend traits, refresh orchestration, telemetry, and job-control contracts.
  • crates/slmtop-slurm-cli: Slurm CLI backend.
  • crates/slmtop-tui: Ratatui/Crossterm terminal UI.
  • crates/slmtop: slmtop binary.

Validation

cargo fmt --check
cargo test
cargo clippy --workspace --all-targets
cargo run -p slmtop -- --version-only