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.1.tar.gz (176.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.1-py3-none-manylinux_2_28_x86_64.whl (7.9 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

shuck-0.1.1-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.1.tar.gz.

File metadata

  • Download URL: shuck-0.1.1.tar.gz
  • Upload date:
  • Size: 176.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.1.tar.gz
Algorithm Hash digest
SHA256 577d4cc4a701234b7f0913e88f041fb23994f69b78c284fbd8c7af61b7a57981
MD5 f4d623f53e98f24ab6df441ae3d07ead
BLAKE2b-256 fc13d3ac5eb27e34132a2ee4c1fe03271707c4fe1a9ed98dcaf95e051870789b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for shuck-0.1.1-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8960b28b38ef04f6f504f75dba53897261155d17884bcbd1101710e517d29423
MD5 8531abb82769d8d5a29e178eca20e688
BLAKE2b-256 b71b36cc2a28b17005495c04a1c6bf755fe4d5c108bf8c298b6c7fc76e29c7d4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for shuck-0.1.1-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 144652f4fc33747710e9d248fba237f1b62bd180b60b2f86a5fcd9325cc933d5
MD5 ebe4eb9daa583cd9a056fdf32027f850
BLAKE2b-256 4b1f378529667356b99cfcbe1853aa8f16dd1439f7d40069134ccccb574332b3

See more details on using hashes here.

File details

Details for the file shuck-0.1.1-py3-none-macosx_11_0_arm64.whl.

File metadata

  • Download URL: shuck-0.1.1-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.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a39cc7ed840d654e6a3582864a363291a638fe3d8730d4c3ca7350d9659da00f
MD5 0adcfa936b1b3ffcc34f2fa806569279
BLAKE2b-256 92c9a5ee3b227876731c2f97fd922769cfcac197b2ac5f327eb4ea330d766b10

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for shuck-0.1.1-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 85e0bba489d8eaa1bd9027d2233e4b86a3418968747970ec0cebbe6f9e4b211c
MD5 76e636835f30f383e052a007a530193d
BLAKE2b-256 d4a31ee8fc8a88b896517b63eeb8cf75b0bfdc29f951c25f3712f5d2be1da3dc

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