Building a parent snapshot — Docker pull → rootfs build → boot + warmup — takes 2–3 minutes. Once built, the snapshot is a portable artifact: pack it into aDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/deeplethe/forkd/llms.txt
Use this file to discover all available pages before exploring further.
.forkd-snapshot.tar.zst bundle, upload it to any S3-compatible storage, and pull it on any forkd host in seconds. No Docker round-trip, no re-importing numpy. The Snapshot Hub is intentionally simple: a registry.json file in the main repo maps <owner>/<name> to a download URL + SHA-256, and GitHub Releases provides free, unlimited public asset hosting.
Packing a snapshot
forkd pack compresses a local snapshot tag into a single .tar.zst bundle with a TOML manifest that contains per-file SHA-256 digests:
coding-agent-fork pack that carries a 50 MiB synthetic binary blob of random bytes compresses to 67.6 MiB — zstd cannot compress random data.
Pack flags
| Flag | Description |
|---|---|
--tag | Local snapshot tag to pack. Must exist under ~/.local/share/forkd/snapshots/<tag>/. |
--out | Output file. Default: ./<sanitized-tag>.forkd-snapshot.tar.zst. |
--description | Human-readable description recorded in manifest.toml. |
--base-image | Upstream Docker image (e.g. python:3.12-slim). Informational, for audit. |
Pack format
v1 packs (single snapshot, pre-v0.5 or flat base):forkd pack automatically detects a chain and bundles all ancestor links. See Snapshot Chains for the full format.
Pushing a snapshot
Upload a pack to any S3 or R2 bucket via a presigned PUT URL:forkd push packs the snapshot to a temp file, uploads via HTTP PUT, and removes the temp file whether the upload succeeds or fails.
Pulling a snapshot
Full URL
Short form — public registry
--hub <url> or FORKD_HUB_URL for private mirrors:
Version pinning
The public registry
The public registry is aregistry.json file at the root of deeplethe/forkd on GitHub. It maps <owner>/<name> to download URLs hosted on GitHub Releases with the tag scheme hub-<name>-v<N>.
Currently published snapshots
| Name | Description | Memory | Pack size |
|---|---|---|---|
deeplethe/python-numpy | Python 3.12 + numpy. Default fork target for README quickstart and bench scripts. | 1536 MiB | 15.8 MiB |
deeplethe/playwright-browser | Node.js + Playwright 1.50 + pre-warmed Chromium. ~56 ms fork vs ~2-3 s cold container. | 2048 MiB | 105.5 MiB |
deeplethe/postgres-fixture | PostgreSQL 16 with initdb done + postmaster pre-launched. ~10 ms fork per test. | 1024 MiB | 38.0 MiB |
deeplethe/coding-agent | Python 3.12 + git + gh CLI + pytest. SWE-bench-style parallel evals. | 1024 MiB | 15.2 MiB |
deeplethe/nodejs | Node.js 22 slim runtime preloaded. Generic JS workload base. | 512 MiB | 10.5 MiB |
deeplethe/e2b-codeinterpreter | E2B code-interpreter image (Python + Node + Jupyter + ML libs). Drop-in for E2B SDK. | 2048 MiB | 21.6 MiB |
deeplethe/jupyter-kernel | Jupyter scipy-notebook with IPython + numpy + scipy + pandas + matplotlib pre-imported. | 2048 MiB | 15.5 MiB |
deeplethe/langgraph-react | ReAct agent for the branch-and-fan-out demo (Python 3.12 + requests). | 513 MiB | 14.5 MiB |
Publishing your own snapshot
Listing local snapshots
Security model
- Integrity — every pack carries per-file SHA-256 digests in
manifest.toml.forkd pullverifies the downloaded pack’s SHA-256 against the registry entry before unpacking.forkd unpackverifies every file inside the pack against the manifest digests. - Path-traversal protection —
manifest.tomltags are validated against[A-Za-z0-9_][A-Za-z0-9._-]{0,63}before any file is extracted. A malicious bundle declaringtag = "../etc/x"is rejected at manifest-parse time. - No signing yet — the SHA-256 in
registry.jsonis integrity, not authenticity. v0.x is single-trust-domain (thedeeplethe/forkdrepo). v1.0 will add Sigstore / cosign signatures.
Chain packs (v0.5)
Whenforkd pack is invoked on a chained snapshot (one with parent_tag set in snapshot.json), it automatically produces a v2 pack that bundles every ancestor link:
forkd unpack restores all links to their respective snapshot directories and preserves the parent_tag edges so the daemon can walk the chain at spawn time:
Hub chain packs include the full base bytes — a 3-link chain with a 1.5 GiB base ships ~1.7 GiB total even though the deltas are only ~100 MB. This is a known limitation of v0.5; v0.6 will add a CAS-layered Hub that deduplicates the base across multiple
+delta tags on the server side.