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.0.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.0-py3-none-manylinux_2_28_x86_64.whl (7.9 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

shuck-0.1.0-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.0.tar.gz.

File metadata

  • Download URL: shuck-0.1.0.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.0.tar.gz
Algorithm Hash digest
SHA256 275772cf662efd66e4bc5d73fbafeed4db8b332fe74ec268732610b298ca437d
MD5 08812ac9e80ae9922f13f0e28a630ab7
BLAKE2b-256 d792b45fe4552736207f2efb0e0250988d9848d84457a699f64fe526d6a11ebe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for shuck-0.1.0-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 30dec26b6865ffa24845fa8512b114fc72175a7fc492692e94a7bd2760be2ca6
MD5 e749662e18978b4d1859598c7af9ddce
BLAKE2b-256 9c5c2a398cef12c74d4671e0d3b020bee0be8ae2401101d1187f7deb6bc314e5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for shuck-0.1.0-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 60da683f4dd92494188b60ceaee577fc26d6e4b90fb7b190069a982b2c0e3935
MD5 321bb99c24a75db9cc4a198fd557aa93
BLAKE2b-256 5db9a099eba4487818170d2cd127a50f2b8f8e5c4cf0aa452411d17f263e4bec

See more details on using hashes here.

File details

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

File metadata

  • Download URL: shuck-0.1.0-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.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 03161b9998d14c420388880eee403da408143c08e8c106793776de7761eb472d
MD5 b0e9c08ee0783bc11086618103b99bda
BLAKE2b-256 b4f4f0d897c7e7f81b01ed45c291222a9e65edf4130ade6591f0a22eb5a91a46

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for shuck-0.1.0-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 51bd0959ec7ad1691800871a20d636c5de9dbcf9c276fcfa6247cee0db8ec828
MD5 e28cafdac03face13c642f86f70a97d7
BLAKE2b-256 95b04e2194ca4ca94a303096b4d3ccf55688ecc0f3c1b54fb88792486862dffa

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