flint is a free, open source orchestration & scheduling project written in TypeScript and released under Apache-2.0. It has 1,709 GitHub stars, 106 forks and 16 open issues, and was last pushed 2 months ago. On this registry it ranks #73 of 130 tracked projects in Orchestration & Scheduling, with 5 head-to-head comparisons available.

What is flint?

Flint is a lightweight, self-contained management tool for Linux virtual machines running on KVM and libvirt, built for developers, sysadmins, and home lab operators who want a web UI, a CLI, and an API without editing XML by hand.

What it is

Flint lives in the KVM and libvirt ecosystem. It presents itself as a single binary under 11MB that bundles three interfaces for the same virtualization host: a modern web UI built with Next.js and Tailwind, a command-line client, and an HTTP API. The binary is compiled with CGO against the libvirt bindings and is published in both glibc and musl builds, which means it runs on Debian, Ubuntu, Fedora, RHEL, Arch, and Alpine Linux hosts. The project is licensed under Apache-2.0 and is tracked in this registry under Infrastructure & Operations / Orchestration & Scheduling with the topics cloud, cloud-init, devops, hypervisor, kvm, libvirt, orchestration, qemu, and serial.

The concrete problem it solves is the configuration layer of libvirt. Managing KVM guests through libvirt normally means writing and maintaining domain XML, so the project's stated pitch is "No XML. No bloat. Just VMs." Flint replaces that hand-edited XML workflow with a served interface and a set of commands, and it does so without a daemon fleet or an external control plane: one binary talks to the host's libvirt daemon and exposes the result over port 5550.

Key capabilities

  • Single binary under 11MB exposing a web UI, a CLI, and an HTTP API for the same set of KVM operations.
  • Server mode started with flint serve, which on first run prompts for a web UI passphrase before serving on port 5550.
  • Command-line guest management such as flint vm list --all.
  • Passphrase authentication for the web interface, backed by HTTP-only session cookies with a one-hour expiry, so API keys are never exposed to the browser.
  • Bearer token authentication for programmatic access, for example curl -H "Authorization: Bearer YOUR_API_KEY" http://localhost:5550/api/vms.
  • Prebuilt glibc binaries (flint-linux-amd64, flint-linux-arm64) and musl binaries (flint-linux-amd64-musl, flint-linux-arm64-musl) for native Alpine support.
  • cloud-init listed among the project's topics, placing guest initialization alongside the KVM and libvirt core.

Who uses it and how

  • Developers and sysadmins running KVM on a single Linux host who want a browser interface rather than XML files.
  • Home lab operators on Debian, Ubuntu, Fedora, RHEL, CentOS, or Arch who already run libvirt and QEMU/KVM and install Flint as a thin layer on top.
  • Alpine Linux operators running the native musl binary with apk add libvirt-daemon libvirt-qemu qemu-system-x86_64, avoiding the gcompat compatibility path.
  • Teams wiring Flint into external tooling through the API, authenticating with bearer tokens while humans use the passphrase-protected web UI.
  • Anyone hitting the libvirt-lxc.so.0: cannot open shared object file error, who resolves it by installing the LXC driver package for their distribution.

Getting started

The documented one-liner is curl -fsSL https://raw.githubusercontent.com/volantvm/flint/main/install.sh | bash, which auto-detects the OS and architecture, installs to /usr/local/bin, and prompts for web UI passphrase setup. Alternatively, download the glibc or musl release archive for the architecture, mark it executable, and run ./flint serve.

How it compares

This registry entry lists no paid products that Flint replaces, so the comparison is left to tools named in the facts. virt-manager appears only as a prerequisite package in the Arch Linux install instructions, not as a stated alternative, and no other competing project is named. On the evidence provided, Flint stands alone in this registry.

When to use it — and when not to

A self-hoster must already operate a Linux host with libvirt 6.10.0 or newer, QEMU/KVM virtualization support, and the libvirt daemon running, because Flint does not supply the hypervisor underneath it. The largest caveat is maintenance: the README states plainly that the repository is no longer actively maintained and has been succeeded by https://github.com/0xchasercat/firestone, so new deployments should weigh that before standardizing on it. It remains a reasonable fit for an existing, working home lab where the single-binary model and the absence of XML editing are the point.

project readme (upstream, from github) — read inline

