Releases: TimLai666/chefer
Release list
v0.5.0 — macOS 一等公民 + GPU passthrough + 動態解析度
Install / Upgrade
Running a Chefer-packaged app needs nothing — the single file is self-contained. You only need Chefer to package apps yourself.
# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/TimLai666/chefer/main/scripts/install.sh | sh# Windows (PowerShell)
irm https://raw.githubusercontent.com/TimLai666/chefer/main/scripts/install.ps1 | iexThe installer detects your OS/arch, downloads the matching package, verifies its sha256, installs to ~/.chefer (or %LOCALAPPDATA%\chefer), and adds it to your PATH. Open a new terminal, then chefer version. Pin a version with CHEFER_VERSION=v0.5.0 ($env:CHEFER_VERSION on Windows). On macOS, allow the unsigned binary in System Settings → Privacy & Security on first run. Already have Chefer? Just run chefer upgrade — it swaps the binary and the whole kit/ together.
macOS users, please take this build: the previous
v0.4.0arm64 appliance kit shipped an x86-64 busybox and could not boot. This release fixes it.
Highlights
macOS is now a first-class target (validated on real Apple Silicon, on by default)
- Full
vz(Virtualization.framework) micro-VM backend: VM boot, virtiofs, exit-code propagation, TCP + UDP port forwarding, multi-servicedepends_on,persist_pathacross restarts, and defaultbridgeoutbound (pasta → VZ NAT, including in-container DNS). - GUI apps: native
VZVirtualMachineViewwindow +cage/Xwayland display, keyboard/mouse HID, and a bidirectional clipboard (text + PNG). - Live dynamic resolution + HiDPI (default on macOS 14+): resize the window and the guest genuinely re-modesets to follow it, with the Retina output scale applied so cursor/UI sizes stay correct.
- The old
CHEFER_VZ_EXPERIMENTALopt-in is gone —vzgates on the real preconditions (host arch, embedded appliance, embedded helper, macOS 13+) and reports honestly when one is missing. (Intel Macs share the same code path with an x86_64 appliance, but their VZ boot hasn't been exercised on real hardware.)
GPU passthrough (opt-in gpu: true)
- Native Linux NVIDIA: host-driver-version-matched userspace lib injection (nvidia-container-toolkit parity),
nvidia-smibound into the container, NVENC/NVDEC — validated on a real RTX 4070 (CUDA + NVENC). - WSL2 NVIDIA (
/dev/dxg+/usr/lib/wsl/{lib,drivers}) — validated on a real GT 1030 (CUDA). - AMD (ROCm) and Intel GPU node passthrough; per-service card selection (
gpu: [0, 2], hard isolation) andgpu: all/nonealiases.
Packaging / networking
source: imageprivate-registry auth (docker loginplainauths/CHEFER_REGISTRY_AUTH).- Docker-parity
/etc/resolv.confinjection into service containers — hostnames resolve even when the base image ships no resolv.conf. - GUI overlay now ships as a read-only squashfs that is mounted instead of unpacked each boot (~200 MB less per GUI launch).
- Windows WHP: in-container DNS, host↔guest clipboard image sync, and helper anti-orphan (Job Object + stdin-EOF self-termination).
Real-hardware fixes
- arm64 appliance initramfs was cross-built with an x86-64 busybox (kernel panic on boot) → now fetches the correct-arch
busybox-static; CI gained an arm64 appliance boot-smoke to block this class of regression. - Extraction now restores tar exec bits (bundled agents were EACCES), the runtime port proxy no longer double-binds against the vz relay, and the GUI init exports PATH.
Full changelog: v0.4.0...v0.5.0
v0.4.0 — GUI on Windows without WSL (WHP)
Install
One-line installer — detects your OS/arch, downloads the matching kit, verifies its sha256, installs to ~/.chefer (or %LOCALAPPDATA%\chefer), and adds it to PATH. Open a new terminal, then chefer version.
# Linux / macOS
curl -fsSL https://raw.githubusercontent.com/TimLai666/chefer/main/scripts/install.sh | sh# Windows (PowerShell)
irm https://raw.githubusercontent.com/TimLai666/chefer/main/scripts/install.ps1 | iexAlready installed? chefer upgrade.
Highlights — GUI on the no-WSL Windows (WHP) path
Packaged GUI apps now run on Windows without WSL, on the WHP micro-VM backend. A bundle-embedded cage Wayland compositor (with Xwayland for X11 apps) renders inside the VM and appears in a native window on your desktop — validated end-to-end on real hardware.
- Display — virtio-gpu (2D over MMIO) drives a
cagecompositor; the host blits the scanout to a native window. Software-rendered (llvmpipe). EDID advertises the app's preferred resolution, so the window opens at 1280×800 (not a cramped fallback); the window also tracks the guest resolution 1:1 (no stretching). - Input — keyboard + mouse via virtio-input (absolute-coordinate tablet), delivered to the guest.
- Clipboard — bidirectional text sync between the Windows clipboard and the in-VM compositor, over the existing network channel with a random per-run token (no extra device model).
- Window title = the app name.
The GUI overlay (cage/Xwayland/Mesa) is embedded in the bundle only when the app has a gui/both service and targets Windows/macOS — pure-server apps carry no extra weight.
Notes / trade-offs
- GUI is software-rendered; this path is CPU-only for GPU acceleration/compute (that stays on the WSL2 backend). The macOS
vzbackend shares the same in-guest GUI path (host side pending real-Mac validation). - Remaining polish: image clipboard (text works today), hardware cursor.
Full design + milestones: docs/DESIGN.md §6.
v0.3.0 — bridge outbound on WHP + rootless chown/gosu images
Install
One-line installer (recommended) — detects your OS/arch, downloads the matching kit from this release, verifies its sha256, installs to ~/.chefer (or %LOCALAPPDATA%\chefer), and adds it to PATH. Open a new terminal, then chefer version.
# Linux / macOS
curl -fsSL https://raw.githubusercontent.com/TimLai666/chefer/main/scripts/install.sh | sh# Windows (PowerShell)
irm https://raw.githubusercontent.com/TimLai666/chefer/main/scripts/install.ps1 | iexPin this version with CHEFER_VERSION=v0.3.0 ($env:CHEFER_VERSION on Windows). Already installed? Just run chefer upgrade.
Highlights
WHP: outbound networking now works in the default bridge mode
On v0.2.0, apps packed with the default network: bridge silently degraded to internal (no outbound) on the no-WSL WHP backend. Three guest-side fixes land in this release's appliance + guest-agent:
- appliance kernel now enables
CONFIG_TUN(pasta needs a tap device in the app netns) - appliance init switches to a tmpfs root early (
pivot_rootalways fails on an initramfs rootfs, which killed pasta's self-sandbox) and makes/dev/net/tunusable by unprivileged uids - guest-agent retries pasta with a staged executable copy when the bundle was packed on a Windows host (which cannot record unix exec bits)
Verified end-to-end on real hardware: DNS (UDP) + HTTP (TCP) from an app in the default bridge netns, declared-port forwarding, and undeclared-port isolation.
Rootless Linux: official chown/gosu images now run without root
On native Linux, running the single file as a non-root user now uses /etc/subuid//etc/subgid delegation via newuidmap/newgidmap (the rootless-Podman mechanism) to map a full uid range into the container — images whose entrypoint chowns/gosus to a dedicated uid (official redis, postgres, …) run as-is. Verified end-to-end with the official redis image as a non-root user. Without the uidmap tools or subuid ranges it falls back to the previous single-uid map.
Misc
- dependency bumps;
cargo auditignores documented in.cargo/audit.toml(two quick-xml advisories reachable only via self_update's S3/GCS backend, which Chefer never uses)
Known limitations
- WHP data writeback happens on clean guest shutdown; no GUI on the WHP path yet
- macOS
vzbackend still pending real-Mac validation (the bridge/pasta guest prerequisites fixed here apply to it too)
Full design + milestones: docs/DESIGN.md §6.
v0.2.0 — Windows without WSL (WHP backend)
Install
One-line installer (recommended) — detects your OS/arch, downloads the matching kit from this release, verifies its sha256, installs to ~/.chefer (or %LOCALAPPDATA%\chefer), and adds it to PATH. Open a new terminal, then chefer version.
# Linux / macOS
curl -fsSL https://raw.githubusercontent.com/TimLai666/chefer/main/scripts/install.sh | sh# Windows (PowerShell)
irm https://raw.githubusercontent.com/TimLai666/chefer/main/scripts/install.ps1 | iexPin this version with CHEFER_VERSION=v0.2.0 ($env:CHEFER_VERSION on Windows). Already installed? chefer upgrade. Or grab a chefer_v0.2.0_<target>.zip/.tar.gz from the assets below and keep the kit/ folder beside the binary.
Highlights
Chefer now runs on Windows without WSL. A new WHP backend is added as a fallback to wsl2: when WSL2 is absent, Chefer boots a bundle-embedded Linux micro-VM via the Windows Hypervisor Platform and runs the real bundle with no WSL — validated end-to-end on real hardware. (Hardware virtualization + the Windows Hypervisor Platform feature are still required; you just no longer need to install WSL or a Linux distro.)
WHP backend (new, no-WSL Windows path)
- virtio-over-MMIO virtio-blk delivers bundle/data; guest assembles the rootfs and starts services
- Data persistence across restarts (written back to the host on clean shutdown)
- Host↔guest port forwarding — TCP and UDP
- Guest outbound NAT — UDP and TCP (DNS + HTTP verified)
- Pure-Rust host networking (smoltcp gateway + hand-rolled UDP NAT);
chefer doctorpreflights the WHP API
Backend order on Windows: wsl2 (preferred when present) → whp (no-WSL fallback).
Known limitations
- WHP outbound NAT currently works in
network: sharedmode only (bridge-mode outbound, replacingpasta, is pending) - WHP data writeback happens on clean guest shutdown
- macOS
vzbackend still pending real-Mac validation; no GUI on the WHP path yet
Full design + milestones: docs/DESIGN.md §6.
v0.1.3
Changes since v0.1.2. The complete per-platform kits (CLI + all runtimes + both-arch guest-agent + pasta + Linux appliance) are built and attached automatically by the release workflow.
New features
depends_onhealth checks (Docker-style command healthcheck): a service can declare ahealthcheck(test/interval/timeout/retries/start_period);depends_onnow waits until the dependency is healthy (wait-until-ready) before starting dependents. Exhausting the retries triggers fail_fast.source: dockerfile:chefer buildbuilds the image straight from a Dockerfile — it auto-detects a container builder on the build machine (docker / podman / nerdctl / Applecontainer; OrbStack and Docker Desktop are used via theirdockerCLI), builds + saves, then ingests it through the normal pipeline. Optionalcontext:andbuild_args:. The runtime still needs nothing; not reproducible (usesource: imagepinned to a digest if you need that).- Faster startup:
- chefer-runtime caches the extracted bundle keyed on the payload sha256 — repeat launches skip extraction/verification entirely.
- guest-agent rootfs assembly decompresses layers in parallel (still applied strictly in order).
- Root backends (WSL2 / macOS VM / native-root) now use overlayfs: each layer becomes a content-addressed read-only lowerdir (shared/deduped across services and images) with a per-run writable upper on top — no merge-copy, instant mount, shared layers. Rootless native Linux keeps the merged path.
Improvements & fixes
- Fully English-facing: all CLI / runtime / validation / error output, plus the
chefer initscaffold and the exampleappcipe.ymlfiles, are now English (code comments and design docs are unchanged). - Error-message audit: registry failures are now distinguished (wrong name 404 / private 401-403 / Docker Hub rate limit 429 / network);
deny_unknown_fields(a misspelled key likeportinstead ofportsis now a clear error rather than silently ignored); healthcheck failure reasons (command-not-found / timeout / could-not-enter-namespace);--zstd-levelrange check. - README documents GPU/NPU, WSL2/Hyper-V, and per-platform limits (GPU is only feasible on native Linux and WSL2).
Upgrade
Already installed? chefer upgrade (replaces the binary and the whole kit together).
The v0.1.2 behavior change (default network
shared→bridge) still applies; if you rely on undeclared ports being reachable from the host, setnetwork: sharedin appcipe.yml.
v0.1.2
自 v0.1.1 起的變更。各平台完整 kit(CLI + 全部 runtime + 兩架構 guest-agent + pasta + Linux appliance)由 release workflow 自動建置並附加於本 release。
主要功能
- 網路隔離,預設改為
bridge:省略network:時 app 取得自己的 netns,只有宣告的ports:對外、未宣告的 port 對 host 隔離,並透過內建pasta提供出網 NAT(對齊 Docker 預設)。network: internal=同上但無對外網路;network: shared=回到舊的共享 host 網路行為。已於原生 Linux(CI,amd64+arm64 rootless)與實機 WSL2 驗證internal隔離與bridge出網。 - 直接從 registry 拉 image(類似 Docker Compose):
image: redis:7.2-alpine,chefer build會匿名拉取公開 image,免docker save。禁用latest/未標記——必須釘 tag 或@sha256digest 以利可重現建置。 - app 級
console: auto | shown | hidden:控制共用主控台(彙整日誌 + Ctrl+C 的終端視窗)顯示。auto(預設)=有 terminal/both 顯示、只有 gui 隱藏、全無介面顯示;hidden限 app 另有 gui 或 terminal 可關閉。Windows 雙擊啟動且獨佔該 console 時才實際隱藏。
修正
- 多層 image 拉取:依
diff_ids重排平行下載回來的 layer(oci-client 下載完成順序不定),修正多層 image(如 redis)的組裝。
文件
- macOS GUI 架構設計(virtio-gpu + cage compositor)、Intel/Apple Silicon 對應。
- Roadmap 新增 GPU passthrough / CUDA 計算項目(現況不支援;native Linux 與 WSL2 可行,macOS VZ 結構性不行)。
升級
已安裝者可 chefer upgrade(會一併替換 binary 與整個 kit)。
⚠️ 行為變更:預設網路模式由shared改為bridge。原本依賴「未宣告的 port 也能從 host 連到」的 app 請在 appcipe.yml 顯式寫network: shared後重新打包。
v0.1.1
Patch release. Per-platform kits are attached by CI shortly after publish.
Fixes
- Closing a GUI/terminal app now stops the whole app. An interface service (
interface_modegui/terminal/both) exiting — e.g. closing the window — now tears down the rest (previously a background service like redis lingered, held its port, and blocked restart). Anoneservice exiting 0 is still treated as a finished background/one-shot task. - One-line installer hardened for reinstall/repair (works over a broken install, replaces a running binary on Windows, post-install smoke test, PATH-shadow warning).
- Dependency security updates — patched several RustSec advisories (
bytes,quinn-proto,rustls-webpki,tracing-subscriber).
CI / quality
- Workflows moved to Node 24 (
checkout@v5); enforced lint (cargo fmt --check+clippy -D warnings); addedcargo audit, CodeQL, and Dependabot; README status badges.
Examples & docs
- New PySide6 + redis GUI demo (
examples/pyside-redis). - Documented the versioning rules and expanded the Roadmap: host-isolated internal network + opt-in port exposure, Windows-without-WSL (WHP micro-VM), and faster app startup. Honest note: v1's internal network is not yet host-isolated.
Install / upgrade:
curl -fsSL https://raw.githubusercontent.com/TimLai666/chefer/main/scripts/install.sh | sh # Linux/macOS
irm https://raw.githubusercontent.com/TimLai666/chefer/main/scripts/install.ps1 | iex # Windows
Already installed? chefer upgrade.
v0.1.0 — first release
First public release of Chefer — package multiple Docker/OCI images (described by an appcipe.yml) into a single standalone executable that runs without Docker or any container engine.
Install (developers, to package apps)
# Linux / macOS
curl -fsSL https://raw.githubusercontent.com/TimLai666/chefer/main/scripts/install.sh | sh# Windows (PowerShell)
irm https://raw.githubusercontent.com/TimLai666/chefer/main/scripts/install.ps1 | iexThen chefer version; update later with chefer upgrade. Running a packaged app needs nothing installed.
Platform status
- Linux (
namespaces, rootless): verified in CI (amd64 + arm64), incl. X11/Wayland GUI. - Windows (
wsl2): verified on a real machine — data persistence, host↔guest TCP and UDP port mapping, WSLg GUI,fail_fast. Requires WSL2. - macOS (
vz): packaging works and the Linux guest path is QEMU-verified; the actual Virtualization.framework boot still needs validation on physical Apple Silicon, so thevzbackend reports itself unavailable until then.
Highlights
- Single-file packaging from
docker save/ OCI archives, multi-arch auto-resolved byplatform. - Opt-in persistence (
persist_path), host port mapping (TCP/UDP),interface_mode: gui,crash: fail_fast,old_namesdata migration. - Official
chown/gosuimages (redis/postgres) run as-is on the root backends (WSL2 / macOS VM / native-root). chefer inspectshows the chefer version that packed an app;chefer selfrmremoves Chefer itself.
See the README and Roadmap. Per-platform kits are attached to this release by CI shortly after publish.