Skip to content

v0.6.0

Latest

Choose a tag to compare

@github-actions github-actions released this 01 Nov 20:30
· 0 commits to dev since this release
a9702d7

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

Full Changelog: v0.5.3...v0.6.0