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
Everything lsusb -t shows
— plus names that make sense, hot-plug awareness, and live traffic.
Color-coded class gutter, per-class icons, tree rails, and speed
badges (▂ 12M → █ 10G). Rescans every
second; collapse hubs to a +N badge.
Resolution chain: your overrides.ids → descriptor
strings → a downloadable usb.ids (--updatelist) → the
embedded snapshot → vendor + class heuristics.
Plugged devices flash green, unplugged ones linger as red crossed-out ghosts for 30 s, and every event lands in a timestamped log panel.
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.
Misc/IAD (0xef) devices are classified by their interface classes —
a MOTU M2 shows as Audio, not Misc.
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.
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 |
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.
# 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.
# 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 info → Run anyway. Verify checksums if in doubt.
cargo install --git https://github.com/gnomeria/usbtree
Or clone and
cargo build --release.
Stable toolchain, edition 2024.