Skip to main content

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:

  1. ~/.config/shuck/config.toml (user)
  2. /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

shuck-0.1.2.tar.gz (177.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

shuck-0.1.2-py3-none-manylinux_2_28_x86_64.whl (7.9 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

shuck-0.1.2-py3-none-manylinux_2_28_aarch64.whl (7.6 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

shuck-0.1.2-py3-none-macosx_11_0_arm64.whl (7.2 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

shuck-0.1.2-py3-none-macosx_10_12_x86_64.whl (7.5 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

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

Hashes for shuck-0.1.2.tar.gz
Algorithm Hash digest
SHA256 ef5eef76b8d23a97becd9dbecd8a8f9d66890530ed298ea88137431fb76ffb31
MD5 c5155efa874273894e65016aff00c075
BLAKE2b-256 4feb6139fa67c4e0a784d901de14120cc1b2faa27d32d36c9cbd77dabf272571

See more details on using hashes here.

File details

Details for the file shuck-0.1.2-py3-none-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for shuck-0.1.2-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b8499037ffaea884c447fc635485f1829a98850420228736564740ee6b0f17c2
MD5 7f36a4af089122eda4b67c4ae7e6bc08
BLAKE2b-256 d6ba7570ab4dec347220ed4e8563931179e5e577c2b68997acf81dec98202c74

See more details on using hashes here.

File details

Details for the file shuck-0.1.2-py3-none-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for shuck-0.1.2-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b98828c87b8587a08debb4a66c4cc65ecfa489e3ba3df9e4e61e7d5e1ace076b
MD5 075307fbdb1904666b4fe914b4c6345a
BLAKE2b-256 7b1a4d0a161767628ea0c6cd68c49bb26d72e47bd245b966b80a2f282049e9bf

See more details on using hashes here.

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

Hashes for shuck-0.1.2-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7174812385cd1da4e23177cf94f1ae1e1f98289df62b324ada87bcfc3ef4848a
MD5 fc0948a4efabd9f662c83be00a2182d6
BLAKE2b-256 a8d3f7b7e55a1a7d4e5d02efb308384998458b29f442de9b3fced2f33e1c78d6

See more details on using hashes here.

File details

Details for the file shuck-0.1.2-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for shuck-0.1.2-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 20f90a292ce831ad7db001af39ea45f5a3aeb01d75d6d11fd41be0a770a6dfb3
MD5 fb9c109c841a54c237afab3fc0770f69
BLAKE2b-256 e6264fdb4865418525a07bcf5875726c974bc93ca5634ef16eff4854083357e2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page