Status
Every row of this page is a line of internal/features in spin, and a test there resolves its proof against the tree: a procedure the control plane serves, a command the CLI has, or a test the end-to-end lane runs on real machines. A row that says built names one; a row that says not built is an item of docs/ROADMAP.md. The page is written by task reference from spin features at spin 8eee32b9d, and cannot say a feature the binary does not.
Workspaces
Section titled “Workspaces”| Feature | Proof |
|---|---|
| A machine per workspace: KVM, its own kernel, root, a persistent disk, SSH | TestAWorkspaceBootsARealGuest, an end-to-end test |
| Create, start, stop and delete | WorkspaceService/CreateWorkspace |
| A trash: a deleted workspace stays whole, for its owner to undelete, until its days are up | TestAWorkspaceWhoseDaysInTheTrashAreUpIsErasedFromItsHost, an end-to-end test |
| Idle suspend, with a question before it that a keep answers | TestAWorkspaceIsAskedBeforeItsSuspensionAndAKeepAnswersIt, an end-to-end test |
| A workspace that ran as long as the installation allows is suspended | TestAWorkspaceThatRanForAsLongAsAllowedIsSuspended, an end-to-end test |
| A process inside holds its workspace awake while it lives | TestAProcessHoldsItsWorkspaceAwakeWhileItLives, an end-to-end test |
| Suspend with the processes where they are; a start resumes them | TestAWorkspaceNobodyUsesIsSuspendedAndAStartResumesIt, an end-to-end test |
| Cores and memory lent while the host has them, and taken back | TestABusyWorkspaceIsLentCoresAndGivesThemBack, an end-to-end test |
| A grant of cores and memory of its own, for a while | TestAGrantWhoseTimeIsUpIsGivenBackToTheMachine, an end-to-end test |
| Move a running workspace to another host, its processes as they are | TestHostsAMoveTakesARunningWorkspaceToAnotherHost, an end-to-end test |
| Clone a workspace: its disk, team, project, size, policies and environment, in one | TestACloneHoldsWhatItsSourceWroteAndItsShape, an end-to-end test |
| Recover a workspace whose host is gone, at a cost its owner accepts | TestHostsAWorkspaceWhoseHostIsGoneIsRecoveredOnAnother, an end-to-end test |
| A workspace outlives its runner | TestAWorkspaceOutlivesItsRunner, an end-to-end test |
| Quarantine, by an administrator | WorkspaceService/QuarantineWorkspace |
| Why a workspace is not behaving: status, console, history | spin workspace status |
| The owner’s shell, environment, editor settings, Taskfile and dotfiles reach the guest | TestAWorkspacesOwnEnvironmentIsInItsOwnersLoginShell, an end-to-end test |
| Reset a disk to what it was created from | spin workspace reset |
| Claude Code and Codex on every workspace’s PATH, at the versions the release pins, with their own defaults | TestTheAgentCLIsAreOnPathWithThePinnedVersions, an end-to-end test |
Teams and projects
Section titled “Teams and projects”| Feature | Proof |
|---|---|
| Open a repository, branch, commit or pull request from its URL, in the dashboard (/launch) and from the terminal | spin open --no-connect |
| A workspace opened at a commit or a pull request, checked out as pr-<n> | TestAProjectsWorkspaceOpensAtTheCommitItWasAskedFor, an end-to-end test |
| Teams, with owner, admin and member | spin team member role |
| A team’s own identity providers | TeamService/CreateIdentityProvider |
| A team’s forge app: private repositories cloned and pushed with nothing on the disk | spin team forge set |
| A team’s own network policies, where the installation allows them | spin team policy set |
| Projects: a repository and the shape of the workspace that opens it | TestAProjectsWorkspaceHasItsRepositoryCheckedOutAtTheRef, an end-to-end test |
| Prebuilds of a project’s refs, as the floor of the workspaces that open them | TestAProjectOpensAsItsPrebuildMadeIt, an end-to-end test |
| A team’s workspaces run on the installation’s hosts | TestATeamsWorkspaceRunsOnTheInstallationsHost, an end-to-end test |
Snapshots
Section titled “Snapshots”| Feature | Proof |
|---|---|
| Snapshots of a running workspace’s disk | WorkspaceService/CreateSnapshot |
| Snapshots with memory, resumed with their processes | TestARunningWorkspaceResumesFromASnapshotsMemory, an end-to-end test |
| Restore a workspace to a snapshot | TestARestoredWorkspaceBootsOnTheSnapshotItWasRestoredTo, an end-to-end test |
| A diff of the files that changed between two snapshots | TestADiffOfTwoSnapshotsIsWhatChangedBetweenThem, an end-to-end test |
| Share a snapshot with a person or make it public, and create a workspace from it | TestACloneOfASnapshotRegistersAsItself, an end-to-end test |
| What looks like a credential is found before a share, and the share refused unless acknowledged | ShareService/ShareSnapshot |
| A long chain is compacted while the workspace runs | TestADiskSnapshottedPastTheThresholdIsCompactedWhileItRuns, an end-to-end test |
Network
Section titled “Network”| Feature | Proof |
|---|---|
| Egress is closed by default; policies, by tag, name what a workspace may reach | TestAnOwnerMayOnlyChooseAPolicyTheInstallationDeclares, an end-to-end test |
| A policy changed reaches the host that runs the workspace | TestChangingAWorkspacesPoliciesReachesTheHostThatRunsIt, an end-to-end test |
| Brokered names: the host’s proxy stands in and adds what the workspace never holds - a team secret, a forge token, its identity, a cloud role | spin team secret set |
| A workspace trusts the egress root only by its owner’s word | TestAGuestTrustsTheEgressRootOnlyByItsOwnersWord, an end-to-end test |
| What a workspace reached, what it looked up and what it was refused | spin workspace egress |
| Each request to a brokered name as the proxy read it, served or refused and why; and whether each injection’s secret is the team’s to give | TestABrokeredRequestIsSeenAsTheProxyReadIt, an end-to-end test |
| The egress proxy is a process of its own, holding no key of the host’s, started again by the runner when it ends | TestTheEgressProxyIsAProcessOfItsOwnThatTheRunnerStartsAgain, an end-to-end test |
| A brokered rule names whose it is, the agent’s or the person’s: one policy says what each may reach and with what | TestABrokeredNameForTheAgentIsTheAgentsAlone, an end-to-end test |
| A WebSocket to a brokered name: its handshake under the rule’s headers and scope, then bytes each way | TestAWebSocketToABrokeredNameIsCarriedAfterItsHandshake, an end-to-end test |
| HTTP/2 to a brokered name, the proxy’s ALPN the real host’s: a rule’s headers set stream by stream, gRPC’s trailers both ways | TestHTTP2ToABrokeredNameIsTheRealHosts, an end-to-end test |
| Watch where a workspace connects, into its logs | spin workspace watch |
| An agent the supervisor starts is marked, and reaches only brokered names | TestARealWorkspaceMarksTheAgentItsSupervisorStarts, an end-to-end test |
| Published ports at https://{port}-{workspace}.{domain}: private, whitelisted or public | spin port expose |
Access
Section titled “Access”| Feature | Proof |
|---|---|
| Sign in with GitHub or an OIDC provider | AuthService/StartLogin |
| Device login for a terminal | AuthService/StartDeviceLogin |
| API keys for scripts and agents | spin api-key create |
| SSH keys, and plain ssh to spin.<workspace> | spin ssh-config |
| Who logs in to a workspace is what its owner signed | TestOnlyThePeopleTheAccessNamesLogInToAWorkspace, an end-to-end test |
| Guests of a workspace, invited by its owner | spin workspace guests |
| A workspace’s identity, signed by its host, for the audiences its owner allows | TestAWorkspacesIdentityIsTheHostsSignatureOfWhatItsOwnerSigned, an end-to-end test |
| VS Code over SSH, with the server the installation publishes and nothing downloaded | TestAVSCodeServerOfAnotherCommitIsHandedToTheRunningMachine, an end-to-end test |
| Run a command in a workspace, copy files to and from it | spin exec |
Administration
Section titled “Administration”| Feature | Proof |
|---|---|
| Installation settings seeded from a file; a change in the file is a proposal to apply or dismiss | AdminService/DecideConfigChange |
| Resource presets | AdminService/CreateResourcePreset |
| Registration: open, by allowlist, or closed | AdminService/SetRegistrationMode |
| An audit log | AdminService/ListAuditLog |
| The control plane’s jobs, and running one now | spin admin jobs |
| The month’s bill, its forecast, and what each workspace cost | spin admin costs |
| The store: every volume, whose it is, and taking out what nothing needs | spin admin storage list |
| Re-key a workspace’s disk | spin admin volume rekey |
| Runners: registration tokens, drain, activate, revoke, and a policy per host | spin admin runner drain |
| Runners start when a workspace waits for one and stop when nothing runs | HostService/GetFleet |
| A host that reboots brings its workspaces back | TestAHostRebootBringsItsWorkspacesBack, an end-to-end test |
| A cloud’s reclaim warning empties the host before the machine goes | TestACloudsReclaimWarningEmptiesTheHostBeforeAnySignal, an end-to-end test |
| A writeback bound per host, measured on that host before it is taken | TestCustomWritebackValuesAreMeasuredOnTheRunner, an end-to-end test |
| What is running where: the control plane, each runner and its machine | spin admin versions |
Observability
Section titled “Observability”| Feature | Proof |
|---|---|
| Platform logs, workspace logs and traces, searched in the product | LogService/SearchPlatformLogs |
| Metrics, with Grafana on the control plane | AdminService/GetMonitoring |
| A workspace’s journal and console are collected only with its owner’s consent | spin workspace logs-consent |
Platform
Section titled “Platform”| Feature | Proof |
|---|---|
| A smoke test of what an installation’s API promises, with a workspace of its own | spin smoke |
| A host serves only the releases it carries | TestAMachineAdoptedWithoutItsReleasesIsSuspendedWithItsDisk, an end-to-end test |
Partly there
Section titled “Partly there”Nothing today.
Not built
Section titled “Not built”Each is an item of docs/ROADMAP.md, with the command that checks it.
- What a workspace grew to is asked for and never recorded (Workspaces)
- Placement cannot be told which kind of host a workspace belongs on (Workspaces)
- A workspace whose host never comes back is moved only when little would be lost (Administration)
- Nothing that needs a kernel runs in CI (Platform)
spin/v1is still ignored by the breaking-change gate (Platform)
Limits
Section titled “Limits”Not planned: a limit of the platform or of where it runs today. Limitations says what each means.
- AWS only (Platform): The Terraform module is the one supported install; nothing else is packaged or tested.
- x86-64 only (Platform): Runners are x86-64 machines with nested virtualization.
- The CLI runs on Linux x86-64 and macOS Apple silicon (Platform)
- One region, one control plane (Platform): A machine that fails is replaced in minutes, not seconds.
- No GPUs (Workspaces): There is no way to ask for a runner of a particular kind.
- Linux guests only (Workspaces): Booted with the kernel spin provides.
- No IPv6 inside a workspace (Network)
- TCP only for published ports (Network)
- A diff does not see everything (Snapshots): A file is hashed only when its size, inode or times changed; extended attributes are not compared.
- A memory snapshot resumes only on the same machine (Snapshots): The same QEMU, guest kernel and guest init; a disk restore has no such limit.
- Disk chains have a limit (Snapshots): At the limit the top layer grows instead, so less of the recent work is in the bucket.
- Work since the last upload can be lost (Snapshots): A runner uploads writes in layers, on the RPO, on snapshot and on stop; what it had not uploaded goes with it.
- No multi-factor authentication of Spinbox’s own (Access): Sign in through a provider that enforces it.
- No invitations (Access): A person signs in once before they can be added to a team.
- Team roles are fixed (Access): Owner, admin and member.
- Nothing pages anyone (Observability): Metrics, logs and traces stay inside the installation; there are no alerts.
- An update is one way (Administration): A release older than the one that last started the database refuses to start on it.
Generated by task reference from spin/internal/features/features.go at 8eee32b9d.
Documents Spinbox v20261019.02. This page as Markdown, for a model or a terminal.

