Pure Rust VM disk toolkit with beautiful output, Windows registry parsing, and VM migration support - Python bindings
Project description
GuestKit
Pure-Rust VM disk inspection — no boot required
▶ Watch migration demo · Contact sales · Full platform
GuestKit inspects and repairs VM disks while they are powered off. Point it at a QCOW2, VMDK, or RAW image and get OS facts, security findings, network layout, packages, services, and exportable reports — in seconds, from a single static binary.
Built in Rust for safety and speed. Pairs with hyper2kvm for VMware → KVM migration pipelines. Optional TUI, REPL shell, AI diagnostics, and Python bindings when you need more than one-shot CLI output.
Why GuestKit?
| Without GuestKit | With GuestKit |
|---|---|
| Boot every VM to “just check” config | Inspect offline images in place |
Fragile shell scripts over guestfish |
Structured JSON/YAML/HTML/PDF output |
| No fleet-wide security posture view | Batch inspect + profiles across many disks |
| Migration surprises at first power-on | fstab/crypttab analysis and fix plans before cutover |
cargo install guestkit # or: pip install hypersdk-guestkit
guestkit inspect vm.qcow2
guestkit tui vm.qcow2 # interactive dashboard
guestkit inspect vm.qcow2 --profile security
See it in action
┌────────────────────────────────────────────────────────┐
│ Ubuntu 22.04 LTS │
│ linux · x86_64 · hostname: webserver-prod │
└────────────────────────────────────────────────────────┘
💾 Block devices /dev/sda 8.0 GiB
🌐 Network eth0 192.168.1.100/24 (up)
📦 Packages 1,234 (deb)
🔧 Services 45 systemd units
🔐 Security firewalld active · SSH keys present
→ guestkit inspect vm.qcow2 --profile security # full risk report
→ guestkit inspect vm.qcow2 --export report.html
Features
| Inspect | OS, hostname, disks, network, packages, DBs, web servers, users, kernel |
| TUI | Multi-view dashboard — files, security, services, storage, fuzzy jump (Ctrl+P) |
| Shell | REPL with ls, cat, grep, explore, upload/download, optional ai |
| Profiles | Security, compliance, hardening, performance, migration readiness |
| Fix plans | Preview offline changes → export bash/Ansible → apply with backup/rollback |
| Batch | Parallel fleet inspection with caching (inspect-batch --parallel 8) |
| Export | JSON, YAML, HTML, PDF for tickets and automation |
| Formats | QCOW2, VMDK, VDI, VHD/VHDX, RAW, IMG, ISO |
| Python | PyO3 bindings — same inspection API in pipelines |
| AI (optional) | Natural-language triage on top of deterministic facts (--features ai) |
Quick start
Install
# Rust
cargo install guestkit
# Python
pip install hypersdk-guestkit
# From source
git clone https://github.com/hypersdk/guestkit && cd guestkit && cargo build --release
# Docker
docker build -t guestkit:latest .
docker run --privileged -v ./vms:/vms:ro guestkit:latest inspect /vms/vm.qcow2
See Docker guide · Remote deploy (make deploy-remote H=<host> U=root)
Essential commands
| Goal | Command |
|---|---|
| Inspect | guestkit inspect disk.qcow2 |
| JSON for CI | guestkit inspect disk.qcow2 -o json |
| TUI | guestkit tui disk.qcow2 |
| REPL | guestkit interactive disk.qcow2 |
| Security scan | guestkit inspect disk.qcow2 --profile security |
| Fleet | guestkit inspect-batch ./vms/*.qcow2 --parallel 4 -o json |
| Diff two images | guestkit diff before.qcow2 after.qcow2 |
| File browser | guestkit explore disk.qcow2 /etc |
How it fits your stack
flowchart LR
subgraph sources [Disk sources]
QCOW[QCOW2 / VMDK / RAW]
end
subgraph guestkit [GuestKit]
INS[inspect]
PRF[profiles]
PLN[fix plans]
EXP[export]
end
subgraph downstream [Downstream]
H2K[hyper2kvm]
CI[CI / CMDB]
OPS[runbooks]
end
QCOW --> INS
INS --> PRF --> PLN
INS --> EXP
PLN --> H2K
EXP --> CI
PRF --> OPS
Typical flows
- Migration — inspect → profile migration → fix plan → hand off to hyper2kvm
- Incident response —
tuiorinteractiveon a clone without powering on production - Compliance —
inspect --profile compliance→ HTML/PDF reports for auditors - Automation —
inspect -o json→ jq → your ticketing or inventory system
Disk formats
| Path | Formats | Mechanism |
|---|---|---|
| Fast | RAW, IMG, ISO | loop device |
| Universal | QCOW2, VMDK, VDI, VHD/VHDX | QEMU NBD |
Repeated runs on the same image? Use --cache or convert once: qemu-img convert -O raw vm.qcow2 vm.raw.
Python (30 seconds)
from guestkit import Guestfs
with Guestfs() as g:
g.add_drive_ro("vm.qcow2")
g.launch()
for root in g.inspect_os():
print(g.inspect_get_distro(root), g.inspect_get_hostname(root))
More examples: examples/python/ · Python guide
AI diagnostics (optional)
cargo build --release --features ai
export OPENAI_API_KEY=sk-...
guestkit interactive vm.qcow2
# ai why won't this boot?
AI interprets inspection data you already collected — it does not replace deterministic checks. Sensitive images: keep AI off or use air-gapped workflows.
Documentation
| Topic | Link |
|---|---|
| Full docs index | docs/INDEX.md |
| CLI reference | docs/user-guides/cli-guide.md |
| TUI | docs/features/tui-enhancements.md |
| Interactive shell & explore | docs/features/explore/EXPLORE-QUICKSTART.md |
| Security profiles | docs/user-guides/profiles.md |
| Fix plans | docs/features/fix-plans.md |
| Export formats | docs/features/export-formats.md |
| VM migration | docs/user-guides/vm-migration.md |
| Architecture | docs/architecture/overview.md |
Project layout
guestkit/
├── src/
│ ├── cli/ # commands, TUI, shell, profiles, exporters
│ ├── guestfs/ # disk inspection & file operations
│ ├── disk/ # partition & filesystem primitives
│ └── python.rs # PyO3 bindings
├── docs/ # guides & reference
├── examples/ # Rust & Python samples
└── scripts/ # deploy-remote.sh, selftest.sh
Roadmap snapshot
- ✅ TUI dashboard, security profiles, JSON/YAML/HTML/PDF export
- ✅ Interactive shell, Python bindings, batch + cache
- 🔄 Richer Windows boot/EFI diagnostics
- 🔄 Deeper offline edit safety gates
- 🔮 Cloud image pull (S3/Azure/GCP) · plugin profiles
Details: docs/development/roadmap.md
Contributing
git clone https://github.com/hypersdk/guestkit && cd guestkit
cargo test && cargo clippy && cargo fmt
Bug reports and PRs welcome on GitHub. See Contributing.
License
LGPL-3.0-or-later — commercial use allowed; modifications to GuestKit itself must stay open under LGPL. See LICENSE.
Support
GuestKit is the open-source guest-disk component of the HyperSDK Platform (Zeus suite), from Zyvor AI Labs.
GitHub (this repository)
- Issues — bugs and features
- Discussions — questions and ideas
- docs/ — full documentation tree
Enterprise — zyvor.dev
Production migrations, VMware exit programs, SLAs, and the integrated platform (dashboard, RBAC, fleet orchestration) are provided by Zyvor, not via GitHub Issues.
| Demo | zyvor.dev/demo |
| Sales | sales@zyvor.dev |
| Contact | zyvor.dev/contact |
| Product | Focus |
|---|---|
| HyperSDK | Multi-cloud export & APIs |
| hyper2kvm | Conversion & validation at scale |
| GuestKit | Offline inspect, repair, profiles |
| v9s · PacketWolf | KubeVirt ops · eBPF observability |
📄 Open source vs Enterprise · Enterprise guide · Security
Related open-source repos
| GitHub | Role |
|---|---|
| hypersdk | Hypervisor SDK |
| hyper2kvm | VM migration toolkit |
| guestkit (this repo) | Guest disk inspection |
Questions? Open an issue or start a discussion.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hypersdk_guestkit-0.3.3.tar.gz.
File metadata
- Download URL: hypersdk_guestkit-0.3.3.tar.gz
- Upload date:
- Size: 1.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a3d0565a7694f1d8dfbdc2efe90a94604fd96c1053b7dbf4ee345f1d2d4eb457
|
|
| MD5 |
7795d0c052d993c4ec56d306707ebb01
|
|
| BLAKE2b-256 |
6764a81ecb6916afc25c579654976e3bfecb111fa4352014f2bcbc9a8f1f0b38
|
File details
Details for the file hypersdk_guestkit-0.3.3-cp311-cp311-manylinux_2_39_x86_64.whl.
File metadata
- Download URL: hypersdk_guestkit-0.3.3-cp311-cp311-manylinux_2_39_x86_64.whl
- Upload date:
- Size: 11.4 MB
- Tags: CPython 3.11, manylinux: glibc 2.39+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7f3d11e50413d63b21fd913ec0fae2cd18948f1b8c4a6ee02699a32d593e38a3
|
|
| MD5 |
e9ac3f65c26ca7fa5777f41b46b55c6f
|
|
| BLAKE2b-256 |
7d8bb24abcd3a6f68e257829e69e7155df87db23e870e72cff9eb9d5f3af2d02
|
File details
Details for the file hypersdk_guestkit-0.3.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: hypersdk_guestkit-0.3.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 5.7 MB
- Tags: CPython 3.9, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
592be5c3e01e39970f823f85e6b8f9ba7258b4ff19658479778b43de056492f8
|
|
| MD5 |
fa0a81f6bb4e0ce731b41b2a9116569e
|
|
| BLAKE2b-256 |
593b8e939b0e70477a4ca0edb3a4e2489ea51d8184faf48f836b1d230e0564c7
|