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/kvm exists)
  • QEMU/KVM and libvirt (apt install qemu-system-x86 libvirt-daemon-system)
  • genisoimage for 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 symlink

litevirt 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.service

3. Run your first VM

Point the CLI at the node, pull a cloud image, and start a VM from it.

export LV_HOST=root@127.0.0.1
lv image pull <ubuntu-cloud-image-url> --name ubuntu
lv run --name my-vm --image ubuntu --cpu 2 --memory 2048
lv ls

The 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 ls

Once 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 ls

The client talks gRPC over mTLS on port 7443, using the credentials in ~/.config/litevirt/pki.

Ports

PortService
7443gRPC API (mTLS)
7444Prometheus metrics
7445Web UI
7446REST API
7946Cluster membership

Next