microVM manager built on Firecracker (Linux) and Apple Virtualization.framework (macOS)
Project description
Shuck
An open-source microVM manager built on Firecracker (Linux) and Apple Virtualization.framework (macOS).
- Boot lightweight VMs in milliseconds
- Execute commands, transfer files, open interactive shells
- Stream serial console logs
- Port forwarding with nftables NAT (Linux)
- REST API + CLI
- Cloud-init style userdata scripts
Status
Pre-1.0. The core feature set works and has test coverage, but:
- The HTTP API, CLI flags, config schema, and on-disk state layout may change without a deprecation period.
- The Linux/Firecracker backend is more mature than the macOS/Apple VZ backend.
- It has not been run at scale or under production workloads.
- Security features (token auth, rate limiting, encrypted secrets) exist but have had limited review. Don't expose the daemon to an untrusted network.
Useful for experimentation, local development, and CI. Not recommended for production.
Quick Start
# Install
pip install shuck
# Fetch the default kernel + rootfs for this host
shuck images pull
# Start the daemon
shuck daemon &
# Boot a VM
shuck run --name hello --cpus 2 --memory 512
# Interact
shuck exec hello -- uname -a
shuck shell hello
shuck cp local.txt hello:/tmp/local.txt
shuck logs hello -f
# Clean up
shuck destroy hello
shuck images pull fetches the latest signed image set from the images-*
GitHub Releases. If no image
release is published yet for this arch, the command will fail — use the
BYO path below in the meantime.
BYO kernel / rootfs
If you want to use your own images, pass --kernel and the rootfs path:
shuck run /path/to/rootfs.ext4 --kernel /path/to/vmlinux
Configuration
Copy config.example.toml to one of the discovery paths:
~/.config/shuck/config.toml(user)/etc/shuck/config.toml(system)
Or pass --config /path/to/config.toml explicitly. See config.example.toml for all available fields.
Platform Support
| Platform | Backend | Networking | Status |
|---|---|---|---|
| Linux x86_64 | Firecracker | TAP + nftables NAT, port forwarding | Usable |
| macOS ARM64 | Apple Virtualization.framework | Shared NAT (VZ-managed) | Experimental |
Architecture
CLI (shuck) ──> REST API (shuck-api) ──> Core (shuck-core)
├── VMM (shuck-vmm) Firecracker / Apple VZ
├── State (shuck-state) SQLite persistence
├── Net (shuck-net) TAP devices, IP allocation
└── Storage (shuck-storage) Rootfs cloning
Guest Agent (shuck-agent) ←── Proto (shuck-agent-proto)
Host-guest communication uses vsock (port 52). Messages are length-prefixed JSON with base64-encoded binary payloads.
Development
Requires Rust 1.90+ and cargo-nextest.
make build # Debug build
make build-release # Release build (LTO, stripped)
make build-agent # Static musl agent for guest VMs
make test # Full test suite
make test-unit # Unit tests only
make lint # fmt-check + clippy
make check # Type check
make install # Install (auto-detects macOS, signs binary)
Running a Development VM
make run-daemon # Start daemon
make build-agent-aarch64 # Build ARM64 agent (macOS guests)
make update-rootfs # Inject agent into rootfs image
Systemd
A systemd unit file is provided at contrib/shuck.service.
License
See LICENSE.
Project details
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 shuck-0.1.2.tar.gz.
File metadata
- Download URL: shuck-0.1.2.tar.gz
- Upload date:
- Size: 177.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef5eef76b8d23a97becd9dbecd8a8f9d66890530ed298ea88137431fb76ffb31
|
|
| MD5 |
c5155efa874273894e65016aff00c075
|
|
| BLAKE2b-256 |
4feb6139fa67c4e0a784d901de14120cc1b2faa27d32d36c9cbd77dabf272571
|
File details
Details for the file shuck-0.1.2-py3-none-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: shuck-0.1.2-py3-none-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 7.9 MB
- Tags: Python 3, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b8499037ffaea884c447fc635485f1829a98850420228736564740ee6b0f17c2
|
|
| MD5 |
7f36a4af089122eda4b67c4ae7e6bc08
|
|
| BLAKE2b-256 |
d6ba7570ab4dec347220ed4e8563931179e5e577c2b68997acf81dec98202c74
|
File details
Details for the file shuck-0.1.2-py3-none-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: shuck-0.1.2-py3-none-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 7.6 MB
- Tags: Python 3, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b98828c87b8587a08debb4a66c4cc65ecfa489e3ba3df9e4e61e7d5e1ace076b
|
|
| MD5 |
075307fbdb1904666b4fe914b4c6345a
|
|
| BLAKE2b-256 |
7b1a4d0a161767628ea0c6cd68c49bb26d72e47bd245b966b80a2f282049e9bf
|
File details
Details for the file shuck-0.1.2-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: shuck-0.1.2-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 7.2 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7174812385cd1da4e23177cf94f1ae1e1f98289df62b324ada87bcfc3ef4848a
|
|
| MD5 |
fc0948a4efabd9f662c83be00a2182d6
|
|
| BLAKE2b-256 |
a8d3f7b7e55a1a7d4e5d02efb308384998458b29f442de9b3fced2f33e1c78d6
|
File details
Details for the file shuck-0.1.2-py3-none-macosx_10_12_x86_64.whl.
File metadata
- Download URL: shuck-0.1.2-py3-none-macosx_10_12_x86_64.whl
- Upload date:
- Size: 7.5 MB
- Tags: Python 3, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
20f90a292ce831ad7db001af39ea45f5a3aeb01d75d6d11fd41be0a770a6dfb3
|
|
| MD5 |
fb9c109c841a54c237afab3fc0770f69
|
|
| BLAKE2b-256 |
e6264fdb4865418525a07bcf5875726c974bc93ca5634ef16eff4854083357e2
|