MCPcopy Index your code
hub / github.com/0xchasercat/flint

github.com/0xchasercat/flint @v1.28.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.28.0 ↗ · + Follow
949 symbols 2,225 edges 146 files 224 documented · 24% updated 2mo agov1.28.0 · 2025-11-07★ 1,67211 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

🌀 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) 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.

Extension points exported contracts — how you extend this code

Core symbols most depended-on inside this repo

Shape

Function 556
Method 252
Interface 76
Struct 60
Class 4
TypeAlias 1

Languages

TypeScript59%
Go41%

Modules by API surface

server/handlers.go64 symbols
pkg/libvirtclient/client.go63 symbols
cmd/serve.go49 symbols
web/lib/api.ts29 symbols
server/server.go28 symbols
pkg/logger/logger.go28 symbols
pkg/libvirtclient/vm.go28 symbols
pkg/core/types.go27 symbols
web/components/ui/sidebar.tsx25 symbols
web/components/ui/menubar.tsx16 symbols
web/components/ui/dropdown-menu.tsx15 symbols
web/components/ui/context-menu.tsx15 symbols

For agents

$ claude mcp add flint \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page