Offline VM intelligence. Migration assurance you can prove.
Score boot readiness before power-on · repair disks offline · certify cutover with a Passport
Product · Demos · Suite path · Quick start · h2kvm · FluxVM · Wiki · Open source vs Enterprise · 30-day Enterprise trial · Book a demo
Every hypervisor exit fails the same way: you discover the disk was broken at 2am, in the cutover window, after power-on.
GuestKit reads the disk while the guest is off, scores first-boot probability 0–100, and emits a reviewable fix plan — no appliance daemon, no “just try it and hope.”
disk.qcow2 / .vmdk / .vhdx / .vhd / .vdi / .raw
│
▼
┌──────────────────────┐
│ Pure-Rust engine │──► doctor 0–100 + blockers
│ NBD / loop mount │──► migrate-plan YAML
└──────────────────────┘──► Passport · repair · CI gate
│ guestkit-qemu (assured launch)
CLI · TUI · QEMU · Python · Web · Agent · GitHub Action
| 70+ commands | 6 disk formats |
| **0 appliance daemons | 8 migration targets |
| Apache-2.0 | Used in CI, labs, and hypervisor-exit programs |
Certify with GuestKit → run & manage with FluxVM → convert & deploy with h2kvm → operate on Zeus OS.
| You need… | Use |
|---|---|
| Score / repair a disk before power-on | This repo (GuestKit) |
| Boot the qcow2, give it a network, SSH, TTL, pause/resume | FluxVM |
| Hypervisor → KVM convert + import | h2kvm |
GuestKit does not own production networking (TAP/bridge/netns/DHCP) or disposable fleet lifecycle. That is FluxVM. Keep GuestKit focused on offline intelligence.
# ── 1. Certify & repair (GuestKit) ─────────────────────────────
guestkit doctor disk.qcow2 --target kvm --explain
guestkit plan generate disk.qcow2 -p virtio-initramfs -o virtio.yaml
guestkit plan apply virtio.yaml --vm disk.qcow2 --yes # as needed
guestkit gate --image disk.qcow2 --fail-below 80 # CI / cutover gate
guestkit passport emit disk.qcow2 --target kvm -o passport.json
# ── 2. Run & manage (FluxVM) ─────────────────────────────────
# Point FluxVM at the same (or repaired) qcow2 — see FluxVM README.
# Overlay keeps the base disk untouched; pick a network mode:
#
# user — lab SSH via hostfwd (simplest)
# tap — join existing bridge (LAN DHCP)
# tap+netns— known guest IP + NAT (isolated)
#
# fluxvm create --spec my-vm.json
# fluxvm get <id> # status + guest_ip when netns
# fluxvm exec <id> -- uptime
# fluxvm delete <id>Docs: VM lifecycle / suite split · FluxVM · Passport handoff
| Old habit | Replacement |
|---|---|
virsh define / start / destroy (host-local QEMU) |
FluxVM create / get / delete |
| libvirt NAT / bridge DHCP / guest IP | FluxVM user / tap+bridge / tap+netns (guest_ip) |
virsh qemu-agent-command |
guestkit qga (or fluxvm exec with vsock agent) |
“Will it boot?” by virsh start |
guestkit doctor / passport / gate before FluxVM create |
| KubeVirt / OpenShift domains | virtctl / Machina (unchanged) |
Full map: virsh-to-guestkit.md.
▶ CLI & TUI Offline VM intelligence, explained |
▶ Web Dashboard — Overview Server Image Vault, live KubeVirt cluster |
▶ Web Dashboard — Deep Dive Sources, live cluster, one-click intelligence |
▶ Machina × GuestKit Live Linux guest agent — health, TRIM, netplan, services |
Recorded live against real deployments — no staged screenshots.
| Before GuestKit | With GuestKit |
|---|---|
| “Will it boot?” answered at power-on | Offline doctor score + root-cause chain |
| guestkit scripts and tribal knowledge | Structured plans, JSON/YAML, CI gates |
| Surprises on cutover weekend | Hypervisor-aware migrate-plan + day-0 packs |
| No audit trail MTV / virt-v2v can skip | Signed Cutover Passport |
| Fleet drift invisible until outage | fleet analyze / watch, forensic diff, policy-as-code |
| Migration order guessed by hand | fleet wave-plan — dependency-aware waves |
| Deep inspect needs a running guest | Carbon TUI + in-guest agent over QGA |
| Assured first boot still means hand-built QEMU argv | guestkit-qemu plans/runs from the same evidence gate |
Live guest ops still mean virsh qemu-agent-command |
guestkit qga / agent-call speak the QGA socket directly |
cargo install guestkit # guestkit + guestctl + guestkit-qemu
guestkit doctor vm.qcow2 --target proxmox --explain
guestkit migrate-plan vm.vmdk --target kvm --export plan.yaml
guestkit passport emit vm.qcow2 --target kvm -o passport.json
guestctl tui vm.qcow2 # Assurance · preview · export
guestkit-qemu plan vm.qcow2 --json # assurance → QEMU definition
# Shrink an oversized-but-mostly-empty disk to its real footprint before import
guestkit shrink disk.qcow2 --dry-run # report only
guestkit shrink disk.qcow2 --min-ratio 3 --headroom-pct 20CI gate — same score, no CLI install step:
- uses: zyvorai/guestkit@v1
with:
disk: vm.qcow2
target: kvm
fail-below: '80'Targets: kvm · proxmox · qemu · kubevirt · aws · azure · gcp · hyperv
Host needs: Linux with qemu-img, losetup, and qemu-nbd (mount/repair may need root).
Same assurance engine as the CLI — on PyPI and used by h2kvm offline fixer:
pip install "hypersdk-guestkit>=1.1.0"import guestkit
guestkit.run_doctor("vm.qcow2", target="kvm", explain=True)
guestkit.run_migrate_repair("vm.qcow2", target="kvm", apply=False) # dry-run
guestkit.run_migrate_repair("vm.qcow2", target="kvm", apply=True) # apply fixesSee python-bindings.md and examples/python/assurance_doctor.py.
| You want… | Go here |
|---|---|
| First hour | Getting started |
| Python assurance APIs | python-bindings.md |
| Assured QEMU launch | qemu-runtime.md |
| h2kvm pipeline | hyper2kvm-integration.md |
| Remote SSH deploy | DEPLOY-REMOTE.md |
| Cheat sheet | Quick reference |
| Full feature map | User feature guide |
| Open source vs Enterprise | ce-vs-enterprise.md |
GuestKit provides offline disk intelligence; h2kvm provides hypervisor-to-KVM conversion and deploy.
guestkit doctor / migrate-plan ← pre-flight score + fix plan
│
▼
h2kvmctl local --backend guestkit ← convert + run_migrate_repair
│
▼
libvirt · KubeVirt · OpenStack
# GuestKit from PyPI; h2kvm from GitHub Release
pip install "hypersdk-guestkit>=1.1.0"
pip install https://github.com/zyvorai/h2kvm/releases/download/v1.1.0/h2kvm-1.1.0-py3-none-any.whl
# Pre-flight
guestkit doctor source.vmdk --target kvm --explain
# Convert + offline repair
h2kvmctl local --vmdk source.vmdk --to-output out.qcow2 --backend guestkitDeploy both to a lab host:
GUESTKIT_ZYVOR_ACCEPT=1 ./scripts/deploy-remote.sh HOST user --quick --key # GuestKit CLI
cd /path/to/h2kvm && ./scripts/deploy-remote.sh HOST user --keep-sources # h2kvmFull guide: hyper2kvm-integration.md · h2kvm README
guestkit doctor vm.qcow2 --target proxmox --explain
guestkit migrate-plan vm.vmdk --target proxmox --export plan.yaml
guestkit passport emit vm.qcow2 --target kvm -o passport.json
guestkit passport verify passport.json --fail-below 80
guestkit-qemu run vm.qcow2 --min-boot-score 80 --qmp-socket /run/guestkit/vm.qmpguestkit plan generate disk.qcow2 -p linux-ssh --user ubuntu --key-file ~/.ssh/id_ed25519.pub
guestkit rescue disk.qcow2 -o enable-ssh
guestkit rescue disk.qcow2 -o fix-grub --force
guestkit rescue win.qcow2 -o reset-password --user Administrator --password '…'
guestkit plan apply plan.yaml --vm disk.qcow2 --yes # backups + rollbackguestkit vm define demo disk.qcow2 --memory-mb 4096 --vcpus 2
guestkit vm start demo && guestkit vm status demo
guestkit img check disk.qcow2 --repair
guestkit domain-disks /etc/libvirt/qemu/web01.xml
guestkit firstboot win.qcow2 --hostname web01 --run 'echo hi'
guestkit gate --image disk.qcow2 --fail-below 80 --rego policies/cutover.rego
guestkit sbom-diff before.spdx.json after.spdx.json --fail-on-drift
virtctl-guestkit guestfs -n ns pvcguestkit vm— local QEMU lifecycle (define/start/pause/resume/destroy) for a lab or single box; production run/network/TTL is FluxVM's job — features/vm-runtime.mdguestkit img/domain-disks/firstboot— qemu-img wrapper, libvirt/YAML domain disk parsing, virtio-win plan, first-boot gate — user-guides/img-firstboot.md- Cutover bundle —
gate+ SELinux/sysprep/BitLocker prep + cloud cutover profiles/Rego policy checks — user-guides/cutover-bundle.md, user-guides/cutover-prep.md - Passport handoff / fleet quarantine — hand a passport to an h2kvmctl job, quarantine a fleet — user-guides/handoff-quarantine.md
- Rescue dry-run Action +
sbom-diff— forensic-diff SBOM attach, CI extras — devops/10-rescue-sbom-ci.md virtctl-guestkit guestfs— drop-in forvirtctl guestfson a PVC, backed by GuestKit not libguestfs — features/virtctl-guestkit.md
- In-guest agent (Linux + Windows) over virtio-serial / QGA — inject offline, then
agent-proxy/agent-call guestkit qga— drop-in forvirsh qemu-agent-command(direct unix socket; no virsh by default) — virsh-to-guestkit.md- Optional AI (
--features ai) — read-only tool-calling over the offline evidence snapshot; MCP server via--features mcp - KubeVirt boot-inspect hooks and Guest Control Fabric
- Web console + worker on GHCR · Helm under
deploy/helm/zyvor - Python:
pip install hypersdk-guestkit→import guestkit+run_doctor/run_migrate_repair(v1.1.0+)
Public images under ghcr.io/zyvorai — no docker login required.
| Image | Role |
|---|---|
ghcr.io/zyvorai/zyvor-ui |
Web console — Image Vault, KubeVirt cluster |
ghcr.io/zyvorai/zyvor-api |
API |
ghcr.io/zyvorai/guestkit-worker |
Disk-inspection worker |
docker compose -f deploy/docker-compose.ghcr.yml pull
docker compose -f deploy/docker-compose.ghcr.yml up -d
open http://localhost:8088Eval only — unauthenticated stack. Do not expose beyond localhost.
Production:deploy/docker-compose.prod.example.yml· Docker guide · Helm
|
This repo · personal, lab, and commercial production
|
|
One failed first-boot weekend costs more than the license.
Enterprise turns offline scores into shared, gated decisions your board can fund.
Try the control plane before you buy — same packaging pattern as Veyron:
- Download the trial asset from GitHub Releases (
guestkit-enterprise-*-trial-linux-amd64.tar.gz) - Verify the
.sha256, extract, run./install.sh - Keep bundled
trial.tokennext to the install — after 30 days email sales@zyvor.dev
Full feature matrix (every screen) → · What Zyvor sells → · Book a demo · Pricing · sales@zyvor.dev
┌────────────────────────────────────────────────────────────┐
│ guestkit CLI · guestctl TUI · guestkit-qemu · Python · Web │
├────────────────────────────────────────────────────────────┤
│ Rust evidence · boot scoring · fix-plan · QEMU/VirtIO plan │
├────────────────────────────────────────────────────────────┤
│ JSON · YAML · HTML · PDF · Passport · CI exit codes │
└────────────────────────────────────────────────────────────┘
| Layer | In this repo |
|---|---|
| Engine | Pure-Rust parsers + evidence schema · NBD/loop (src/, crates/) |
| CLI / TUI | guestkit · guestctl — doctor, passport, fleet, rescue |
| QEMU runtime | guestkit-qemu — assured plan/run + QMP (qemu-runtime.md) |
| Agent / QGA | Linux + Windows · agent-inject / agent-proxy / guestkit qga (virsh-to-guestkit.md) |
| Python | hypersdk-guestkit — run_doctor, run_migrate_repair (v1.1.0+) |
| h2kvm | hyper2kvm-integration.md — convert/deploy partner |
| FluxVM | zyvorai/fluxvm — run/manage certified qcow2s (network, TTL) |
| K8s | KubeVirt hooks · k8s/ |
| Web / worker | GHCR images · deploy/ |
| Goal | Document |
|---|---|
| Operator wiki | zyvorai/guestkit/wiki |
| Docs home | docs/README.md · INDEX |
| DevOps runbooks | docs/devops |
| Feature guide | guestkit-user-feature-guide.md |
| Docker / GHCR | DOCKER.md |
| Remote deploy | DEPLOY-REMOTE.md |
| h2kvm integration | hyper2kvm-integration.md |
| QEMU / VirtIO runtime | qemu-runtime.md |
| Dump virsh → GuestKit | virsh-to-guestkit.md |
| Architecture | overview |
| Changelog / roadmap | CHANGELOG · roadmap |
→ zyvor.dev/guestkit · docs · blog
cargo build --release
cargo testSee CONTRIBUTING and CI under .github/workflows/. docs/ and this README are authoritative.
This repository is licensed under the Apache License, Version 2.0.
You may use, modify, and run it for personal, lab, and commercial production
use at no charge, subject to Apache-2.0 (preserve notices / NOTICE where required).
See NOTICE and docs/legal/ where applicable.
Production support, SLAs, and Zyvor Enterprise products are licensed separately. Contact sales@zyvor.dev or see zyvor.dev.