Repository navigation
What's Changed
- fix(mcp): constrain incompatible SDK versions by @Retengart in #277
- fix(controller): stop leaking test tempdirs (closes #273) by @WaylandYang in #274
- packaging: add Arch forkd-bin recipe by @Retengart in #276
- chore(ci): move actions to the Node 24 runtime by @WaylandYang in #279
- fix(controller): persist per_child_netns across workspace resume by @jrimmer in #283
- fix(cli): include size + extras in rootfs cache key by @jrimmer in #280
- fix(agent): use container PATH from /etc/environment for subprocess calls by @jrimmer in #292
- fix(controller): bound netns allocator to provisioned namespaces by @jrimmer in #282
- fix(vmm): force clocksource=kvm-clock to prevent stale TSC after snapshot restore by @jrimmer in #289
- fix(controller): serialize registry persistence by @light-merlin-dark in #303
- feat(agent): add stream action for interactive subprocess sessions by @jrimmer in #293
- fix(rootfs): use sparse ext4 files for rootfs images by @jrimmer in #294
- fix(controller): serialize concurrent spawns to avoid tap collision by @jrimmer in #281
- fix(controller): reopen audit log on SIGHUP by @WaylandYang in #308
- ci: establish dev-to-main branch flow by @WaylandYang in #309
- fix(vmm): best-effort guest clock sync after snapshot restore (Option B) by @jrimmer in #300
- fix(controller): run Registry::reconcile under a single lock by @AmirF194 in #312
- fix(vmm): restore-path resilience — configurable timeout, per-VM partial-failure reporting, pre-restore orphan detection by @jrimmer in #302
- fix(controller): kill orphaned Firecracker processes on startup by @jrimmer in #299
- fix(snapshot): repair ext4 rootfs before boot to prevent re-snapshot corruption by @jrimmer in #295
- fix(vmm): reap the Firecracker child on every failed boot by @jrimmer in #315
- fix(cli): gate bakes on free space, and always remove the staging dir by @jrimmer in #316
- fix(cli): sweep every rootfs .prev backup on re-bake by @jrimmer in #314
- fix(vmm): use the real FICLONE ioctl number by @WaylandYang in #322
- docs: add v0.6 architecture RFC by @WaylandYang in #323
- feat(core): v0.6 master/node in one binary, with the four tiers measured by @WaylandYang in #324
- feat(core)!: exec, branch, snapshot tags, netns isolation, auth — and remove forkd-controller by @WaylandYang in #328
- feat(core): serve the control plane over mTLS, both directions by @WaylandYang in #329
- docs(security): say which isolation boundary you actually get by @WaylandYang in #332
- deps(sdk)!: require Node 20 and clear every dependency alert by @WaylandYang in #331
- feat(core)!: require a sandbox's own token, and make a pool mean something by @WaylandYang in #333
- Revert "docs(contributing): say which backend an issue is about" by @WaylandYang in #334
- docs(contributing): say which backend an issue is about by @WaylandYang in #335
- feat(node): expose a sandbox through a gateway that checks its token by @WaylandYang in #336
- fix(gateway): rotate a token without rebinding the socket by @WaylandYang in #337
- feat(master): a web panel, and a join command that is not a 404 by @WaylandYang in #338
- fix(master): enforce max_sandboxes, and stop listing rows to count them by @WaylandYang in #339
- feat(master): GET /metrics, so a load test has something to read by @WaylandYang in #340
- test(cli): stop the rootfs sweep tests asking the host about pid 1000 by @WaylandYang in #341
- bench(fleet): a load test that drives the whole fleet, not one host by @WaylandYang in #342
- feat(fleet): one script to stand a fleet up, and three unit fixes it found by @WaylandYang in #343
- fix(node): let a node refuse work it has no memory for by @WaylandYang in #345
- fix(fleet): the deploy could not address a real fleet by @WaylandYang in #346
- feat: let the master connect to a node, instead of the node dialing in by @WaylandYang in #347
- Wake on traffic, frozen reclaim, snapshot compression by @WaylandYang in #348
- Hot reclaim, warm templates, snapshot prefetch, compressed swap by @WaylandYang in #350
- Snapshot tier releases its network namespace by @WaylandYang in #351
- fix(node): raise the open-file limit; a node stopped near 1,000 sandboxes by @WaylandYang in #352
- docs: a short README for v0.6, with three rounds of fleet measurements by @WaylandYang in #349
- feat(master): a console with its own history, at /console by @WaylandYang in #353
- feat: fork a tag on any node that can restore it by @WaylandYang in #354
- chore: rename forkd to Sandstorm by @WaylandYang in #355
- docs: a Sandstorm logo by @WaylandYang in #356
- docs: give the logo its own background by @WaylandYang in #357
- fix: a node under traffic makes room, keeps its permits and swap, and stops answering 502 by @WaylandYang in #360
- fix: spare sandboxes that are answering, evict by demand, and refuse a wake that cannot start in 2 s by @WaylandYang in #361
- docs: the README on the 2026-10-28 round, with other runtimes compared by @WaylandYang in #358
- refactor(node): runsc behind a Backend trait by @WaylandYang in #368
- docs: the logo in graphite, and on the panel, console and favicon by @WaylandYang in #371
- feat(node): a Firecracker backend, behind --backend firecracker by @WaylandYang in #370
- bench(fleet): mixed can retry a 503 the way its retry-after asks by @WaylandYang in #363
- feat(node): the gateway streams, and one host port reaches every port of a sandbox by @WaylandYang in #365
- chore: drop the Firecracker-era (v0.5) code from the tree by @WaylandYang in #362
- docs: record the v0.6 design as ADRs and drop the DESIGN documents by @WaylandYang in #364
- feat: the official E2B SDKs work against Sandstorm by @WaylandYang in #366
- fix: preserve sandbox data when detach archiving fails by @Floating-Y in #369
- fix: publish checkpoints only after successful validation by @Floating-Y in #367
- feat(console): one console at /, with Add a node and the Sandstorm mark by @WaylandYang in #359
- fix(node): count a wake as waiting only when it has to queue by @WaylandYang in #374
- docs: the lead figure as four panels, and kept in memory by heap measured both ways by @WaylandYang in #372
- fix: make sandbox batch creation atomic by @Floating-Y in #373
- feat(console): the tier flow as four rows, with each rate on its line by @WaylandYang in #375
- perf(node): netns pool, faster warm starts and in-place branch by @WaylandYang in #376
- Host groups: what their hosts are, following upgrades, placement across them, and the console by group by @WaylandYang in #378
- feat(console): build a snapshot in a dialog with a terminal, and name the backend by @WaylandYang in #379
- feat(console): rewrite the console in TypeScript and React by @WaylandYang in #382
- fix(release): stage only sandstormd by @WaylandYang in #383
- fix: what a bare-metal comparison turned up (gateway waits, Firecracker cold start, port overlap, guest hostname) by @WaylandYang in #380
- bench(baremetal): Sandstorm against Kata, microsandbox, CubeSandbox, gVisor and containers on one KVM machine by @WaylandYang in #384
- fix(gateway): wake a sandbox on disk again by @WaylandYang in #385
- feat(console): choose a node's backend, and switch an empty one by @WaylandYang in #386
- fix(node): count a sandbox still filling its memory against the floor by @WaylandYang in #387
- docs: a shorter README, this round's numbers, and the fleet's 2026-10-30 results by @WaylandYang in #388
- fix(node): protect active sandboxes from demotion and reclaim by @Floating-Y in #381
- fix: enforce whole-batch capacity for pool scheduling by @Floating-Y in #377
- docs(readme): 中文首段 by @WaylandYang in #389
- docs(readme): one paragraph to open with, in both languages by @WaylandYang in #390
- perf(firecracker): no serial console on a PVM host by @WaylandYang in #397
- docs(readme): one figure first, with cold starts and PVM by @WaylandYang in #395
- docs(readme): link the projects named under the figure by @WaylandYang in #398
- fix: include installer script in Docker build context by @Floating-Y in #396
- fix(sdk): forward sandbox tokens in TypeScript helpers by @Floating-Y in #391
- fix(mcp): pass per-call sandbox tokens to guest tools by @Floating-Y in #392
- fix(node): preserve parent checkpoint after failed branch restore by @Floating-Y in #394
- fix: preserve CA identity across master restarts by @Floating-Y in #393
- fix: send replies without waiting on Nagle by @WaylandYang in #400
- docs(readme): a neutral license badge by @WaylandYang in #399
- fix: a wake of a sandbox already hot makes no room by @WaylandYang in #401
- docs(readme): order the badges by @WaylandYang in #402
- docs(readme): split How it works into tiers and key features by @WaylandYang in #403
- docs(readme): retitle the lifecycle section and reword the Chinese by @WaylandYang in #404
- fix: the current E2B SDKs, and creates that follow a kill by @WaylandYang in #405
- docs(readme): key features that end their lines by @WaylandYang in #406
- docs: correct security policy for current runtime by @Floating-Y in #407
- chore: remove what the v0.5 CLI left behind, and rewrite the API docs by @WaylandYang in #408
- feat(sdk-python)!: drive Sandbox through the master's API by @WaylandYang in #410
- fix(node): remove a gVisor container that failed to start by @WaylandYang in #411
- docs(sdk-python): a program that fails to load now raises by @WaylandYang in #412
- docs: a tidier tiers table, and what was done for each backend by @WaylandYang in #413
- fix(firecracker): let a restored guest through before setting its clock by @WaylandYang in #414
- bench: latency under gVisor, KVM and PVM on one build by @WaylandYang in #409
- docs: Firecracker has run on KVM now by @WaylandYang in #415
- fix(sdk-python): reach a master at its default address, ahead of v0.6.0 by @WaylandYang in #420
- feat(node): start a batch's creates side by side by @WaylandYang in #416
- fix(node): a warm image does not outlive the host files under it by @WaylandYang in #417
- fix(node): a sandbox that dies on waking keeps its snapshot by @WaylandYang in #418
- fix(node): a sandbox waiting to retry costs no polls by @WaylandYang in #422
- test(node): write the fake runsc from a child, so its exec cannot fail by @WaylandYang in #425
- fix(node): bind a port that was only just let go by @WaylandYang in #426
- feat(egress): let a sandbox out, and say how far by @WaylandYang in #419
- feat(templates): make a template from a container image by @WaylandYang in #424
- docs(readme): reword the note under the latency table by @WaylandYang in #427
- fix(sdk)!: make every client work with a v0.6 master, and let them verify it by name by @WaylandYang in #421
- docs(contributing): name feature branches feature/ by @WaylandYang in #428
- ci: scan Rust with CodeQL only when a PR touches it by @WaylandYang in #423
- test(node): give a wake test the room it asks for by @WaylandYang in #429
- fix(proto): do not size an egress list from the request by @WaylandYang in #430
- fix(agent): listen on the guest's address, not every interface by @WaylandYang in #431
- docs(readme): a shorter quick start that reaches a sandbox, and a true status by @WaylandYang in #432
- chore(release): prepare v0.6.0 by @WaylandYang in #433
- fix(firecracker): carry on through an interrupted API read by @WaylandYang in #435
- docs(changelog): date v0.6.0 by @WaylandYang in #436
- Release v0.6.0 by @WaylandYang in #437
New Contributors
- @Retengart made their first contribution in #277
- @jrimmer made their first contribution in #283
- @light-merlin-dark made their first contribution in #303
- @AmirF194 made their first contribution in #312
- @Floating-Y made their first contribution in #369
Full Changelog: v0.5.3...v0.6.0