Skip to content
SyscallBrainPublic

About

Keyboard-driven terminal UI for libvirt/virsh, with vim keys and live graphs

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

9 stars

Watchers

2 watching

Forks

Repository files navigation

virsh-tui

A keyboard-driven terminal UI for libvirt, with vim keys and live graphs.

CI Latest release Docs License: MIT Rust 1.88+ Built With Ratatui Platform: Linux

Documentation · Install · Screenshots · Key bindings · Changelog · Report a bug

virsh-tui in action: the domain list, bulk actions on marked domains, the live monitor, the hardware editor with its XML diff, the snapshot tree, the host, network and storage views, the which-key menu, the command palette and Tab completion, the new domain wizard and themes

virsh-tui shows every virtual machine on a libvirt connection with live CPU, memory, disk and network graphs, and lets you start, stop, snapshot, reconfigure and create them from the keyboard. Every action is a virsh (or virt-install) command, and virsh-tui shows you that command before and after it runs, so nothing happens behind your back and you can reuse it in a script.

It works with qemu:///system, qemu:///session and remote hosts over qemu+ssh://, with the same permissions virsh has.

Features

  • Domains list with state chips, filtering, sorting, marks and bulk actions
  • Lifecycle keys: start, ACPI shutdown (tracked until the guest stops), destroy, reboot, reset, pause, managed save, autostart, undefine
  • Live monitor per domain: per-vCPU meters, memory and balloon, per-disk and per-NIC rates, with 60 s, 5 min and 1 h history
  • Hardware editor that shows the XML diff and the exact commands before you apply with :w
  • Snapshot tree with create, revert, delete and a diff against the current configuration; push backups of every disk with :backup
  • Migration dialog with live, offline and storage-copy options, and libvirt job progress (percent, ETA) for migrations, saves and backups
  • Domain tags stored in libvirt metadata, with /#tag filtering
  • Host view with per-thread CPU, memory, hugepages, KSM, pools and networks
  • Networks with DHCP leases, owning domains, and pinning a lease as a static entry
  • Storage pools and volumes with backing chains, plus ISO insert and eject
  • Live libvirt event stream for domains, networks and pools, with desktop or terminal notifications when a domain crashes or a long job finishes
  • Guest agent info (OS, users, file systems) and live host CPU and memory on remote qemu+ssh:// connections
  • Six-step new domain wizard that builds and runs virt-install
  • : command line with Tab completion for commands, domains, themes, paths and every virsh flag; anything else is passed to virsh
  • Fuzzy command palette, which-key hints, and keys you can remap from the settings screen
  • Custom actions bound to your own commands, per-connection profiles and a read-only mode
  • --doctor checks permissions, firmware and tools and explains each fix
  • Nine themes plus custom ones, a settings screen, and a 256-colour fallback
  • --dry-run to see what each key would run, --demo to try it with no libvirt at all

Screenshots

Domains dashboard Events
Domains dashboard Live libvirt events
Domain monitor Hardware editor
Live monitor Hardware editor with XML diff
New domain wizard Host view
New domain wizard Host
Networks view Command palette
Networks and DHCP leases Command palette
Storage view Snapshots
Storage pools and volumes Snapshot tree
Themes
catppuccin-mocha gruvbox-dark
catppuccin-mocha gruvbox-dark
nord dracula
nord dracula

The presentation and the screenshots come from --demo mode, with example data.

Install

You need Linux on x86_64 or aarch64 and the libvirt client tools (virsh). virt-install is used by the new domain wizard and virt-viewer by the graphical viewer; the packages below install virsh and recommend the other two.

Download the file for your system from the latest release. x86_64 packages are named amd64 or x86_64, and aarch64 packages arm64 or aarch64. SHA256SUMS lists the checksum of every file. The binary is static, so it runs on any distribution whatever its glibc. (Releases after 0.1.0 have these packages; 0.1.0 has only an x86_64 archive.)

System Install
Arch Linux paru -S virsh-tui-bin (or virsh-tui to build from source) from the AUR, or sudo pacman -U ./virsh-tui-*-x86_64.pkg.tar.zst
Debian, Ubuntu sudo apt install ./virsh-tui_*_amd64.deb
Fedora, RHEL sudo dnf install ./virsh-tui-*.x86_64.rpm
openSUSE sudo zypper install --allow-unsigned-rpm ./virsh-tui-*.x86_64.rpm
Any other Linux unpack the .tar.gz and put virsh-tui on your PATH

To build it yourself you need Rust 1.88 or newer. It is on crates.io:

cargo install --locked virsh-tui

Or from a clone:

git clone https://github.com/SyscallBrain/virsh-tui
cd virsh-tui
cargo build --release
./target/release/virsh-tui

To manage qemu:///system, your user must be allowed to use it, which on most distributions means being in the libvirt group. Use a terminal with truecolor and a font with box-drawing and braille characters; the layout needs at least 100×30, and from 153 columns the metrics sit next to the domain list. The installation guide has the details.

Quick start

virsh-tui                        # default URI (qemu:///system)
virsh-tui -c qemu:///session     # per-user daemon
virsh-tui -c qemu+ssh://me@host/system
virsh-tui --demo                 # example data, nothing runs
virsh-tui --dry-run              # show commands instead of running them
Key Action
j / k, gg / G move
Enter / Backspace open / back
1 … 5 Domains, Host, Networks, Storage, Events
s / S / D start / shutdown / destroy
p / r / R pause-resume / reboot / reset
c / v / e console / viewer / edit XML
/ filter
Space leader key: new domain, clone, snapshots, media…
: command line (Tab completes)
Ctrl-p command palette
? all key bindings
, settings
q quit

Documentation

The user guide covers every view, the wizard, the command line, configuration, themes, key remapping and troubleshooting. Its source is in book/.

Configuration

Settings live in ~/.config/virsh-tui/config.toml, key overrides in keymap.toml and custom themes in themes/. The settings screen (,) and :set key=value write the file for you. See Configuration.

Contributing

Issues and pull requests are welcome. Read CONTRIBUTING.md for how to build and test.

License

MIT © 2026 Tiago Correia

About

Keyboard-driven terminal UI for libvirt/virsh, with vim keys and live graphs

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

9 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages