You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -59,9 +59,9 @@ make build kernel-unpack
59
59
60
60
That's it — alpine boots in ~80 ms (warm OCI cache), runs the command, and exits. No kernel build required: the repo ships gzipped guest kernels under [artifacts/kernels/](artifacts/kernels/) for both x86_64 and arm64. `make kernel-unpack` decompresses them in place. To build a custom kernel from source, run `make kernel-guest` (x86_64) or `make kernel-guest-arm64` (arm64) instead — that takes ~10 min the first time.
61
61
62
-
## Cartridge Deploys — one VM, infinite versions
62
+
## Cassette Deploys — one VM, infinite versions
63
63
64
-
> **The base VM never changes. Only the cartridge does.**
64
+
> **The base VM never changes. Only the cassette does.**
65
65
66
66
Every platform that runs user code faces the same problem: how do you deploy a new version without rebooting every running instance? The standard answer is containers (rebuild the image, restart the process) or blue/green deploys (spin up a new fleet, cut traffic over). Both require teardown and cold boot.
67
67
@@ -132,8 +132,8 @@ What this unlocks that no other open-source platform does today:
132
132
| Deploy time | Minutes (build + push + pull) | Seconds (code only, no runtime) |
133
133
| Rollback | Pull previous image tag | Point to previous ext4 |
134
134
| Preview environments | Full container per PR | One ext4 per PR, shared base VM |
135
-
| A/B testing | Two container fleets | Two VMs, same snapshot, different cartridge|
136
-
| AI code execution | Docker per session (heavy) | One cartridge per conversation, warm VM |
135
+
| A/B testing | Two container fleets | Two VMs, same snapshot, different cassette|
136
+
| AI code execution | Docker per session (heavy) | One cassette per conversation, warm VM |
The base snapshot is built **once** when you define your stack (e.g. `node:20-alpine` + Express + your deps). Every deploy after that only touches the code disk. Runtime cold-start is eliminated because the snapshot is already warm in the pool.
@@ -156,7 +156,7 @@ The base snapshot is built **once** when you define your stack (e.g. `node:20-al
156
156
157
157
**Sandbox control plane** -- [gocracker-sandboxd](sandboxes/cmd/gocracker-sandboxd/) — HTTP daemon that wraps the runtime with warm pools (`~1.5 ms p95 lease`), content-addressed templates (`~80 µs cache hit`), HMAC-signed preview URLs, and Python / Go / JS SDKs with typed errors and context-manager sandbox lifecycle. Per-sandbox Firecracker-style UDS at `<state-dir>/sandboxes/<id>.sock` speaks directly to a baked-in toolbox agent on vsock 10023 (framed exec + files + git + secrets + `SetNetwork` re-IP). See the [Sandboxd overview](#sandboxd-sandbox-control-plane).
158
158
159
-
**Cartridge deploys** -- Separate ext4 disk carries application code, mounted inside the guest at boot via `gc.code_disk=` kernel cmdline. The base VM snapshot never changes; swap the cartridge to deploy a new version. Attach multiple cartridges to one running VM for side-by-side version comparison without rebooting. See [Cartridge Deploys](#cartridge-deploys--one-vm-infinite-versions).
159
+
**Cassette deploys** -- Separate ext4 disk carries application code, mounted inside the guest at boot via `gc.code_disk=` kernel cmdline. The base VM snapshot never changes; swap the cassette to deploy a new version. Attach multiple cassettes to one running VM for side-by-side version comparison without rebooting. See [Cassette Deploys](#cassette-deploys--one-vm-infinite-versions).
<dd>Application code lives on a separate ext4 disk — not baked into the rootfs. The base VM (runtime + deps) is a frozen snapshot. Swap the cartridge to deploy a new version. The VM never reboots. Multiple cartridges in one running VM for instant version comparison. <ahref="#cartridge">→ full explanation</a></dd>
100
+
<dt>cassette deploys</dt>
101
+
<dd>Application code lives on a separate ext4 disk — not baked into the rootfs. The base VM (runtime + deps) is a frozen snapshot. Swap the cassette to deploy a new version. The VM never reboots. Multiple cassettes in one running VM for instant version comparison. <ahref="#cassette">→ full explanation</a></dd>
102
102
103
103
<dt>warm runtime</dt>
104
104
<dd><code>base-node-warm</code> template pre-loads V8 inside the snapshot. Node.js code eval goes from ~50 ms cold to ~5–10 ms warm, no reboot.</dd>
@@ -113,8 +113,8 @@ <h2>── features ────────────────────
git push → pack code into ext4 <spanclass="muted">(seconds, code only)</span>
129
-
→ attach cartridge<spanclass="muted">(warm VM, no reboot)</span>
129
+
→ attach cassette<spanclass="muted">(warm VM, no reboot)</span>
130
130
→ <spanclass="ok">live in < 100 ms</span></pre>
131
131
132
-
<p>The base VM — kernel, runtime, all dependencies — is a <strong>frozen snapshot built once</strong>. It never changes across deploys. Only the cartridge (an ext4 disk carrying your application code) is swapped. This is the same separation Vercel achieves with bundles and V8 isolates, but with real KVM hardware isolation per tenant.</p>
132
+
<p>The base VM — kernel, runtime, all dependencies — is a <strong>frozen snapshot built once</strong>. It never changes across deploys. Only the cassette (an ext4 disk carrying your application code) is swapped. This is the same separation Vercel achieves with bundles and V8 isolates, but with real KVM hardware isolation per tenant.</p>
<dd>Point to the previous cartridge. No image rebuild, no container restart. The VM is already running.</dd>
145
+
<dd>Point to the previous cassette. No image rebuild, no container restart. The VM is already running.</dd>
146
146
147
147
<dt>preview environments for free</dt>
148
148
<dd>Each pull request gets its own ext4. They all share the same base VM snapshot — no extra memory for the runtime.</dd>
149
149
150
150
<dt>A/B deploys</dt>
151
-
<dd>Two VMs, same snapshot, two different cartridges. Route traffic split between them. Swap one cartridge to promote the winner.</dd>
151
+
<dd>Two VMs, same snapshot, two different cassettes. Route traffic split between them. Swap one cassette to promote the winner.</dd>
152
152
153
153
<dt>AI code execution</dt>
154
-
<dd>AI agents (Claude, Copilot, GPT) that execute code don't need to rebuild a container per session. One cartridge per conversation — the runtime VM is always warm. Swap in the user's code, run it, tear down the cartridge. No Docker, no heavy orchestration.</dd>
154
+
<dd>AI agents (Claude, Copilot, GPT) that execute code don't need to rebuild a container per session. One cassette per conversation — the runtime VM is always warm. Swap in the user's code, run it, tear down the cassette. No Docker, no heavy orchestration.</dd>
155
155
156
156
<dt>multiple versions, one VM</dt>
157
-
<dd>Attach several cartridges simultaneously. Exec into any version without rebooting — useful for migration testing and benchmarking across versions.</dd>
157
+
<dd>Attach several cassettes simultaneously. Exec into any version without rebooting — useful for migration testing and benchmarking across versions.</dd>
158
158
</dl>
159
159
160
160
<preclass="term"><spanclass="hash"># two versions, one running VM</span>
toolbox exec node /data/v42/app.js <spanclass="muted"># → v42 output — same VM, no reboot</span></pre>
167
167
168
-
<pclass="note">To our knowledge, no other open-source microVM project exposes cartridge-style code-disk attach as a first-class API. · <ahref="https://github.com/misaelzapata/gocracker/tree/main/examples/code-disk">examples</a></p>
168
+
<pclass="note">To our knowledge, no other open-source microVM project exposes cassette-style code-disk attach as a first-class API. · <ahref="https://github.com/misaelzapata/gocracker/tree/main/examples/code-disk">examples</a></p>
0 commit comments