Skip to content
Spinbox is experimental: APIs change and data may be lost. Status lists what is built and what proves it.

Status

View Markdown

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.

FeatureProof
A machine per workspace: KVM, its own kernel, root, a persistent disk, SSHTestAWorkspaceBootsARealGuest, an end-to-end test
Create, start, stop and deleteWorkspaceService/CreateWorkspace
A trash: a deleted workspace stays whole, for its owner to undelete, until its days are upTestAWorkspaceWhoseDaysInTheTrashAreUpIsErasedFromItsHost, an end-to-end test
Idle suspend, with a question before it that a keep answersTestAWorkspaceIsAskedBeforeItsSuspensionAndAKeepAnswersIt, an end-to-end test
A workspace that ran as long as the installation allows is suspendedTestAWorkspaceThatRanForAsLongAsAllowedIsSuspended, an end-to-end test
A process inside holds its workspace awake while it livesTestAProcessHoldsItsWorkspaceAwakeWhileItLives, an end-to-end test
Suspend with the processes where they are; a start resumes themTestAWorkspaceNobodyUsesIsSuspendedAndAStartResumesIt, an end-to-end test
Cores and memory lent while the host has them, and taken backTestABusyWorkspaceIsLentCoresAndGivesThemBack, an end-to-end test
A grant of cores and memory of its own, for a whileTestAGrantWhoseTimeIsUpIsGivenBackToTheMachine, an end-to-end test
Move a running workspace to another host, its processes as they areTestHostsAMoveTakesARunningWorkspaceToAnotherHost, an end-to-end test
Clone a workspace: its disk, team, project, size, policies and environment, in oneTestACloneHoldsWhatItsSourceWroteAndItsShape, an end-to-end test
Recover a workspace whose host is gone, at a cost its owner acceptsTestHostsAWorkspaceWhoseHostIsGoneIsRecoveredOnAnother, an end-to-end test
A workspace outlives its runnerTestAWorkspaceOutlivesItsRunner, an end-to-end test
Quarantine, by an administratorWorkspaceService/QuarantineWorkspace
Why a workspace is not behaving: status, console, historyspin workspace status
The owner’s shell, environment, editor settings, Taskfile and dotfiles reach the guestTestAWorkspacesOwnEnvironmentIsInItsOwnersLoginShell, an end-to-end test
Reset a disk to what it was created fromspin workspace reset
Claude Code and Codex on every workspace’s PATH, at the versions the release pins, with their own defaultsTestTheAgentCLIsAreOnPathWithThePinnedVersions, an end-to-end test
FeatureProof
Open a repository, branch, commit or pull request from its URL, in the dashboard (/launch) and from the terminalspin 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 memberspin team member role
A team’s own identity providersTeamService/CreateIdentityProvider
A team’s forge app: private repositories cloned and pushed with nothing on the diskspin team forge set
A team’s own network policies, where the installation allows themspin team policy set
Projects: a repository and the shape of the workspace that opens itTestAProjectsWorkspaceHasItsRepositoryCheckedOutAtTheRef, an end-to-end test
Prebuilds of a project’s refs, as the floor of the workspaces that open themTestAProjectOpensAsItsPrebuildMadeIt, an end-to-end test
A team’s workspaces run on the installation’s hostsTestATeamsWorkspaceRunsOnTheInstallationsHost, an end-to-end test
FeatureProof
Snapshots of a running workspace’s diskWorkspaceService/CreateSnapshot
Snapshots with memory, resumed with their processesTestARunningWorkspaceResumesFromASnapshotsMemory, an end-to-end test
Restore a workspace to a snapshotTestARestoredWorkspaceBootsOnTheSnapshotItWasRestoredTo, an end-to-end test
A diff of the files that changed between two snapshotsTestADiffOfTwoSnapshotsIsWhatChangedBetweenThem, an end-to-end test
Share a snapshot with a person or make it public, and create a workspace from itTestACloneOfASnapshotRegistersAsItself, an end-to-end test
What looks like a credential is found before a share, and the share refused unless acknowledgedShareService/ShareSnapshot
A long chain is compacted while the workspace runsTestADiskSnapshottedPastTheThresholdIsCompactedWhileItRuns, an end-to-end test
FeatureProof
Egress is closed by default; policies, by tag, name what a workspace may reachTestAnOwnerMayOnlyChooseAPolicyTheInstallationDeclares, an end-to-end test
A policy changed reaches the host that runs the workspaceTestChangingAWorkspacesPoliciesReachesTheHostThatRunsIt, 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 rolespin team secret set
A workspace trusts the egress root only by its owner’s wordTestAGuestTrustsTheEgressRootOnlyByItsOwnersWord, an end-to-end test
What a workspace reached, what it looked up and what it was refusedspin 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 giveTestABrokeredRequestIsSeenAsTheProxyReadIt, 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 endsTestTheEgressProxyIsAProcessOfItsOwnThatTheRunnerStartsAgain, 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 whatTestABrokeredNameForTheAgentIsTheAgentsAlone, an end-to-end test
A WebSocket to a brokered name: its handshake under the rule’s headers and scope, then bytes each wayTestAWebSocketToABrokeredNameIsCarriedAfterItsHandshake, 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 waysTestHTTP2ToABrokeredNameIsTheRealHosts, an end-to-end test
Watch where a workspace connects, into its logsspin workspace watch
An agent the supervisor starts is marked, and reaches only brokered namesTestARealWorkspaceMarksTheAgentItsSupervisorStarts, an end-to-end test
Published ports at https://{port}-{workspace}.{domain}: private, whitelisted or publicspin port expose
FeatureProof
Sign in with GitHub or an OIDC providerAuthService/StartLogin
Device login for a terminalAuthService/StartDeviceLogin
API keys for scripts and agentsspin api-key create
SSH keys, and plain ssh to spin.<workspace>spin ssh-config
Who logs in to a workspace is what its owner signedTestOnlyThePeopleTheAccessNamesLogInToAWorkspace, an end-to-end test
Guests of a workspace, invited by its ownerspin workspace guests
A workspace’s identity, signed by its host, for the audiences its owner allowsTestAWorkspacesIdentityIsTheHostsSignatureOfWhatItsOwnerSigned, an end-to-end test
VS Code over SSH, with the server the installation publishes and nothing downloadedTestAVSCodeServerOfAnotherCommitIsHandedToTheRunningMachine, an end-to-end test
Run a command in a workspace, copy files to and from itspin exec
FeatureProof
Installation settings seeded from a file; a change in the file is a proposal to apply or dismissAdminService/DecideConfigChange
Resource presetsAdminService/CreateResourcePreset
Registration: open, by allowlist, or closedAdminService/SetRegistrationMode
An audit logAdminService/ListAuditLog
The control plane’s jobs, and running one nowspin admin jobs
The month’s bill, its forecast, and what each workspace costspin admin costs
The store: every volume, whose it is, and taking out what nothing needsspin admin storage list
Re-key a workspace’s diskspin admin volume rekey
Runners: registration tokens, drain, activate, revoke, and a policy per hostspin admin runner drain
Runners start when a workspace waits for one and stop when nothing runsHostService/GetFleet
A host that reboots brings its workspaces backTestAHostRebootBringsItsWorkspacesBack, an end-to-end test
A cloud’s reclaim warning empties the host before the machine goesTestACloudsReclaimWarningEmptiesTheHostBeforeAnySignal, an end-to-end test
A writeback bound per host, measured on that host before it is takenTestCustomWritebackValuesAreMeasuredOnTheRunner, an end-to-end test
What is running where: the control plane, each runner and its machinespin admin versions
FeatureProof
Platform logs, workspace logs and traces, searched in the productLogService/SearchPlatformLogs
Metrics, with Grafana on the control planeAdminService/GetMonitoring
A workspace’s journal and console are collected only with its owner’s consentspin workspace logs-consent
FeatureProof
A smoke test of what an installation’s API promises, with a workspace of its ownspin smoke
A host serves only the releases it carriesTestAMachineAdoptedWithoutItsReleasesIsSuspendedWithItsDisk, an end-to-end test

Nothing today.

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/v1 is still ignored by the breaking-change gate (Platform)

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.