π Flint β KVM Management, Reimagined
A single <11MB binary with a modern Web UI, CLI, and API for KVM.
No XML. No bloat. Just VMs.

Flint is a modern, self-contained KVM management tool built for developers, sysadmins, and home labs who want zero bloat and maximum efficiency. It was built in a few hours out of a sudden urge for something better.
π Prerequisites
System Requirements:
- Linux host (Debian, Ubuntu, Fedora, RHEL, Arch, etc.)
- libvirt >= 6.10.0 (check with
libvirtd --version)
- QEMU/KVM virtualization support
Required Packages:
Debian/Ubuntu
sudo apt update
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-daemon libvirt-clients bridge-utils
sudo systemctl enable --now libvirtd
RHEL/Fedora/CentOS
sudo dnf install -y qemu-kvm libvirt libvirt-client virt-install
sudo systemctl enable --now libvirtd
Arch Linux
sudo pacman -S qemu-full libvirt virt-install virt-manager
sudo systemctl enable --now libvirtd
Note: If you encounter libvirt-lxc.so.0: cannot open shared object file, install the LXC library:
# Debian/Ubuntu
sudo apt install -y libvirt-daemon-driver-lxc
# RHEL/Fedora
sudo dnf install -y libvirt-daemon-lxc
# Arch
sudo pacman -S libvirt-lxc
Platform Compatibility:
Flint is built with CGO (libvirt-go bindings) and requires glibc. Alpine Linux and musl-based systems are not directly supported.
Running Flint on Alpine Linux
Since Flint requires glibc and Alpine uses musl, you have two options:
Option 1: Use gcompat (glibc compatibility layer)
# Install gcompat on Alpine
apk add gcompat libstdc++
# Download and run Flint
curl -LO https://github.com/volantvm/flint/releases/latest/download/flint-linux-amd64
chmod +x flint-linux-amd64
./flint-linux-amd64 serve
Option 2: Run in a glibc-based container (recommended)
# Use Debian/Ubuntu container on Alpine host
docker run -d \
--name flint \
--privileged \
-v /var/run/libvirt:/var/run/libvirt \
-p 5550:5550 \
debian:bookworm-slim \
bash -c "apt update && apt install -y libvirt-clients && ./flint serve"
Why no native musl support?
- Flint uses CGO extensively through libvirt-go bindings
- Static linking with libvirt is extremely complex due to numerous dependencies
- Cross-compiling CGO code for musl requires a complete musl toolchain
- The maintenance burden for musl support would be significant
For production use on Alpine, we recommend running Flint in a glibc-based container or using a glibc-based Linux distribution.
π One-Liner Install
curl -fsSL https://raw.githubusercontent.com/volantvm/flint/main/install.sh | bash
Auto-detects OS/arch, installs to /usr/local/bin, and prompts for web UI passphrase setup.
π Security & Authentication
Flint implements a multi-layered security approach:
Web UI Security:
- Passphrase Authentication: Web interface requires a passphrase login
- Session-Based: Secure HTTP-only cookies with 1-hour expiry
- No API Key Exposure: Web UI never exposes API keys to browsers
API Security:
- Bearer Token Authentication: CLI and external tools use API keys
- Protected Endpoints: All API endpoints require authentication
- Flexible Access: Support for both session cookies and API keys
Authentication Flow:
# First run - set passphrase
flint serve
# π No web UI passphrase set. Let's set one up for security.
# Enter passphrase: ********
# Web UI access
# Visit http://your-server:5550 β Enter passphrase β Full access
# CLI access (uses API key)
flint vm list --all
# External API access
curl -H "Authorization: Bearer YOUR_API_KEY" http://localhost:5550/api/vms
β¨ Core Philosophy
- π₯οΈ Modern UI β A beautiful, responsive Next.js + Tailwind interface, fully embedded.
- β‘ Single Binary β No containers, no XML hell. A sub-8MB binary is all you need.
- π οΈ Powerful CLI & API β Automate everything. If you can do it in the UI, you can do it from the command line or API.
- π¦ Frictionless Provisioning β Native Cloud-Init support and a simple, snapshot-based template system.
- π Secure by Default β Multi-layered authentication with passphrase protection.
- πͺ Non-Intrusive β Flint is a tool that serves you. It's not a platform that locks you in.
ποΈ Quickstart
1. Start the Server
# Interactive setup (recommended for first run)
flint serve --set-passphrase
# Or set passphrase directly
flint serve --passphrase "your-secure-password"
# Or use environment variable
export FLINT_PASSPHRASE="your-secure-password"
flint serve
On first run, you'll be prompted to set a web UI passphrase for security.
- Web UI:
http://localhost:5550 (requires passphrase login)
- API:
http://localhost:5550/api (requires authentication)
2. Web UI Access
- Visit
http://localhost:5550
- Enter your passphrase to access the management interface
- All API calls are automatically authenticated via session
3. CLI Usage
# VM Management
flint vm list # List all VMs
flint vm launch my-server # Create and start a VM
flint vm ssh my-server # SSH into a VM
# Cloud Images
flint image list # Browse cloud images
flint image download ubuntu-24.04 # Download an image
# Networks & Storage
flint network list # List networks
flint storage volume list default # List storage volumes
4. API Access (for external tools)
# Get your API key (requires authentication)
curl -H "Authorization: Bearer YOUR_API_KEY" http://localhost:5550/api/vms
π Full Documentation
Complete CLI commands, API reference, and advanced usage:
β‘οΈ docs.md - Complete CLI & API Documentation
π§ Tech Stack
- Backend: Go 1.25+
- Web UI: Next.js + Tailwind + Bun
- KVM Integration: libvirt-go
- Binary Size: ~11MB (stripped)
π Flint is young, fast-moving, and designed for builders.
Try it. Break it. Star it. Contribute.