| Workspace isolation — one kernel per workspace, snapshot and restore |
Firecracker microVMs under the jailer, on bare-metal hosts with local NVMe |
Open source |
Cloud Hypervisor; QEMU with microvm machine type; gVisor; hardened containers (rejected in ADR-04) |
It is the only widely deployed option that combines kernel-level isolation with the sub-second snapshot and restore that ADR-01 and ADR-03 depend on |
ADR-04 |
| Host control — microVM lifecycle, resource caps, drain, liveness |
A purpose-built host agent, one per host, holding no authoritative workspace state |
This design |
Kubernetes with a VM runtime class; Nomad; a systemd-based supervisor |
The host agent is where placement, snapshotting, caps, the vsock channel and the egress point all meet, and it must be able to keep workspaces alive with the control plane unreachable |
ADR-12 |
| Workspace filesystem — authoritative chain, local overlay, lazy fetch |
Content-addressed blocks in an S3-compatible store, presented through a userspace block device with an NVMe-backed copy-on-write overlay |
Open source |
Ceph RBD per workspace; ZFS send/receive between hosts; overlayfs over a network filesystem |
It makes resume latency independent of disk size and removes any recovery procedure tied to a particular host |
ADR-02 |
| Snapshot and prebuild storage |
MinIO or Ceph RGW on erasure-coded storage nodes, region-local, tenant-scoped keys, lifecycle to a cold tier |
Open source |
A hyperscaler object store; a clustered filesystem; direct-attached storage with application-level replication |
Snapshots are the workspace, so the store must be durable, cheap per terabyte and region-pinned by configuration rather than by promise |
ADR-14 |
| Control plane — state machine, policy, placement, prebuild index |
Kubernetes with custom resources and controllers, PostgreSQL with synchronous replicas for records |
Open source |
A bespoke service on etcd; Temporal for the state machine; a managed control plane on a hyperscaler |
The reconciliation model fits a workspace lifecycle well, and the operational knowledge is commodity; the records live in PostgreSQL because RPO 0 is a database problem, not a controller problem |
ADR-01 |
| Admission and shedding |
An admission controller in front of placement, with per-tenant and per-principal ceilings and class-aware rejection |
This design |
Queue-and-wait with backpressure; cluster autoscaler alone; per-tenant rate limits at the edge |
A refusal an orchestrator can retry is worth more than a queue it cannot see, and the choice of who to refuse first is a product decision rather than a scheduling one |
ADR-08 |
| Edge and session transport |
Envoy, stateless with respect to workspace identity, terminating editor, SSH and agent-stream connections |
Open source |
HAProxy; NGINX; a cloud load balancer with a custom session layer |
Connections are long-lived and must survive gateway loss and client network changes, and the resume-on-connect behaviour needs a programmable filter chain |
ADR-09 |
| Identity — principals, seats, workspace workload identity |
Tenant OIDC federation with SCIM for seats; SPIFFE-style workload identity issued per workspace |
Open source |
Platform-local accounts; long-lived service accounts per tenant; mTLS certificates issued per host |
The platform must never be the source of truth for people, and it must be able to attest what a workspace is without the workspace being able to assert it |
ADR-05 |
| Credential brokerage |
OpenBao or Vault behind a vsock-fronted broker, minting forge installation tokens scoped to one repository for fifteen minutes |
Open source |
Injected environment variables; a credential helper with a long-lived token; full proxying of privileged operations (rejected in ADR-05) |
Anything resident in the workspace is exported, so the only defence available is scope, lifetime and an audit record |
ADR-05 |
| Egress policy and package mediation |
Per-workspace eBPF filtering plus an Envoy forward proxy, with a Harbor or Nexus pull-through registry mirror |
Open source |
Host firewall rules per namespace; a service mesh sidecar inside the guest; unmediated egress with flow logging |
Enforcement has to sit on the host rather than in a guest the user controls, and a cached mirror is what makes a strict default survivable |
ADR-06 |
| Image and artefact registry |
Harbor, mirrored per region, with digest-pinned base images and signed platform artefacts |
Open source |
A hyperscaler registry; a plain OCI distribution deployment; no mirror, pulling from upstream |
No workspace start may depend on an upstream public registry being reachable, and reproducibility requires a digest rather than a tag |
ADR-07 |
| Lifecycle events, metering and evidence |
Kafka for the durable lifecycle stream, OpenTelemetry collection into Prometheus and a log store, append-only audit storage |
Open source |
A hyperscaler event bus; direct database writes; metrics-only with no event stream |
Billing, audit and tenant automation all read the same ordered stream, and the audit half has to be immutable for five years |
ADR-12 |
| Prebuild execution |
Ordinary workspaces driven by the platform's own API from Tekton or Argo Workflows, snapshotted after post-create |
Open source |
A separate container-based build farm; buildkit with cache mounts; prebuilding inside CI |
A prebuild that is produced by a different mechanism from a workspace is a prebuild that differs from a workspace |
ADR-07 |