Install
Get started
Build the binary, bring up a single node, run a VM, then add hosts. About fifteen minutes on a machine with KVM.
What each host needs
- Linux on x86_64 with KVM (
/dev/kvmexists) - QEMU/KVM and libvirt (
apt install qemu-system-x86 libvirt-daemon-system) genisoimagefor cloud-init ISOs- SSH access from your workstation — the CLI connects through an SSH tunnel
Optional, depending on what you use: haproxy and keepalived for load balancing, nftables for host isolation and SNAT, and IOMMU enabled for PCI passthrough.
1. Build the binary
litevirt is one static Go binary with no CGO and no runtime dependencies. Building needs Go 1.26 or newer.
git clone https://github.com/colonelpanik/litevirt.git
cd litevirt
make build # bin/litevirt (~35 MB) and the bin/lv symlinklitevirt daemon runs the server; litevirt <command> — or lv <command> — is the CLI. The same file does both.
2. Start a single node
Run this on the host itself. It generates the cluster PKI, installs libvirt and QEMU if they are missing, writes /etc/litevirt/config.yaml, and sets up the systemd unit.
sudo cp bin/litevirt /usr/local/bin/
sudo ln -sf /usr/local/bin/litevirt /usr/local/bin/lv
sudo litevirt host init --local --name node-1
sudo systemctl enable --now litevirt.service3. Run your first VM
Point the CLI at the node, pull a cloud image, and start a VM from it.
export LV_HOST=[email protected]
lv image pull <ubuntu-cloud-image-url> --name ubuntu
lv run --name my-vm --image ubuntu --cpu 2 --memory 2048
lv lsThe web UI is on port 7445 of any node. Every node serves it, because every node holds the full cluster state.
4. Add hosts
Copy the binary to a new machine and initialize it from your workstation. It joins the cluster and starts replicating state on its own.
scp bin/litevirt root@<new-host>:/usr/local/bin/
lv host init root@<new-host> --name node-2
lv host lsOnce a VM’s disk is on shared storage — or you use storage migration — lv migrate <vm> <host> moves it live between nodes.
Drive a cluster from a Mac
The daemon needs Linux and KVM, but the CLI and UI client runs anywhere. macOS builds ship with every release and through Homebrew:
brew install colonelpanik/litevirt/litevirt
export LV_HOST=<host>
lv host lsThe client talks gRPC over mTLS on port 7443, using the credentials in ~/.config/litevirt/pki.
Ports
| Port | Service |
|---|---|
| 7443 | gRPC API (mTLS) |
| 7444 | Prometheus metrics |
| 7445 | Web UI |
| 7446 | REST API |
| 7946 | Cluster membership |
Next
- Full installation guide — remote bootstrap, witness hosts, and upgrades.
- Compose stacks — describe a multi-VM service in one YAML file.
- Demos — see the CLI and web UI in action.