GuestKit — Feature Guide
Offline VM intelligence and migration assurance.
GuestKit is a pure-Rust control plane that reads a virtual machine's disk image offline, builds a normalized evidence snapshot, and answers the two questions that decide every migration: will it boot, and what must change before cutover. It ships as a scriptable CLI (guestkit), a carbon-themed TUI (guestctl), an assured QEMU launcher (guestkit-qemu), Python bindings, and a self-hosted web platform with KubeVirt integration - all sharing one engine, with no appliance daemon to install.
70+ CLI subcommands · 6 disk formats read · **0 appliance daemons needed · 8 migration targets scored · 0-100 boot assurance score · 5 inspection profiles
This is the user-facing onboarding guide — how to access the product, your first workflows, and how to use every feature. A print-ready PDF of the same content sits alongside this file.
Contents
- Getting started — access & first workflows
- Offline Disk Inspection
- Migration Assurance
- Fix Plans & Repair
- Security & Threat Analysis
- Inventory & Reporting
- Planning & Optimization
- Interactive Workspaces
- Guest Agent & Live Control
- KubeVirt & Platform
- QEMU / VirtIO runtime
- Deployment & Editions
Getting started
How to access it
- Web: Self-hosted web console at http://localhost:8088 (nginx front-end proxies
/api/to the zyvor-api backend). Start it withdocker compose -f deploy/docker-compose.ghcr.yml up -d. - CLI: Three host binaries:
guestkit(scriptable CLI),guestctl(TUI), andguestkit-qemu(assured QEMU plan/run/QMP). Install from the v1.2.5 GitHub Release. Do not usecargo install guestkit— crates.io is still 0.3.2. Runguestkit --helporguestkit commandsto list subcommands. Launch the TUI withguestctl tui vm.qcow2. - API: REST API served by zyvor-api behind the console's
/api/path (e.g.http://localhost:8088/api/); it enqueues inspect/boot-inspect jobs onto the Redis-backed worker. Live guests are reachable host-side viaguestkit agent-proxy --listen 127.0.0.1:8765(e.g.curl http://127.0.0.1:8765/doctor). Python bindings expose the engine in-process viafrom guestkit import Guestfs. - Login: Packaged/web installs seed a default administrator: username
admin, passwordAdmin@321(also the default API key where applicable). Change the password, API key andJWT_SECRETimmediately after first login and enable SSO/SAML from Settings before any network exposure. - Needs: A Linux host with qemu-img, losetup and qemu-nbd installed; mount and in-cluster boot-inspect need root or a privileged pod.
guestkit-qemu runalso needs a QEMU system binary onPATH.
Your first workflows
- Pre-flight environment check
- Install the tools from the v1.2.5 GitHub Release (
guestkit,guestctl, andguestkit-qemu). - Verify host tooling is present:
guestkit doctor --helpand confirm qemu-img/losetup/qemu-nbd are installed. - Confirm the disk opens and its format is detected:
guestkit detect vm.qcow2.
- Install the tools from the v1.2.5 GitHub Release (
- Assurance-first migration (recommended)
- Score boot readiness with root-cause:
guestkit doctor vm.vmdk --target proxmox --explain. - Generate the hypervisor-aware checklist:
guestkit migrate-plan vm.vmdk --target proxmox -o json > migration-plan.json. - Capture Windows-specific signals if needed:
guestkit inspect vm.vmdk --profile windows-migration -o json. - Fix boot blockers offline and re-score:
guestkit repair vm.vmdk --fix boot --dry-run, thenguestkit repair vm.vmdk --fix boot, thenguestkit doctor vm.vmdk --target proxmox.
- Score boot readiness with root-cause:
- Convert and cut over to KVM
- Transcode the disk if required:
guestkit convert vm.vmdk --output vm.qcow2 --format qcow2 --compress. - Inspect the converted image:
guestkit inspect vm.qcow2 --profile migration -o json > vm-inventory.json. - Export a reviewable fix plan:
guestkit migrate-plan vm.qcow2 --target kvm --export plan.yaml. - Apply with backups and re-verify:
guestkit plan apply plan.yaml(roll back withguestkit plan rollbackif needed).
- Transcode the disk if required:
- Gate a golden-image pipeline
- Run doctor in JSON with a threshold:
guestkit doctor img.qcow2 --target proxmox -o json --fail-below 80. - Enforce sign-off rules as code:
guestkit policy check img.qcow2(DSL over evidence fields or a CIS benchmark). - Fail the CI job on any non-zero exit so regressed images never ship.
- Run doctor in JSON with a threshold:
- Interactive investigation in the TUI
- Open the dashboard:
guestctl tui vm.qcow2. - Jump to Assurance with
a, then run doctord, cycle targett, preview the fix planp, export YAMLe. - Spelunk files with
guestkit explore vm.qcow2, or compare two VMs viaguestctl tui vm.qcow2 --compare other.qcow2.
- Open the dashboard:
1. Offline Disk Inspection
Read the full guest OS from a cold disk image - no boot, no agent, no appliance.
- One-command inspect — guestkit inspect surfaces OS, distro, version, hostname, architecture, and init system from any supported disk image in a single pass. — Know exactly what a VM is before you touch it.
- How: CLI:
guestkit inspect disk.qcow2(add-o jsonfor automation). In the TUI, the Summary view shows the same fields.
- How: CLI:
- Six disk formats, auto-detected — Reads QCOW2, VMDK, VHD, VHDX, VDI, and RAW/IMG images, choosing loop devices or qemu-nbd automatically. — Point it at whatever your hypervisor exported - it just opens.
- How: CLI:
guestkit detect disk.imgconfirms the format; any command (inspect,doctor,explore) opens QCOW2/VMDK/VHD/VHDX/VDI/RAW directly. Add--traceto see the loop vs qemu-nbd path chosen.
- How: CLI:
- Guest OS detection — Fingerprints Linux distributions (Fedora, Ubuntu, Debian, RHEL, CentOS, SUSE and more) plus Windows from on-disk signals. — Accurate identity without a running kernel.
- How: CLI:
guestkit inspect disk.qcow2reports OS, distro, version and init system; the same identity shows in the TUI Summary view and Python viaGuestfs.inspect_os().
- How: CLI:
- Deep system enumeration — Extracts packages, kernels, users, SSH config, services, timers, network, DNS, LVM, fstab, runtimes, containers, certificates, and cloud-init state. — A complete inventory of the machine from bytes on disk.
- How: CLI: run focused subcommands like
guestkit packages|services|users|network disk.qcow2, or the fullguestkit inspect disk.qcow2for everything in one pass.
- How: CLI: run focused subcommands like
- Windows signal parsing — Reads SAM/SECURITY registry hives to detect BitLocker, domain join, RDP, and driver gaps for Windows guests. Detects System Reserved / ESP boot volumes on multi-partition disks so BCD is not falsely reported missing. Samples hotfixes (HotFix key,
$NtUninstall*, CBS.log) and VirtIO.syspresence for cutover planning. Offline OEM/Volume activation markers, remnant/ghost NICs, and static Tcpip configs feed migration warnings. Offline BitLockerBootStatus/ FVE artifacts and VSS service inference feed Passport hard-blocks and snapshot readiness. — See the Windows-specific blockers Linux tools miss.- How: CLI:
guestkit inspect disk.vmdk --profile windows-migrationparses SAM/SECURITY hives for BitLocker, domain join, RDP and driver gaps.
- How: CLI:
- Pure-Rust engine, no legacy appliance tooling — Partition tables, filesystem signatures, and evidence schema are parsed in Rust; only host NBD/loop is used for mount. — No guestkit appliance, no fragile daemon - fewer moving parts.
- How: Automatic on every command; add
--trace(e.g.guestkit inspect disk.qcow2 --trace) to see the Rust parsers and the host NBD/loop mount that were used.
- How: Automatic on every command; add
Inspection is always read-only: your source image is never modified.
2. Migration Assurance
Score boot readiness and generate hypervisor-aware fix plans before you cut over.
| Target | Boot analysis | Migration rules applied |
|---|---|---|
| kvm / proxmox / qemu | Proxmox/KVM | VirtIO, virtio-scsi/net, VMware Tools to qemu-ga |
| aws / azure / gcp / cloud | Cloud | cloud-init datasource, BYOL licensing |
| hyperv | Hyper-V | Hyper-V-specific boot checks |
- Boot assurance score — guestkit doctor predicts first-boot success on a target hypervisor with a 0-100 score, ranked blockers, and warnings. — Answer 'will it boot?' before the weekend, not during it.
- How: CLI:
guestkit doctor vm.qcow2 --target proxmox. In the TUI pressdon the Assurance tab;tcycles the target.
- How: CLI:
- Root-cause --explain — An inference engine traces each blocker back through a causal chain so you see why a VM would fail to boot. — Fix the cause, not the symptom.
- How: CLI:
guestkit doctor vm.qcow2 --target proxmox --explainprints the causal chain behind each blocker.
- How: CLI:
- Migration score + checklist — guestkit migrate-plan applies target-specific rules for VirtIO drivers, cloud-init, VMware Tools removal, BitLocker, and SELinux relabel across eight targets. — A tailored cutover checklist per destination platform.
- How: CLI:
guestkit migrate-plan vm.vmdk --target proxmox(add-o jsonto capture the checklist). Targets include kvm, proxmox, qemu, aws, azure, gcp, cloud, hyperv.
- How: CLI:
- CI boot gate — --fail-below sets an exit-code threshold so pipelines block any image that scores under your bar, JSON still emitted. — Golden images that regress never reach production.
- How: CLI:
guestkit doctor img.qcow2 --target proxmox -o json --fail-below 80exits non-zero when the score drops below your bar while still emitting JSON.
- How: CLI:
- Assured QEMU launch —
guestkit-qemuturns the same evidence + boot score into a VirtIO-aware QEMU definition and refuses to start on blockers, low scores, or missing UEFI firmware. — Prove the disk boots under KVM before cutover weekend.- How: CLI:
guestkit-qemu plan vm.qcow2 --jsonthenguestkit-qemu run vm.qcow2 --min-boot-score 80. See qemu-runtime.md.
- How: CLI:
- Cutover Passport — Versioned assurance artifact (scores, blockers, FixPlan digest, BitLocker hard-block, optional live attestation + Ed25519 sign). Transiva exports; h2kvm converts; GuestKit certifies. — The gate MTV/virt-v2v cannot skip.
- How: CLI:
guestkit passport emit vm.qcow2 --target kvm -o passport.jsonthenguestkit passport verify passport.json --fail-below 80. Web dock: Passport.
- How: CLI:
- Windows day-0 pack — Offline hostname, RDP, WinRM, domain→workgroup markers, timezone, DHCP/DNS, and static IP (by interface GUID) plans. — Prep Windows guests without powering them on.
- How: CLI:
guestkit plan generate win.qcow2 -p windows-domain-leave,-p windows-timezone --timezone UTC,-p windows-static-ip --interface-guid … --ip … --mask …,-p windows-dhcp/-p windows-dns.
- How: CLI:
- Policy-as-code — guestkit policy check evaluates an expression DSL over evidence fields (e.g. bootability.score >= 80) or built-in CIS benchmarks. — Codify sign-off criteria your whole team can trust.
- How: CLI:
guestkit policy check vm.qcow2evaluates the evidence DSL (e.g.bootability.score >= 80) or a built-in CIS benchmark.
- How: CLI:
- Forensic diff — guestkit forensic-diff compares two snapshots for config drift, suspicious persistence, and ransomware indicators. — Prove what changed between golden and drifted.
- How: CLI:
guestkit forensic-diff golden.qcow2 drifted.qcow2compares two snapshots for drift, persistence and ransomware indicators.
- How: CLI:
3. Fix Plans & Repair
Turn findings into reviewable, reversible, executable remediation - not blind edits.
- Reviewable fix plans — Findings become a structured plan of operations (file edits, package installs, service ops, SELinux, registry edits, Symlink/FileWrite) that you preview before anything runs. — See every change before it happens.
- How: CLI:
guestkit plan previewshows every operation before it runs. In the TUI Assurance tab presspto preview the generated plan.
- How: CLI:
- Day-0 canned plans — Offline enablement without a full inspect pass:
windows-rdp,windows-hostname(--hostname),windows-winrm,linux-ssh(optional--user+--key/--key-file),linux-hostname,linux-grub. Prefer--skip-backupfor these low-risk registry/file plans.- How:
guestkit plan generate win.qcow2 -p windows-rdp -o rdp.yamlthenguestkit plan apply rdp.yaml --vm win.qcow2 --yes --skip-backup. Linux:guestkit plan generate disk.qcow2 -p linux-ssh --user ubuntu --key-file ~/.ssh/id_ed25519.pub -o ssh.yaml.
- How:
- Rescue shortcuts — Day-0 jobs without a plan file: Linux
enable-ssh,inject-ssh-key,set-hostname,reset-password,fix-fstab,check-grub,fix-grub; Windowsenable-rdp,enable-winrm,set-timezone,set-hostname,reset-password(AES/RC4 SAM NT-hash via SYSKEY, RunOnce fallback).- How:
guestkit rescue disk.qcow2 -o enable-ssh;guestkit rescue disk.qcow2 -o fix-grub;guestkit rescue win.qcow2 -o reset-password --user Administrator --password '…'(needs--features registry-write).
- How:
- Offline PackageInstall — Stage
.rpm/.debfromGUESTKIT_PACKAGE_CACHEfor first-boot install; setGUESTKIT_PACKAGE_FETCH=1to download missing packages on the host first; optionalGUESTKIT_PACKAGE_MIRRORfor HTTP fallback (e.g. macOS).- How:
export GUESTKIT_PACKAGE_CACHE=~/pkgs GUESTKIT_PACKAGE_FETCH=1thenguestkit plan apply plan.yaml --vm disk.qcow2 --yes.
- How:
- Offline service / command ops —
ServiceOperationenable/disable writes systemd wants; start/restart andCommandExecstageguestkit-firstboot-live.servicewhen chroot cannot run them.- How: Preview shows staging notes; apply with
guestkit plan apply plan.yaml --vm disk.qcow2 --yes.
- How: Preview shows staging notes; apply with
- Transactional boot repair — guestkit repair --fix boot converts doctor blockers into a plan, applies it with backups, then re-scores to show the delta. — Fix boot blockers offline and prove the score improved.
- How: CLI:
guestkit repair vm.qcow2 --fix boot --dry-runto preview, thenguestkit repair vm.qcow2 --fix boot; re-runguestkit doctorto see the score delta.
- How: CLI:
- Export to bash & Ansible — Plans export as executable shell scripts, Ansible playbooks, JSON, or YAML for change control and runbooks. — Hand ops a runbook your CAB can approve.
- How: CLI:
guestkit migrate-plan vm.qcow2 --target kvm --export plan.yaml(or export as bash/Ansible/JSON) for change control. TUI Assuranceeexports YAML.
- How: CLI:
- Backup & rollback — guestkit plan apply creates timestamped backups (unless
--skip-backup); plan rollback restores prior state, with dependency ordering and dry-run. — Every change has an undo button.- How: CLI:
guestkit plan apply plan.yamlwrites timestamped backups;guestkit plan rollbackrestores prior state (both support--dry-run).
- How: CLI:
- Automated hardening — guestkit harden generates security-profile fixes for SSH, firewall, SELinux/AppArmor, and account posture. — Ship hardened images without hand-editing configs.
- How: CLI:
guestkit harden vm.qcow2generates SSH, firewall, SELinux/AppArmor and account-posture fixes as a reviewable plan.
- How: CLI:
- Offline agent injection — repair --inject-agent writes a guest agent binary into the disk during migration prep, no boot required. — The VM comes up already instrumented.
- How: CLI:
guestkit repair vm.qcow2 --fix boot --inject-agent --agent-binary ./target/x86_64-unknown-linux-musl/release/guestkit, or add--inject-agenttomigrate-plan --export.
- How: CLI:
Security teams generate plans; ops teams apply them - full separation of duties, in version control.
4. Security & Threat Analysis
Audit posture, hunt for compromise, and prove compliance - all from the offline disk.
- Security profile audit — guestkit inspect --profile security scores SSH exposure, UID-0 users, firewall, SELinux/AppArmor, and kernel into a risk level. — A ranked risk verdict per VM in seconds.
- How: CLI:
guestkit inspect vm.qcow2 --profile securityreturns a ranked risk verdict for SSH, UID-0 users, firewall, SELinux/AppArmor and kernel.
- How: CLI:
- Secret & credential scan — guestkit secrets sweeps the disk for exposed credentials and keys. — Catch leaked secrets before an image ships.
- How: CLI:
guestkit secrets vm.qcow2sweeps the offline disk for exposed credentials and keys.
- How: CLI:
- Malware & rootkit detection — guestkit malware scans for rootkits and known-bad artifacts offline, where in-guest malware can't hide from the scanner. — Inspect a suspect image without executing it.
- How: CLI:
guestkit malware vm.qcow2scans for rootkits and known-bad artifacts without executing the image.
- How: CLI:
- CVE & patch analysis — guestkit patch --check-cves maps installed packages to known vulnerabilities and missing security patches. — See the VM's exposure without a live agent.
- How: CLI:
guestkit patch vm.qcow2 --check-cves(orguestkit inventory vm.qcow2 --include-cves) maps installed packages to known vulnerabilities and missing patches.
- How: CLI:
- Compliance checking — guestkit compliance and audit evaluate images against security standards with detailed reporting. — Turn every VM into an audit artifact.
- How: CLI:
guestkit compliance vm.qcow2(orguestkit audit vm.qcow2) evaluates the image against security standards with a detailed report.
- How: CLI:
- Threat hunting & IOC — guestkit intelligence, hunt, and anomaly correlate indicators, detect anomalies, and surface suspicious persistence offline. — Forensic triage on a dead disk, safely.
- How: CLI:
guestkit intelligence vm.qcow2,guestkit hunt vm.qcow2, andguestkit anomaly vm.qcow2correlate indicators and surface suspicious persistence.
- How: CLI:
- Forensic timeline & reconstruction — guestkit timeline and reconstruct build an incident timeline from multiple on-disk sources and visualize the attack path. — Rebuild what happened without booting the evidence.
- How: CLI:
guestkit timeline vm.qcow2builds an incident timeline andguestkit reconstruct vm.qcow2visualizes the attack path.
- How: CLI:
5. Inventory & Reporting
Produce SBOMs, license reports, and shareable documents from any image.
- SBOM generation — guestkit inventory emits a software bill of materials in SPDX or CycloneDX from the guest package set. — Supply-chain inventory for every VM you run.
- How: CLI:
guestkit inventory vm.qcow2 --format spdx(orcyclonedx) emits a software bill of materials from the guest package set.
- How: CLI:
- License compliance — guestkit license inventories package licenses across the disk for compliance review. — Know your license exposure before an audit asks.
- How: CLI:
guestkit license vm.qcow2inventories package licenses across the disk.
- How: CLI:
- Self-contained HTML reports — --export html builds an interactive, collapsible, print-friendly report with all CSS and JS embedded. — Email a single file to any stakeholder.
- How: CLI: add
--export htmlto any inspect run, e.g.guestkit inspect vm.qcow2 --export htmlfor a single self-contained file.
- How: CLI: add
- Git-friendly Markdown — --export markdown produces version-controllable inventory documents for VM-configuration history. — Track infrastructure drift in your docs repo.
- How: CLI:
guestkit inspect vm.qcow2 --export markdownproduces a version-controllable inventory document.
- How: CLI:
- Machine-readable output — Most commands accept -o json or -o yaml for automation, monitoring, and jq/yq pipelines. — Wire GuestKit straight into your tooling.
- How: CLI: append
-o jsonor-o yamlto most commands (e.g.guestkit inspect vm.qcow2 -o json | jq).
- How: CLI: append
- Fleet posture analysis — guestkit fleet analyze scans a directory of images, clusters identical OS fingerprints, and flags snowflakes and low-score blockers. — See fleet-wide drift at a glance.
- How: CLI:
guestkit fleet analyze ./images/clusters OS fingerprints and flags snowflakes and low-score images across a directory.
- How: CLI:
--output (json/yaml/text) and --export (html/markdown) are mutually exclusive - run twice for both. PDF is produced via external tools (wkhtmltopdf, headless browser).
6. Planning & Optimization
Reverse-engineer infrastructure-as-code, model cloud cost, and map dependencies from a disk.
- Infrastructure-as-code blueprints — guestkit blueprint generates Terraform, Ansible, Kubernetes, or Docker Compose definitions from what it finds on the image. — Recreate a legacy VM as code you can redeploy.
- How: CLI:
guestkit blueprint vm.qcow2 --format terraform(also ansible/kubernetes/compose) regenerates the VM as redeployable code.
- How: CLI:
- Cloud cost analysis — guestkit cost profiles the workload and estimates run cost plus savings opportunities across AWS, Azure, and GCP. — Price the migration before you commit to a cloud.
- How: CLI:
guestkit cost vm.qcow2estimates run cost and savings across AWS, Azure and GCP.
- How: CLI:
- Dependency graph — guestkit dependencies builds a package dependency graph with conflict, circular-dependency, and impact analysis. — Understand blast radius before you change anything.
- How: CLI:
guestkit dependencies vm.qcow2builds the package dependency graph with conflict, circular and impact analysis.
- How: CLI:
- Disk format conversion — guestkit convert transcodes images between the six supported formats using qemu-img. — Reformat once, migrate anywhere.
- How: CLI:
guestkit convert vm.vmdk --output vm.qcow2 --format qcow2 --compresstranscodes between the six supported formats via qemu-img.
- How: CLI:
- Smart recommendations — guestkit recommend and predict surface tuning and remediation guidance grounded in the evidence snapshot. — Actionable next steps, not just raw data.
- How: CLI:
guestkit recommend vm.qcow2(andguestkit predict vm.qcow2) surface tuning and remediation guidance from the evidence snapshot.
- How: CLI:
- Performance profile — --profile performance flags swappiness, I/O scheduler, mount options, and network tuning opportunities. — Baseline and tune before cutover.
- How: CLI:
guestkit inspect vm.qcow2 --profile performanceflags swappiness, I/O scheduler, mount options and network tuning.
- How: CLI:
7. Interactive Workspaces
A carbon TUI, a file explorer, and a shell for hands-on offline investigation.
- Carbon-themed TUI — guestctl tui opens a k9s-style dashboard with grouped views, vim keys, a command palette, and glass/transparency themes. — Explore a VM visually without leaving the terminal.
- How: TUI:
guestctl tui vm.qcow2opens the k9s-style dashboard; navigate with vim keys and the command palette.
- How: TUI:
- Assurance view parity — The TUI Assurance tab runs doctor, cycles targets (kvm/proxmox/aws), previews fix plans, and exports YAML - reusing the CLI engine on one mount. — Full assurance workflow, keyboard-driven.
- How: TUI: in
guestctl tui vm.qcow2pressafor the Assurance tab, thendrun doctor,tcycle target (kvm/proxmox/aws),ppreview fix plan,eexport YAML.
- How: TUI: in
- Interactive file explorer — guestkit explore browses partitions and files in place with view, info, filter, sort, and hidden-file toggles. — Grep-free spelunking through a cold disk.
- How: CLI/TUI:
guestkit explore vm.qcow2browses partitions and files with view, info, filter, sort and hidden-file toggles.
- How: CLI/TUI:
- Guest shell & REPL — guestkit shell and interactive give ls/cat/grep/find over the mounted image plus a scriptable session. — Familiar Unix muscle memory on any VM.
- How: CLI:
guestkit shell vm.qcow2(orguestkit interactive vm.qcow2) gives ls/cat/grep/find over the mounted image plus a scriptable session.
- How: CLI:
- Fleet & compare modes — --fleet browses a directory of images with a sidebar; --compare diffs two VMs side by side in the dashboard. — Spot the odd VM out across a set.
- How: TUI:
guestctl tui vm.qcow2 --fleet ./images/for a fleet sidebar;guestctl tui vm.qcow2 --compare other.qcow2diffs two VMs side by side.
- How: TUI:
- Global search & jump — Cross-view search finds packages, boot blockers, and migration items; a grouped jump menu navigates every view. — Find any signal without knowing which tab holds it.
- How: TUI: inside
guestctl tui, use cross-view search to find packages, boot blockers or migration items, and the grouped jump menu to navigate any view.
- How: TUI: inside
- AI copilot Q&A — guestkit ai answers natural-language questions grounded in the evidence snapshot, with pluggable LLM backends (OpenAI, Anthropic, xAI, or local Ollama). — Ask a VM what's wrong and get an evidence-backed answer.
- How: CLI:
guestkit ai vm.qcow2 "why won't this boot?"answers grounded in the evidence snapshot (build with--features ai; backends: OpenAI, Anthropic, xAI, or local Ollama).
- How: CLI:
8. Guest Agent & Live Control
Run inside the guest - or reach it host-mediated - even when there's no guest network.
- In-guest agent — guestkit agent runs like qemu-guest-agent over virtio-serial, reusing the same evidence and fix-plan schema as offline mode. — One model for cold-disk and live guests.
- How: Run
guestkit agentinside the booted guest; it serves the same evidence and fix-plan schema over the virtio-serial channelcom.zyvor.guestkit.0.
- How: Run
guestkit qga(dump virsh) — Speaks the QGA unix socket directly; drop-in forvirsh qemu-agent-command. zyvor-api uses the same ladder and only falls back to virsh whenGUESTKIT_ALLOW_VIRSH=1. — Live guest ops without libvirt-client in the path.- How: CLI:
guestkit qga --execute guest-ping(auto-discovers the socket) or pin--socket …. Map: virsh-to-guestkit.md.
- How: CLI:
- Transport ladder — The Guest Control Fabric auto-selects the best path per VM - virtio-serial, QGA exec, QGA builtin, push cache, offline disk, or console. — Guest control that never depends on guest networking.
- How: Host bridge:
guestkit agent-proxy --socket /var/lib/libvirt/qemu/channel/target/$VM/com.zyvor.guestkit.0 --listen 127.0.0.1:8765auto-selects the best path per VM.
- How: Host bridge:
- Snapshot quiesce — Freeze and thaw guest filesystems (fsfreeze) for application-consistent snapshots, plus soft reboot and graceful shutdown. — Clean snapshots without crash-consistency risk.
- How: Agent RPC via the proxy (e.g.
curl http://127.0.0.1:8765/freeze//thaw) issues fsfreeze, soft reboot and graceful shutdown for consistent snapshots.
- How: Agent RPC via the proxy (e.g.
- Live remediation with approval — Restart failed units, collect support bundles, and run fix plans - policy-gated with JIT approval workflows. — Safe, audited guest actions at fleet scale.
- How: Agent RPC / worker jobs run fix plans and restart failed units under JIT approval, e.g.
curl -s http://127.0.0.1:8765/doctor | jq .then submit an approved plan.
- How: Agent RPC / worker jobs run fix plans and restart failed units under JIT approval, e.g.
- mTLS & signed updates — Agents bootstrap client certs, push heartbeats over mTLS, and self-update from Ed25519-signed, SHA256-verified bundles. — A hardened, tamper-evident guest agent.
- How: Agents bootstrap client certs at enrollment and self-update from Ed25519-signed, SHA256-verified bundles; configured through the agent enrollment/config, not a per-run flag.
- Deep Linux health — Component scores for boot, systemd, network, DNS, storage, and security via systemd D-Bus, journald, /proc, and PSI pressure. — Root-cause the failed unit from journal correlation.
- How: Agent RPC:
curl -s http://127.0.0.1:8765/doctor | jq .returns component scores (boot, systemd, network, DNS, storage, security) from D-Bus, journald, /proc and PSI.
- How: Agent RPC:
Deep guest intelligence targets Linux; Windows uses virtio-win and a scheduled-task updater today, with a native agent MSI scaffolded.
9. KubeVirt & Platform
Boot-inspect stopped VMs in-cluster and drive it all from a self-hosted web console.
- Offline boot-inspect for stopped VMs — zyvor-api resolves a stopped VM's root PVC and runs GuestKit's boot-inspect evidence collection in-process, returning fstab validity, bootloader, and cloud-init state. — Assurance for halted VMs without booting them.
- How: Web console: open a stopped VM and run Boot Inspect (zyvor-api resolves the root PVC and calls GuestKit's
run_boot_inspectlibrary API directly — not a separate CLI command); available via the/api/boot-inspect endpoint.
- How: Web console: open a stopped VM and run Boot Inspect (zyvor-api resolves the root PVC and calls GuestKit's
- Zeus VM Tools — A Kubernetes-native guest agent with cloud-init, QGA, ISO, and airgap install paths plus VMToolsPolicy auto-install/upgrade reconciliation. — The VMware Tools equivalent for KubeVirt.
- How: Apply a
VMToolsPolicyresource (or enable it from the web console) to auto-install/upgrade the KubeVirt guest agent via cloud-init, QGA, ISO or airgap path.
- How: Apply a
- Web console — Self-hosted zyvor-ui + zyvor-api + guestkit-worker ship as public GHCR images and a Helm chart, backed by a Redis job queue. — A team-facing UI over the same engine.
- How: Browse to http://localhost:8088 and sign in with
admin/Admin@321(change immediately). The nginx front-end proxies/api/to zyvor-api. Inventory tabs, Assurance (doctor/plan/passport/repair), Profiles, and Files browse map toPOST /api/v1/vms/:id/{inspect,doctor,migration-plan,passport,repair-plan,profile,explore}. Lab HTTPS:./scripts/deploy-ui-remote.shwith--api-upstream. See Using the Dashboard.
- How: Browse to http://localhost:8088 and sign in with
- Python bindings —
zyvor-guestkiton PyPI: Guestfs handle + assurance APIs (run_doctor,run_migrate_repair, optionalinject_json,live_fix_commands) for programmatic inspection and offline repair.- How: Python:
from guestkit import Guestfstheng = Guestfs(); g.add_drive("vm.qcow2"); g.launch(); g.inspect_os()— a GuestKit-style API with 100+ methods.
- How: Python:
- h2kvm pipeline — Pairs with h2kvm for VMware-to-KVM conversion, sitting in the wider Transiva to GuestKit to v9s to PacketWolf flow. — One assurance gate inside a full migration pipeline.
- How: Run h2kvm for the VMware-to-KVM conversion and call
guestkit doctor/migrate-planas the assurance gate in the same pipeline.
- How: Run h2kvm for the VMware-to-KVM conversion and call
- Pluggable auth — The web stack supports JWT, local login, and OIDC/SAML hooks with JWKS-verified ID tokens. — Wire the console into your existing identity.
- How: Web console: go to Settings to enable OIDC/SAML (JWKS-verified ID tokens) or keep JWT/local login; rotate the seeded password and
JWT_SECRETfirst.
- How: Web console: go to Settings to enable OIDC/SAML (JWKS-verified ID tokens) or keep JWT/local login; rotate the seeded password and
- KubeVirt manifest generation — Emits ready-to-apply DataVolume and VirtualMachine YAML with CDI import URLs, storage class, and CPU/memory sized from the migration plan. — From disk image to running KubeVirt VM in one manifest.
- How: CLI:
guestkit migrate-plan vm.qcow2 --target kvmemits ready-to-apply DataVolume and VirtualMachine YAML with CDI import URL, storage class and sized CPU/memory; also exportable from the web console.
- How: CLI:
- Cloud image sources — Inspects images directly from S3, GCS, and Azure Blob URIs, resolving them to a local path on the fly. — Assess VMs where they already live in object storage.
- How: CLI: point any command at an object-storage URI, e.g.
guestkit inspect s3://bucket/vm.qcow2(also gs:// and Azure Blob), and it resolves to a local path on the fly.
- How: CLI: point any command at an object-storage URI, e.g.
In-cluster boot-inspect needs a privileged pod or node disk access plus get/list RBAC on VMs, VMIs, PVCs, and PVs. A running VM returns VM-spec heuristics - offline disk access is for stopped VMs.
10. QEMU / VirtIO runtime
Turn migration evidence into an executable, assurance-gated QEMU definition.
- Evidence → QEMU plan —
guestkit-qemu planreusescollect_assurance_datato pick architecture, machine type, disk format, VirtIO devices, firmware needs, and a safe argv vector. — One inspection path for score and launch config.- How: CLI:
guestkit-qemu plan vm.qcow2 --memory-mb 8192 --vcpus 4 --json.
- How: CLI:
- Gated run — Launch refuses boot blockers, scores below
--min-boot-score, or UEFI without pflash unless--allow-unready. — No silent start of unready cutovers.- How: CLI:
guestkit-qemu run vm.qcow2 --min-boot-score 80 --qmp-socket /run/guestkit/vm.qmp.
- How: CLI:
- QMP day-2 — status / pause / resume / balloon / powerdown over a Unix QMP socket. — Control the VM after assured start.
- How: CLI:
guestkit-qemu qmp --socket /run/guestkit/vm.qmp status.
- How: CLI:
- Host networking stays outside — User-mode (SSH on loopback) by default; TAP/bridge attach only to already-provisioned host devices. — GuestKit inspects; the platform owns host net.
Full guide: qemu-runtime.md.
11. Deployment & Editions
Install in one command; run the full open-source stack; scale with Enterprise support.
- GitHub Release — the v1.2.5 tarball installs
guestkit,guestctl, andguestkit-qemu. crates.ioguestkitis still 0.3.2. — From zero to inspecting in one download.- How: CLI: download
guestkit-1.2.5-linux-amd64.tar.gzfrom the v1.2.5 release.
- How: CLI: download
- Run from GHCR — Prebuilt public images (zyvor-ui, zyvor-api, guestkit-worker) come up via docker compose with no docker login. — Stand up the whole console in minutes.
- How: Docker:
docker compose -f deploy/docker-compose.ghcr.yml up -dbrings up zyvor-ui/zyvor-api/guestkit-worker at http://localhost:8088 with no docker login.
- How: Docker:
- Helm & remote deploy — A Helm chart for clusters plus scripted remote deploy for Docker hosts. — Ship it where your fleet already lives.
- How: Cluster:
helm installthe chart (provisions Postgres/Redis/MinIO); for Docker hosts use the scripted remote deploy underscripts/.
- How: Cluster:
- Full open-source stack — CLI, TUI, Python bindings, assurance APIs, web console, and KubeVirt hooks are all Apache-2.0 in the repo - Enterprise adds support, not features. — Nothing core is withheld from the open source.
- How: Clone the repo (
git clone https://github.com/zyvorai/guestkit) — CLI, TUI, Python bindings, assurance APIs, web console and KubeVirt hooks are all Apache-2.0.
- How: Clone the repo (
- Enterprise programs — SLA, air-gapped deployment packages, guided playbooks, and fleet automation for 100+ VM and regulated migrations. — Backed help for VMware-exit programs at scale.
- How: Contact the account team at info@zyvor.dev for SLA, air-gapped packages, guided playbooks and fleet automation.
The default eval compose stack runs without authentication - do not expose it beyond localhost. Use the production template and turn auth on before any network exposure.
Getting started
- Install — Download the v1.2.5 GitHub Release to get the guestkit CLI and guestctl TUI, or pull the web stack from ghcr.io/zyvorai (
:v1.2.5). - Score boot readiness — guestkit doctor vm.qcow2 --target proxmox --explain returns a 0-100 boot assurance score with ranked blockers and root-cause chains.
- Export a fix plan — guestkit migrate-plan vm.vmdk --target proxmox --export plan.yaml writes an executable, reviewable migration fix plan.
- Explore interactively — guestctl tui vm.qcow2 opens the carbon TUI with the Assurance workspace and fix-plan preview.
- Gate your pipeline — guestkit doctor img.qcow2 --target proxmox -o json --fail-below 80 fails CI on any image that regresses below your bar.
Good to know: GuestKit runs on Linux hosts and needs host tooling (losetup, qemu-nbd, and qemu-img for conversion); mount and in-cluster boot-inspect operations require root or a privileged pod. Offline disk analysis targets stopped VMs - running VMs return VM-spec heuristics or need the live guest agent. Deep guest intelligence is Linux-first; the native Windows agent MSI is scaffolded, and Windows relies on virtio-win today. LLM-assisted features require building with --features ai; deterministic intelligence works without it. Reporting notes: --output and --export are mutually exclusive, HTML reports truncate to 100 packages, and PDF is produced via external tools.
GuestKit is developed by ZyvorAI Labs (Apache License 2.0). Contact info@zyvor.dev.