Ship apps as single binaries. Not containers.
kern compiles your app into a unikernel — a minimal OS image that boots in milliseconds, uses a fraction of the memory, and exposes a tiny attack surface. No Docker daemon. No kraft. Just QEMU.
$ kern build
Six deterministic steps. One binary out.
kern orchestrates standard, battle-tested tools instead of a proprietary daemon. Every stage is inspectable and reproducible.
- skopeo01
Download kernel
Pulls the Unikraft kernel from the unikraft.org OCI registry. Cached after the first build.
- buildah02
Build rootfs
Assembles the root filesystem with no Docker daemon. Runs rootless and is CI-safe.
- cpio03
Pack initramfs
Bundles the rootfs into an initramfs archive the kernel can mount at boot.
- objcopy04
Generate .uki
Unified Kernel Image — kernel + initramfs + cmdline fused into a single binary.
- ed2551905
Sign image
Every build is signed automatically. No opt-in, no external tooling.
- QEMU KVM06
Run direct
Boots the image straight on QEMU with KVM. No kraft at runtime.
$ kern vs docker
The same app. A different order of magnitude.
| Metric | kern | Docker |
|---|---|---|
| Boot time | 5–12ms | 800ms–2s |
| Image size | 20–110MB | 150–800MB |
| Memory usage | 8–40MB | 50–150MB |
| Attack surface | ~50 syscalls | ~400 syscalls |
| Image signing | ed25519 built in | optional, external |
| SBOM generation | SPDX-2.3 built in | optional, external |
| Daemon required | none | Docker daemon |
| Shared kernel | no — each app isolated | yes — host kernel |
$ kern init
Zero config. kern reads your project.
Drop into any repo and run kern init. The runtime is detected from the files already in your tree.
Node.js 21
Stabledetected from package.json
- memory
- 512Mi
- boot
- ~10ms
Go 1.22
Stabledetected from go.mod
- memory
- 128Mi
- boot
- ~8ms
Rust
Stabledetected from Cargo.toml
- memory
- 128Mi
- boot
- ~8ms
Python 3.12
Stabledetected from requirements.txt
- memory
- 384Mi
- boot
- ~11ms
$ install
Install in one line.
One script pulls the CLI, verifies your host, and gets you to your first booted unikernel in seconds.
Requirements
- Linux
- KVM
- x86_64
$ bash <(curl -fsSL https://raw.githubusercontent.com/Kern-Unikernel/Kern-Unikernel/main/install.sh)$ cd my-app$ kern init$ kern build$ kern run -d$ ci
Build unikernels in CI with one line.
Drop the official GitHub Action into your workflow. It builds, signs, and pushes a unikernel image to your container registry on every commit — rootless, no daemon.
uses: Kern-Unikernel/action@v1with: push: ghcr.io/${{ github.repository }}:${{ github.sha }} registry-user: ${{ github.actor }} registry-token: ${{ secrets.GITHUB_TOKEN }}