Sponsored by heretic bot mitigation and anti-fraud
Sponsored by Heretic


Note: this repository is no longer actively maintained and has been succeeded by https://github.com/0xchasercat/firestone

🌀 Flint — KVM Management, Reimagined

Flint Logo

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

Latest Release License Build Status


Flint Dashboard Flint Library

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). We provide binaries for both glibc and musl (Alpine Linux):

  • glibc binaries: flint-linux-amd64, flint-linux-arm64 (for Debian, Ubuntu, Fedora, RHEL, Arch, etc.)
  • musl binaries: flint-linux-amd64-musl, flint-linux-arm64-musl (for Alpine Linux)
Running Flint on Alpine Linux

Native musl support is now available! Download the musl-specific binary for your architecture:

# For Alpine Linux (amd64)
wget https://github.com/volantvm/flint/releases/latest/download/flint-linux-amd64-musl.zip
unzip flint-linux-amd64-musl.zip
chmod +x flint
./flint serve

# For Alpine Linux (arm64)
wget https://github.com/volantvm/flint/releases/latest/download/flint-linux-arm64-musl.zip
unzip flint-linux-arm64-musl.zip
chmod +x flint
./flint serve

Prerequisites for Alpine:

# Install required Alpine packages
apk add libvirt-daemon libvirt-qemu qemu-system-x86_64
rc-update add libvirtd
rc-service libvirtd start

Alternative: Use gcompat compatibility layer

If you prefer to use the standard glibc binary on Alpine:

apk add gcompat libstdc++
wget https://github.com/volantvm/flint/releases/latest/download/flint-linux-amd64.zip
unzip flint-linux-amd64.zip
chmod +x flint
./flint serve

🚀 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.
  • 🌐 Remote Management — Connect to remote KVM/libvirt servers via SSH from a single Flint instance.

🏎️ 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

🌐 Remote Server Management via SSH

Flint can connect to remote KVM/libvirt servers via SSH, allowing you to manage distributed virtualization infrastructure from a single instance.

Setup Requirements:

  1. SSH key-based authentication configured between Flint host and remote server
  2. Remote server must have libvirt >= 6.10.0 installed
  3. User on remote server must have permissions to access libvirt

Configuration Methods:

Option 1: Web UI (Recommended)

  1. Navigate to Settings in the Flint web interface
  2. Enable "SSH Connection" toggle
  3. Fill in SSH connection details:
    • Username (e.g., root or user with libvirt permissions)
    • Host (IP address or hostname)
    • Port (default: 22)
    • SSH Key Path (auto-detected from ~/.ssh/)
  4. Click "Test Connection" to verify
  5. Click "Save Configuration" and restart Flint

Option 2: Configuration File Edit ~/.flint/config.json:

{
  "libvirt": {
    "uri": "qemu:///system",
    "ssh": {
      "enabled": true,
      "username": "root",
      "host": "192.168.1.100",
      "port": 22,
      "key_path": "~/.ssh/id_rsa",
      "known_hosts_path": "~/.ssh/known_hosts"
    }
  }
}

Option 3: Environment Variables

export FLINT_LIBVIRT_SSH_ENABLED=true
export FLINT_LIBVIRT_SSH_USERNAME=root
export FLINT_LIBVIRT_SSH_HOST=192.168.1.100
export FLINT_LIBVIRT_SSH_PORT=22
export FLINT_LIBVIRT_SSH_KEY_PATH=~/.ssh/id_rsa
flint serve

SSH Key Setup:

# On Flint host, generate SSH key if needed
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa

# Copy public key to remote server
ssh-copy-id root@192.168.1.100

# Verify connection
ssh root@192.168.1.100 virsh list --all

Security Notes:

  • SSH keys must have secure permissions (600 or 400)
  • Password authentication is not supported (key-based only)
  • Flint uses the standard libvirt SSH transport (qemu+ssh://)
  • All libvirt operations are encrypted via SSH tunnel

📖 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.


From the team at Chaser  ·  Run it on your own infrastructure →

Frequently asked questions

Is flint free to use?

flint is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does flint do?

Lightweight tool for managing linux virtual machines

What is flint written in?

flint is primarily written in TypeScript. Its source is publicly available at https://github.com/0xchasercat/flint, and it has 1,709 GitHub stars.