usbtree

Your USB device tree,
live in the terminal.

A cross-platform TUI for inspecting USB devices — hubs, classes, speeds, hot-plug events and live bandwidth. Pure Rust via nusb: no root, no libusb. Linux · macOS · Windows.

$ curl -fsSL https://raw.githubusercontent.com/gnomeria/usbtree/main/scripts/install.sh | sh
GitHub ↗ Releases Install options

#Features

Everything lsusb -t shows — plus names that make sense, hot-plug awareness, and live traffic.

🌳

Live device tree

Color-coded class gutter, per-class icons, tree rails, and speed badges (▂ 12M█ 10G). Rescans every second; collapse hubs to a +N badge.

🏷️

Names that make sense

Resolution chain: your overrides.ids → descriptor strings → a downloadable usb.ids (--updatelist) → the embedded snapshot → vendor + class heuristics.

Hot-plug watch

Plugged devices flash green, unplugged ones linger as red crossed-out ghosts for 30 s, and every event lands in a timestamped log panel.

📈

Live bandwidth

Per-device sparklines in the tree and a bandwidth graph in the detail panel. Unprivileged URBs/s on Linux; real bytes/s with root + the usbmon module (sudo modprobe usbmon). Linux only — macOS/Windows expose no unprivileged per-device traffic counter (sudo won't help), so live stats aren't implemented there yet.

🧩

Smart composite handling

Misc/IAD (0xef) devices are classified by their interface classes — a MOTU M2 shows as Audio, not Misc.

🦀

Pure Rust, zero setup

Built on nusb and ratatui: no root, no libusb, no drivers. One static binary for Linux, macOS, and Windows. --dump for scripts, --demo to try it without hardware.

#Platform support

The tree, names, hot-plug log and detail panel work everywhere. Live per-device traffic is Linux-only — macOS and Windows expose no unprivileged per-device counter, so the header reads ◌ activity n/a on this platform.

Feature Linux macOS Windows
Device tree — hubs, classes, speeds
Friendly names — overrides + usb.ids
Hot-plug watch + event log
Detail panel — path, vid:pid, serial
Device power bMaxPower, advertised
Live sparklines URBs/s
Real bandwidth usbmon bytes/s, root
Prebuilt binaries amd64 · arm64 arm64 amd64

#Install

Release archives ship for linux-amd64, linux-arm64, darwin-arm64, and windows-amd64, each sha256-listed in checksums.txt.

The shell installer and prebuilt binary links require a published GitHub release. If no release is available yet, install from source.

🐚 Shell script — Linux · macOS

# installs to /usr/local/bin or ~/.local/bin
curl -fsSL https://raw.githubusercontent.com/gnomeria/usbtree/main/scripts/install.sh | sh

Pin a version with USBTREE_VERSION=0.0.1, pick a directory with USBTREE_INSTALL_DIR. Checksums are verified automatically.

📦 Prebuilt binary — all platforms

# grab it from the latest release
tar -xzf usbtree_*_linux-amd64.tar.gz
./usbtree

Windows: unzip usbtree_*_windows-amd64.zip and run usbtree.exe. Latest release →

⚠ Binaries are not code-signed/notarized. macOS: xattr -d com.apple.quarantine ./usbtree (the install script does this for you). Windows: SmartScreen → More infoRun anyway. Verify checksums if in doubt.

🦀 Cargo — from source

cargo install --git https://github.com/gnomeria/usbtree

Or clone and cargo build --release. Stable toolchain, edition 2024.

#Keyboard

j / k · ↑↓move selection
↵ · Spacecollapse / expand hub
h / l · ← →fold / unfold
g / Gjump top / bottom
rforce rescan
q · Escquit