Download Latest Version v0.5.3 source code.zip (1.6 MB)
Email in envelope

Get an email when there's a new version of forkd

Home / v0.5.0
Name Modified Size InfoDownloads / Week
Parent folder
forkd-v0.5.0-x86_64-linux.tar.gz 2026-06-04 7.0 MB
SHA256SUMS 2026-06-04 99 Bytes
README.md 2026-06-04 11.3 kB
v0.5.0 -- diff-snapshot chains + v0.4 live BRANCH source code.tar.gz 2026-06-04 1.3 MB
v0.5.0 -- diff-snapshot chains + v0.4 live BRANCH source code.zip 2026-06-04 1.4 MB
Totals: 5 Items   9.7 MB 0

v0.5.0 ships v0.5 (diff-snapshot chains) and folds in v0.4 (live-fork BRANCH) — the first formal release since v0.3.4.

v0.5: diff-snapshot chains

Stack snapshots into a chain — base → +numpy → +pandas → +sklearn — instead of one flat snapshot per dependency set. The daemon walks the chain at spawn time and assembles memory in one pass.

:::bash
forkd snapshot-diff --from py-base   --tag py-numpy   --exec "pip install numpy==2.0.2"
forkd snapshot-diff --from py-numpy  --tag py-pandas  --exec "pip install pandas==2.2.3"
forkd fork --tag py-pandas -n 1               # daemon walks the chain transparently

forkd snapshot-info py-pandas                 # depth, parent, ancestors, dependents
forkd rmi py-numpy                            # 409 + actionable msg if children
forkd rmi py-numpy --cascade                  # subtree delete
forkd snapshot-compact --from py-pandas --to py-pandas-flat
forkd pack --tag py-pandas --out chain.tar.zst # v2 manifest, bundles every ancestor
forkd unpack chain.tar.zst                    # one snapshot dir per chain link

Phase 5 bench (RESULTS-v0.5.md)

chain head depth spawn p50 per-link tax
base (flat) 0 59 ms
+numpy 1 751 ms +692 ms
+pandas 2 1 222 ms +471 ms
+sklearn 3 1 668 ms +446 ms
flat-equivalent 1 746 ms

Correctness: 90/90 (100%) probe passes across L1/L2/L3 + flat-equivalent. The design's vmstate-drift question is empirically closed.

The ~460 ms per-link tax tracks SHA-256 of the base (1.1 GiB/s) — the mmap-once incremental verify optimization is queued for v0.6.

v0.4: live-fork BRANCH (also captured here)

Sub-50 ms source-pause BRANCH via UFFD_WP + memfd_create. 56 ms p50 / 64 ms p90 on a 1.5 GiB python-numpy source — 3.6× faster than v0.3 Diff at p50 and disk-independent. With wait: false the caller returns in ~70 ms while the background memory copy completes asynchronously (200× RT improvement for fire-and-forget BRANCH).

Reachable via mode: "live" / wait: false on REST, --live / --no-wait on CLI, and the Python / TypeScript / MCP SDKs. forkd doctor probes the kernel and FC prerequisites.

Requires Linux ≥ 5.7, vm.unprivileged_userfaultfd=1 (or CAP_SYS_PTRACE), and the vendored Firecracker fork (33-line mem_backend.shared patch, upstream proposal at #5912).

Real bugs caught during ship-out

Two bugs the test suite hadn't caught — both surfaced by the Phase 5 bench / Phase 6 E2E fixture:

  • #217: Phase 2a chain-assembled memory.bin was unlinked by restore_many_with's startup sweep before FC's /snapshot/load could open it. Symptom: every spawn from a chained snapshot returned HTTP 500. Fixed; regression test work_dir_sweep_preserves_chainstage_subdirectory added.
  • #219: Pre-Phase-4 forkd rmi silently orphaned chained children. Now 409 with actionable message + --cascade / --force carve-outs.

What's in this tag

  • forkd snapshot-diff (v0.5 Phase 2b) — build chain layers
  • forkd snapshot-info (v0.5 Phase 4) — inspect chain shape + dependents
  • forkd snapshot-compact (v0.5 Phase 4) — flatten a chain head
  • forkd rmi --cascade | --force (v0.5 Phase 4) — chain-aware delete
  • forkd pack / unpack manifest v2 (v0.5 Phase 3) — chain-aware bundles
  • forkd doctor v0.4 checks (uffd_wp + memfd_create)
  • mode: "live" BRANCH (v0.4) via REST / CLI / SDKs
  • scripts/dev/v05-e2e.sh — 15-assertion smoke test for the whole v0.5 surface

Reproduce

End-to-end on a Linux + KVM host:

:::bash
git checkout v0.5.0
cargo build --release -p forkd-cli -p forkd-controller
sudo target/release/forkd-controller serve --bind 127.0.0.1:8889 ...
FORKD_BIN=target/release/forkd FORKD_BASE_TAG=demo-pyt ./scripts/dev/v05-e2e.sh

Full v0.5 phase-by-phase notes: see CHANGELOG.md (github.com) and the v0.5 tracking issue #216.

What's Changed

Full Changelog: https://github.com/deeplethe/forkd/compare/v0.3.4...v0.5.0

Source: README.md, updated 2026-06-04