A keyboard-driven terminal UI for libvirt, with vim keys and live graphs.
Documentation · Install · Screenshots · Key bindings · Changelog · Report a bug
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.
- 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
/#tagfiltering - 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 everyvirshflag; anything else is passed tovirsh- 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
--doctorchecks permissions, firmware and tools and explains each fix- Nine themes plus custom ones, a settings screen, and a 256-colour fallback
--dry-runto see what each key would run,--demoto try it with no libvirt at all
![]() |
![]() |
| Domains dashboard | Live libvirt events |
![]() |
![]() |
| Live monitor | Hardware editor with XML diff |
![]() |
![]() |
| New domain wizard | Host |
![]() |
![]() |
| Networks and DHCP leases | Command palette |
![]() |
![]() |
| Storage pools and volumes | Snapshot tree |
The presentation and the screenshots come from --demo mode, with
example data.
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-tuiOr from a clone:
git clone https://github.com/SyscallBrain/virsh-tui
cd virsh-tui
cargo build --release
./target/release/virsh-tuiTo 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.
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 |
The user guide covers every view,
the wizard, the command line, configuration, themes, key remapping and
troubleshooting. Its source is in book/.
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.
Issues and pull requests are welcome. Read CONTRIBUTING.md for how to build and test.
MIT © 2026 Tiago Correia














