Skip to content

Commit e6efced

Browse files
committed
docs: rename Cartridge → Cassette throughout
1 parent f51b530 commit e6efced

2 files changed

Lines changed: 20 additions & 20 deletions

File tree

README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,9 @@ make build kernel-unpack
5959

6060
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.
6161

62-
## Cartridge Deploys — one VM, infinite versions
62+
## Cassette Deploys — one VM, infinite versions
6363

64-
> **The base VM never changes. Only the cartridge does.**
64+
> **The base VM never changes. Only the cassette does.**
6565
6666
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.
6767

@@ -132,8 +132,8 @@ What this unlocks that no other open-source platform does today:
132132
| Deploy time | Minutes (build + push + pull) | Seconds (code only, no runtime) |
133133
| Rollback | Pull previous image tag | Point to previous ext4 |
134134
| 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 |
137137
| Isolation | Shared kernel (containers) | KVM hardware per tenant |
138138

139139
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
156156

157157
**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).
158158

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).
160160

161161
## Examples
162162

site/index.html

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
<nav class="topnav">
2626
<a href="#install">install</a> ·
2727
<a href="#features">features</a> ·
28-
<a href="#cartridge">cartridge</a> ·
28+
<a href="#cassette">cassette</a> ·
2929
<a href="#numbers">numbers</a> ·
3030
<a href="#sdk">sdk</a> ·
3131
<a href="https://github.com/misaelzapata/gocracker">github</a> ·
@@ -97,8 +97,8 @@ <h2>── features ────────────────────
9797
<dt>sandbox control plane</dt>
9898
<dd><code>gocracker-sandboxd</code> — warm pools, content-addressed templates, HMAC-signed preview URLs. Python · Go · JS SDKs.</dd>
9999

100-
<dt>cartridge 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 cartridge to deploy a new version. The VM never reboots. Multiple cartridges in one running VM for instant version comparison. <a href="#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. <a href="#cassette">→ full explanation</a></dd>
102102

103103
<dt>warm runtime</dt>
104104
<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 ────────────────────
113113

114114
<hr>
115115

116-
<section id="cartridge">
117-
<h2>── cartridge deploys ─────────────────────────────────</h2>
116+
<section id="cassette">
117+
<h2>── cassette deploys ─────────────────────────────────</h2>
118118

119119
<p class="lede">Every platform today bakes code and runtime into the same container image. gocracker separates them — permanently.</p>
120120

@@ -124,14 +124,14 @@ <h2>── cartridge deploys ─────────────────
124124
→ image pull <span class="muted">(on every node)</span>
125125
→ container restart <span class="muted">(cold boot)</span>
126126

127-
<span class="muted"># gocracker cartridge:</span>
127+
<span class="muted"># gocracker cassette:</span>
128128
git push → pack code into ext4 <span class="muted">(seconds, code only)</span>
129-
→ attach cartridge <span class="muted">(warm VM, no reboot)</span>
129+
→ attach cassette <span class="muted">(warm VM, no reboot)</span>
130130
<span class="ok">live in &lt; 100 ms</span></pre>
131131

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>
133133

134-
<pre class="term"><span class="muted">console (VM snapshot, frozen) cartridge (ext4, swappable)</span>
134+
<pre class="term"><span class="muted">console (VM snapshot, frozen) cassette (ext4, swappable)</span>
135135
┌──────────────────────────┐ ┌──────────────────────────┐
136136
│ node:20-alpine │ │ app-v42.ext4 │
137137
│ + Express + all deps │ ←── │ ├── index.js │
@@ -142,19 +142,19 @@ <h2>── cartridge deploys ─────────────────
142142

143143
<dl class="feat">
144144
<dt>instant rollback</dt>
145-
<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>
146146

147147
<dt>preview environments for free</dt>
148148
<dd>Each pull request gets its own ext4. They all share the same base VM snapshot — no extra memory for the runtime.</dd>
149149

150150
<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>
152152

153153
<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>
155155

156156
<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>
158158
</dl>
159159

160160
<pre class="term"><span class="hash"># two versions, one running VM</span>
@@ -165,7 +165,7 @@ <h2>── cartridge deploys ─────────────────
165165
toolbox exec node /data/v41/app.js <span class="muted"># → v41 output</span>
166166
toolbox exec node /data/v42/app.js <span class="muted"># → v42 output — same VM, no reboot</span></pre>
167167

168-
<p class="note">To our knowledge, no other open-source microVM project exposes cartridge-style code-disk attach as a first-class API. · <a href="https://github.com/misaelzapata/gocracker/tree/main/examples/code-disk">examples</a></p>
168+
<p class="note">To our knowledge, no other open-source microVM project exposes cassette-style code-disk attach as a first-class API. · <a href="https://github.com/misaelzapata/gocracker/tree/main/examples/code-disk">examples</a></p>
169169
</section>
170170

171171
<hr>
@@ -195,7 +195,7 @@ <h2>── sdk ─────────────────────
195195

196196
client = Client(<span class="str">"http://127.0.0.1:9091"</span>)
197197

198-
<span class="hash"># cartridge deploy — swap the ext4, not the VM</span>
198+
<span class="hash"># cassette deploy — swap the ext4, not the VM</span>
199199
sb = client.create_sandbox(
200200
image=<span class="str">"node:20-alpine"</span>,
201201
network_mode=<span class="str">"none"</span>,

0 commit comments

Comments
 (0)