Knuckle
Knuckle is an interactive TUI installer for Flatcar Container Linux — the CNCF-hosted, immutable, container-optimized OS. It gives you an Ubuntu-style guided install experience without requiring you to write Ignition configs by hand.
Think of it as Bluefin for your home server or bare-metal cluster node.
Knuckle is pre-alpha. All feedback and contributions are welcome at projectbluefin/knuckle.
Why Flatcar?
Flatcar is in the CNCF — a vendor-neutral foundation that means long-term stability. It's designed to run anything: plop anything from linuxserver.io on it, build a home NAS, set up a k8s cluster, or run a personal cloud. The Flatcar Bakery provides system extensions for Docker, Kubernetes, Tailscale, NVIDIA drivers, and more.
Requirements
| Component | Requirement |
|---|---|
| Architecture | x86_64 or ARM64 |
| Boot | UEFI only (no legacy BIOS) |
| Storage | One target disk (single-disk install) |
| Network | DHCP or static IPv4 |
| RAM | 2 GB minimum |
Installing from the ISO (recommended)
-
Download the installer ISO from the knuckle releases page — pick
knuckle-installer-stable.isofor amd64 or the arm64 variant. -
Write to USB using your preferred tool:
# Linux/macOSsudo dd if=knuckle-installer-stable.iso of=/dev/sdX bs=4M status=progressOr use Fedora Media Writer / Balena Etcher.
-
Boot from the USB. Knuckle starts automatically and walks you through a 9-step guided wizard:
- Welcome → Network → Storage → User → System Extensions → Update Strategy → Review → Install → Done
-
Follow the wizard. You'll configure your hostname, timezone, disk, network, SSH keys (fetched from GitHub or entered manually), and any system extensions from the Flatcar Bakery.
-
Review the generated Butane config before confirming — then Knuckle handles the rest.
After install, you'll have a pristine upstream Flatcar Linux system.
Headless / automated installs
For CI/CD or scripted bare-metal provisioning, Knuckle supports a fully unattended install via a JSON config file:
knuckle --headless --config install.json
Minimal install.json:
{
"hostname": "flatcar-01",
"disk": "/dev/disk/by-id/ata-SomeSeagate_1TB",
"channel": "stable",
"network": {"mode": "dhcp"},
"users": [
{
"username": "core",
"ssh_keys": ["ssh-ed25519 AAAA..."]
}
]
}
For the full config schema — static IP, sysexts, Tailscale, swap, NVIDIA drivers, external Ignition URL — see docs/HEADLESS-CONFIG.md in the knuckle repo.
Further reading
- knuckle README — CLI flags, architecture overview, VM testing
- HEADLESS-CONFIG.md — complete headless JSON schema reference
- SECURITY.md — supply-chain verification and release signing
- Flatcar docs — upstream OS documentation
- Flatcar Discord — community chat