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

Types

View Markdown
FieldTypeWhat it is
idstring
namestring
prefixstringFirst 8 chars for identification
scopeslist of string
createdAtTimestamp
expiresAtTimestamp
lastUsedAtTimestamp

AccessPerson is somebody an access names: a user, and their keyring by the version it began at (ownerword.Person). name is how the dashboard shows them, and no part of what is signed.

FieldTypeWhat it is
userIdstring
keyringstring
namestring

Allowed email/domain entry

FieldTypeWhat it is
idstring
patternstringEmail address or domain
typeAllowedEmailType
descriptionstringOptional description
createdAtTimestamp

Allowed email type enum

One of: ALLOWED_EMAIL_TYPE_UNSPECIFIED, ALLOWED_EMAIL_TYPE_EMAIL, ALLOWED_EMAIL_TYPE_DOMAIN.

AuditEntry is one recorded operation, as it was recorded: the log is append-only and nothing here is derived at read time except the actor’s email, which is joined so a reader is not handed a UUID to look up by hand.

FieldTypeWhat it is
idstring
actorIdstringactor_id is empty for an operation nobody was signed in for - a failed login, a runner registering itself - and for one whose user has since been deleted.
actorEmailstringactor_email is empty for the same reasons, and is what the user’s row says now rather than what it said then.
actionstring
resourceTypestring
resourceIdstringresource_id is empty for an operation with no row to point at - a failed login, a change to the installation’s settings. resource_type still says what kind of thing it was about.
detailsstringdetails is the JSON the operation recorded, verbatim. It has no schema: what a login records and what a team membership change records have nothing in common, and a reader that insists on a shape would have to be changed by every new action.
ipAddressstring
createdAtTimestamp

BaseImage is the base image of one machine release, as published.

FieldTypeWhat it is
refstring
versionstringThe machine release it was taken from.
publishedAtTimestamp
clonesstring (int64)How many volumes were cloned from it: every workspace disk that began as it, and still is.
untaggedbooleanIts ref was taken off it: no new workspace gets it, the disks cloned from it go on reading it.
givenbooleanWhat a workspace that names no image is given now.
pinnedbooleanThe one this control plane’s release pins; given once it is published.
volumeIdstringIts volume in the store, which RemoveStoredVolume takes when removable.
removablebooleanNo disk was cloned from it and it is not the one given: RemoveStoredVolume untags it on the way and removes it.
FieldTypeWhat it is
dayTimestampThe day’s first instant, UTC.
serviceslist of ServiceCostCostliest first.

BrokeredRequest is one request the egress proxy read from the workspace’s machine to a brokered name. No header and no body: what the proxy set is the team’s secret, and what the machine sent is its own.

FieldTypeWhat it is
namestring
methodstring
pathstringAs the machine sent it, without the query.
statusinteger (int32)What the real host answered; what the proxy answered for a refusal.
bytesSentstring (int64)
bytesReceivedstring (int64)
atTimestamp
refusedstringEmpty for a request passed on. Otherwise why the proxy refused it: credentials (a secret or token the team does not hold), host (a request for another name), upgrade, method (TRACE or TRACK), scope (a method or path the injecting rule does not allow), authority (the cloud principal refused to sign it).
principalstringWho asked: “user” or “agent”, by the listener the proxy read it on.

BurstMode is how a workspace of a preset may grow past what it starts with.

One of: BURST_MODE_UNSPECIFIED, BURST_MODE_FIXED, BURST_MODE_TO_PRESET, BURST_MODE_TO_HOST.

CloudAccess is a principal on a cloud a brokered rule’s requests are authorized as.

FieldTypeWhat it is
cloudstringThe cloud: “aws”, whose principal is an IAM role’s ARN and whose requests are signed with SigV4.
principalstring

One thing the config file says differently from the installation.

FieldTypeWhat it is
kindConfigItemKind
namestring
fileSaysstringWhat the file says, as a person reads it; empty where the file no longer declares the item, and applying the change removes it.
installationHasstringWhat the installation has, the same way; empty where it has none.
saysstringThe file’s declaration this change is about, sent back as it came: a decision about one the file has changed since is refused rather than taken as about the newer one.
sinceTimestampWhen the file started saying it.

What one item of the installation’s config file is.

One of: CONFIG_ITEM_KIND_UNSPECIFIED, CONFIG_ITEM_KIND_SETTING, CONFIG_ITEM_KIND_EMAIL, CONFIG_ITEM_KIND_PRESET, CONFIG_ITEM_KIND_POLICY.

DeletedWorkspace is a workspace in the trash.

FieldTypeWhat it is
idstring
namestringThe name it had; another workspace may have taken it since, and an undelete then gives it another.
deletedAtTimestamp
trashedUntilTimestamp

One of: DEVICE_LOGIN_STATUS_UNSPECIFIED, DEVICE_LOGIN_STATUS_PENDING, DEVICE_LOGIN_STATUS_COMPLETE, DEVICE_LOGIN_STATUS_EXPIRED, DEVICE_LOGIN_STATUS_DENIED.

FieldTypeWhat it is
repostringGit URL: https://github.com/user/dotfiles
branchstringBranch to clone (default: main)
installCommandstringCommand to run after clone (default: ./install.sh)
FieldTypeWhat it is
idstring
workspaceIdstring
portinteger (int32)
httpsBackendbooleanThe proxy speaks TLS to this port without verifying its certificate, and only under the {port}s- hostname: 3000-ws and 3000s-ws are different names, and one refuses.
descriptionstring
createdAtTimestamp
urlstringOutput only: computed URL (e.g., https://3000-dev.ws.spinbox.dev)
accessPortAccess
grantslist of PortGrantWho this port is granted to, when access is WHITELIST. Output only, and populated only for the workspace’s owner - who a port is shared with is the owner’s business and not the grantees’.

ExtensionRelease is one release of an extension: the supervisor, or the VS Code servers.

FieldTypeWhat it is
versionstringThe release’s own name: the control plane’s version for the supervisor; for the VS Code servers, the versions it carries joined with +, unless it was named otherwise.
releasedAtTimestamp
workspacesstring (int64)How many workspaces run it; one that nothing runs and is not the newest is collectable.
newestbooleanWhether a start is given this one.

ExtensionVersion is a release and how many workspaces are on it: what an update leaves behind until each workspace is next started.

FieldTypeWhat it is
extensionstring
versionstring
workspacesstring (int64)
newestbooleanWhether a start now would choose this release.

FieldValue is one value a field has, and how many of a search’s records have it.

FieldTypeWhat it is
valuestring
countstring (int64)
FieldTypeWhat it is
pathstringFrom the filesystem’s root, with a leading slash. A name holding bytes that are not UTF-8 has them replaced here, and path_bytes holds the name as it is.
pathBytesstring (byte)
kindFileChangeKind
fromFileStateUnset on the side the path is not on.
toFileState

One of: FILE_CHANGE_KIND_UNSPECIFIED, FILE_CHANGE_KIND_ADDED, FILE_CHANGE_KIND_REMOVED, FILE_CHANGE_KIND_MODIFIED, FILE_CHANGE_KIND_TYPE_CHANGED.

FieldTypeWhat it is
typeFileType
modeintegerPermission bits, setuid, setgid and sticky included.
uidinteger
gidinteger
sizestring (int64)
symlinkTargetstringA symlink’s target as stored, never followed; replaced and in symlink_target_bytes as path is.
symlinkTargetBytesstring (byte)
sha256stringA regular file’s content hash in lowercase hex, where its content is what changed.
modifiedAtTimestamp

One of: FILE_TYPE_UNSPECIFIED, FILE_TYPE_REGULAR, FILE_TYPE_DIRECTORY, FILE_TYPE_SYMLINK, FILE_TYPE_OTHER.

FleetHostVersion is one host’s halves: the runner binary and the machine under it.

FieldTypeWhat it is
hostIdstring
stateHostState
agentVersionstring
machineVersionstringEmpty on a host with no machine, such as the mock runner.
supportedbooleanWhether this control plane serves a host of that version. An unsupported host is refused at its next registration, with note saying why.
notestring
lastHeartbeatTimestamp

Grafana is the one the control plane runs over the installation’s metrics and serves to its administrators.

FieldTypeWhat it is
urlstringWhere the control plane serves it: “/monitoring/grafana/”.
dashboardslist of GrafanaDashboardThe release’s, in the order they are listed.
FieldTypeWhat it is
uidstring
titlestring

HeaderInjection is a header the egress proxy sets: header, to prefix and then a value the workspace never holds - a team secret’s, or a token of the workspace’s identity. One of the two.

FieldTypeWhat it is
headerstring
secretstringThe team secret’s name.
prefixstringWhat goes before the value, as “Bearer ”.
identitystringThe audience of a token of the workspace’s identity, issued for the proxy to present: bound to no key, and saying so (spin.via = egress-proxy).
forgestringThe forge whose credential for the workspace’s team goes in the header, whole: “github” is an installation token of the team’s GitHub App, minted by the control plane (TeamService.SetForge).
methodslist of stringThe requests the header is set on: these methods, and paths under path_prefix by whole segments. Another request to the rule’s names is answered 403. None of either is every request.
pathPrefixstring
FieldTypeWhat it is
namestring
passedboolean
valuestringActual value from check
messagestringError message if failed

HealthReport is what the supervisor inside a workspace observes about it. Here rather than beside the stream that carries it, for the reason SupervisorState is here: it is read from both sides - reported by the supervisor on its own connection (spin.agent.v1), and returned to an operator by WorkspaceService.GetWorkspaceStatus. It is also what keeps the dependency between the two packages pointing one way. spin.v1 is the vocabulary and spin.agent.v1 is the machine surface built on it; a type the operator’s side needs from the agent’s side would make each package need the other.

FieldTypeWhat it is
healthyboolean
checkslist of HealthCheckResult
FieldTypeWhat it is
idstring
addressstring
stateHostState
capacityResources
allocatedResources
workspaceCountinteger (int32)
agentVersionstring
labelsmap of string to string
lastHeartbeatTimestamplast_heartbeat is whichever of this host’s two channels was heard from last, and they are not the same thing: the command stream carries what the host can be *told* (start this, stop that), and the volume agent’s own heartbeat renews the lease its disks are served under. Either refreshes this, so a fresh stamp says one of them is alive and not which.
registeredAtTimestamp
connectedbooleanconnected is the command stream, now: the half that decides whether this host can be given a workspace or asked to stop one. A host whose stream is gone while its volume agent keeps renewing reads as freshly heartbeated above and can be told nothing at all - which is the state an operator is looking at when they ask why a host takes no work.
goingAwaybooleangoing_away is this host on its way out: a runner told the control plane it is stopping - an operator’s restart, or the cloud taking the machine away - and it takes no new workspace from that moment. Nothing is written to the database for it (a state there would outlive the restart it described), so this is the only place an operator can see that the host they are looking at is leaving rather than idle.
checkslist of HostCheckchecks are what the host last found when it asked itself whether a workspace can run on it as it should, as its heartbeat said: held for as long as the host is connected, like going_away, and empty for a host that has said nothing yet.

HostCheck is one thing a host asks itself about, at start and every few minutes: a clock that is not synchronised, a KVM it cannot open, a resolver that answers its workspaces nothing - each a host that looks healthy to every other signal and fails its workspaces.

FieldTypeWhat it is
namestringname is what was checked: clock, kvm, resolver.
okboolean
detailstringdetail is what it found when it is not ok, in the host’s words.
checkedAtTimestamp
FieldTypeWhat it is
hostIdstring
ruleslist of NetworkRule

HostPolicy is what an installation decides about one host. An unset field is the installation saying nothing about that setting, which leaves the host on its own default - not the same as setting it to nothing.

FieldTypeWhat it is
hostIdstring
shutdownGraceSecondsinteger or null (int32)Seconds this host stays up after a stop signal so what it runs can be suspended off it. The unit’s TimeoutStopSec still bounds it.
preemptibleboolean or nullWhether a stop here is the machine being taken away rather than coming back.
preemptionSourceanyWhich cloud announces that reclaim; setting one implies preemptible.
preemptionMetadataUrlstring or nullThat service’s address, for a private cloud or a test.
capacityCpuCoresinteger or null (int32)What this host advertises to the fleet, which is not what it has: an operator holds a machine back by saying it has less. Unset leaves the host advertising what it detects.
capacityMemoryMbinteger or null (int32)
capacityDiskGbinteger or null (int32)
maxWorkspaceCpuCoresinteger or null (int32)The ceiling one workspace may grow to here, for the machines it starts afterwards.
maxWorkspaceMemoryMbinteger or null (int32)
revisionstringrevision names the content, and is what a host reports it is running under.
writebackLimitBytesstring or null (int64)The host’s writeback thresholds (spin.agent.v1.HostPolicy says why): both or neither, the background below the limit. Unset is what the host booted with.
writebackBackgroundBytesstring or null (int64)
runningRevisionstringrunning_revision is what the host last said, empty where it has not said or is not connected. Different from revision is a policy still on its way, which is normal for the seconds after a write and a fault after that.
maxWorkspaceIoMbPerSecondinteger or null (int32)What one machine may read and write per second here, in MiB and in operations, for the machines it starts afterwards. Unset is no bound.
maxWorkspaceIoOpsPerSecondinteger or null (int32)

HostState mirrors internal/lifecycle.HostState (§28.1) and the CHECK on hosts.state: one vocabulary for the fleet, whichever component is asking. Only ACTIVE takes new work; a CORDONED or DRAINING host keeps serving (and keeps its lease) while it is evacuated, and the Agent needs to be told which of the two it is. It replaces a second set of names this schema carried for the same states - HEALTHY, DEGRADED, OFFLINE - where DEGRADED was a word nothing branched on and no name said “an operator stopped this host”.

One of: HOST_STATE_UNSPECIFIED, HOST_STATE_ACTIVE, HOST_STATE_CORDONED, HOST_STATE_DRAINING, HOST_STATE_DEAD.

Identity provider info (returned to clients for login UI) Built-in provider has id=“github”; dynamic providers have UUIDv7 IDs

FieldTypeWhat it is
idstring“github” for built-in, UUIDv7 for dynamic
namestringDisplay name (e.g., “Sign in with Okta”)
providerTypestringgithub (built-in), oidc, google, azure-ad
teamIdstringEmpty if system-wide provider
isDefaultbooleanTrue for built-in GitHub provider

Image is one name a workspace can be created from: a publication in this installation’s database that its settings also permit. It is not a container image and does not come from a registry - it is a volume somebody published here, which is why a name that looks like “ubuntu:22.04” is not one unless it was published under that name. A disk image a workspace’s disk can be cloned from: a volume published in this installation, not a container image, and never pulled from a registry.

FieldTypeWhat it is
refstringThe name a workspace asks for. It moves: a publish under it tags new bytes, and what a disk began as is its volume’s parent snapshot, not this.
virtualSizeBytesstring (int64)What the disk cloned from it will hold before the workspace writes anything.
publishedAtTimestampWhen the publication this ref resolves to was made.
namestringWhat a person choosing a disk is shown: its name (“base image”) and what it is ready for. An empty name is a publication made before one was asked for; show the ref.
descriptionstring

InjectionStatus is one header the egress proxy sets on the workspace’s requests to a brokered name, and whether the workspace’s team holds what it is set from.

FieldTypeWhat it is
policystringThe policy, by name, and the names its rule brokers.
nameslist of string
headerstring
fromstringWhat the header is set from: a team secret by name, “<forge> app”, or “identity for <audience>”.
heldbooleanWhether the team holds it: the secret is set, the forge app is set, an identity is always held. False is a request refused with credentials.

InstallationSettings contains global settings for the Spin installation

FieldTypeWhat it is
allowedImageslist of stringWhitelist of allowed images (empty = all allowed)
maxWorkspacesPerUserinteger (int32)Maximum workspaces per user (0 = unlimited)
defaultNetworkTagslist of stringWhat a workspace created without a network tag of its own runs under, by policy name. Empty means “offline”, the policy every host has and which allows nothing: no value of this field means open. An installation that wants such a workspace out declares a policy saying what it may reach and names it here.
updatedAtTimestamp
telemetryTracesKeepPercentinteger (int32)What the installation’s collector keeps, decided at the collector (internal/controlplane/domain/telemetrypolicy). A trace with an error in any span is always kept, and so is one slower than telemetry_traces_slow_ms (0: none is kept for being slow); of the rest, telemetry_traces_keep_percent, 0 to 100 and 100 until an admin says otherwise.
telemetryTracesSlowMsinteger (int32)
telemetryMetricsDroplist of stringThe metrics that are not kept, by name; a pattern may begin or end with *.
telemetryPerVolumeHistogramslist of stringRead only: the metrics that cost most to keep, a histogram per volume, which a surface may offer to drop as one.
vscodeFetchbooleanWhether the control plane fetches VS Code servers from Microsoft on its own: the newest stable release, looked for daily, and the server of a client’s commit the installation has not released. False, it fetches none, and a workspace is given the server the control plane’s image carries or one an administrator published.
workspaceTrashDaysinteger (int32)How many days a deleted workspace stays in the trash, whole, for its owner to undelete before it is erased: 0 is no trash, and 7 is what an installation that says nothing keeps.
identityAudienceslist of stringWho a workspace’s identity token may be for; empty is anybody. What the installation’s issuer gives, not who trusts it: a relying party still decides which subjects it admits.
volumeRpoSecondsinteger (int32)How far behind the object store a workspace’s volume may fall, in seconds, where its preset does not say: what it commits on (v6 §11). 0 is none - it commits on its size and its snapshots alone - and 300 is what an installation that says nothing keeps.
diskReservePercentinteger (int32)How a host’s disk is lent to workspaces. A volume holds what it wrote, not its size: a host is charged, per volume, the larger of disk_reserve_percent of its size and what it wrote, and takes new ones up to 80% of its device; disk_commit_max_percent bounds the sizes summed - every volume filling at once. 50 and 200 are what an installation that says nothing lends; 100 and 100 lends nothing past what the device holds.
diskCommitMaxPercentinteger (int32)
workspaceIdleSuspendMinutesinteger (int32)How many minutes a running workspace may go unused - nobody working over its ssh, editor or forwarded ports, and its cores all but still - before it is suspended with its processes, which its next start resumes. 0 suspends none; 60 is what an installation that says nothing keeps, and a week is the most.
workspaceMaxRunningMinutesinteger (int32)How many minutes a workspace may run at a stretch, used or not, before it is suspended the same way: a process that keeps its cores busy is use to the rule above, and this is what ends it. Counted from its machine’s start, which a resume is too. 0 caps none; 720 is what an installation that says nothing keeps, and a week is the most.
workspaceLeaseMaxMinutesinteger (int32)How many minutes a process may keep its workspace awake at a stretch (a lease: spin-supervisor keep -- &lt;cmd>, a .spin.yaml task with keep_awake). While a lease is held and within this of its start, nobody is asked, nothing idle is suspended, and the running cap waits for the lease’s end. 0 honours no lease; 480 is what an installation that says nothing keeps, and a week is the most.
teamSecretsRolestringThe IAM role a team’s secret kept in Secrets Manager or Parameter Store is read under, in a session tagged spin-team-id with the team: its policy lets that session read only what carries the same tag. Empty, no secret is kept as a reference.
agentsFetchbooleanWhether the control plane fetches the agent CLIs - Claude Code and Codex - from their publishers on its own: the newest release of each, looked for daily. False, it fetches none, and a workspace is given the pair the control plane’s image carries or one an administrator published.
FieldTypeWhat it is
namestring
intervalSecondsstring (int64)Zero for a job only run by hand, which has no next_run_at.
runningboolean
nextRunAtTimestampWhen the schedule next starts it.
lastRunJobRunUnset until it has run on this installation.
lastSucceededAtTimestamp
FieldTypeWhat it is
runIdstring
jobstring
startedAtTimestamp
finishedAtTimestampUnset while it runs.
outcomeJobRunOutcome
countsmap of string to string (int64)What it did, by the job’s own names for it: objects deleted, bytes freed, hosts forgotten.
errorstringWhy it failed; empty when it did not.
traceIdstringThe run’s trace, empty when it was not recorded.
askedBystringThe admin who ran it by hand; empty for a run the schedule started.

How one run of a job ended, or that it has not.

One of: JOB_RUN_OUTCOME_UNSPECIFIED, JOB_RUN_OUTCOME_RUNNING, JOB_RUN_OUTCOME_SUCCEEDED, JOB_RUN_OUTCOME_FAILED.

LogIndex is one index of the store.

FieldTypeWhat it is
idstring
retentionstringHow long it keeps what it holds, in the store’s words (“30 days”); empty for forever.
timestampFieldstringThe field its records are dated by: what a search’s window is over.
defaultSearchFieldslist of stringWhat a query’s bare words are searched in.
fieldslist of LogIndexField
documentsstring (int64)What it holds: records, the splits they are kept in, and the splits’ size in the bucket and the records’ before compression.
splitsstring (int64)
sizeBytesstring (int64)
uncompressedBytesstring (int64)
oldestTimestampWhen its oldest and newest records are dated; unset while it holds none.
newestTimestamp

LogIndexField is one field of an index’s mapping.

FieldTypeWhat it is
namestringA dotted path for a field inside an object field.
typestringThe store’s type: text, json, u64, bool, bytes, datetime, array<text>…
tokenizerstringHow a text or JSON field is split into what a query matches: “raw” is the whole value as written, “default” is its words, lowercased. Empty for any other type.
indexedbooleanWhether a query can match it, and whether it can be counted and ranged over fast.
fastboolean

LogInterval is how many records one interval holds, by severity.

FieldTypeWhat it is
startTimestamp
bySeveritymap of string to string (int64)

LogRecord is one record as OpenTelemetry names its parts.

FieldTypeWhat it is
timeTimestamp
severitystring
servicestringThe process that wrote it: controlplane, runner, proxy.
bodyValueWhat was logged: its message, or the structure it logged.
attributesStruct
resourceAttributesStruct
traceIdstringThe trace it was written in, hex; empty for none.
spanIdstring

NetworkPolicy is a tag a workspace can be created with, and what the hosts reporting it say it allows. The hosts are the authority: this is what they last said they enforce.

FieldTypeWhat it is
namestring
hostslist of HostNetworkPolicyWhat each host reporting this tag says it enforces.
declaredbooleandeclared says the installation has this policy, and rules are what it allows. A policy with no hosts is declared and not yet enforced anywhere.
ruleslist of NetworkRule
teamIdstringThe team whose admins declared it, which only its workspaces and those of the teams below it may run under; empty is the installation’s.

NetworkPolicyRule is a policy as an administrator writes it, in the words the config file takes: a name, which is a tag - letters, digits, - and _, up to 32 - and the rules it allows, each these destinations on these ports. A policy with no rules allows nothing.

FieldTypeWhat it is
namestring
ruleslist of NetworkRule

NetworkRule is one thing a network policy allows: these destinations on these ports. Within a rule the two intersect - every destination on every port - and a policy is the union of its rules, so “53/udp to one resolver and 443 to github.com” is two rules and not a product of both. Here and not beside a policy for the reason HealthReport is: the control plane’s policy, the one a host reports it enforces and the one a host is given are one vocabulary.

FieldTypeWhat it is
allowlist of stringIPv4 prefixes in CIDR.
allowNameslist of stringNames, exact or with a leading ”*.”: the host opens the address its own resolver answers a machine with, for as long as the answer lives.
portslist of stringDestination ports as “443” (TCP, which is what a bare number means), “443/udp”, a range as “8000-8100” or “8000-8100/udp”, or “icmp” for a ping. None is every port, at the destinations above; none of those is every destination, on these ports.
brokerbooleanThe host’s egress proxy stands in for these names, on HTTPS only: a machine reaches them through it and never directly, and it adds what the machine never holds. Names only.
injectlist of HeaderInjectionHeaders the proxy sets on a brokered rule’s requests, each from a secret of the workspace’s team (or the nearest team above it with one by that name). Brokered rules only.
cloudCloudAccessThe principal the proxy authorizes a brokered rule’s requests as, on its cloud: the host takes its credentials as the workspace, with a token of its identity. Brokered rules naming that cloud’s endpoints only, and not with inject.
verifySnibooleanThe host’s egress proxy reads the TLS server name of each connection to these names and passes on, untouched, only one this rule names: an address shared with other names opens only these to a client that says which it wants. A connection with no name, or one hiding it (ECH), goes nowhere. Names only, on TCP, never with broker; it does not stop a client that lies.
principalstringWhose connections a brokered rule stands in for: “agent” (the workspace’s agent, whose packets its guest marks), “user” (everything else the workspace sends), or “any” (empty: both). Two rules for one name, one per principal, each with its own injections and methods, say what the person may do and what the agent may. Brokered rules only: an agent reaches nothing outside the proxy, so a rule that is not brokered is the person’s already.

ObservedDestination is one address the workspace was allowed to reach, with what the host’s ruleset counted and the name its resolver answered with that address, where it holds one.

FieldTypeWhat it is
addressstring
namestring
packetsstring (int64)What the workspace sent there, every packet of every flow.
bytesstring (int64)
protocolstring“tcp”, “udp”, “icmp”, or the protocol’s number.
portintegerFor tcp and udp; zero otherwise.
packetsReceivedstring (int64)What came back to the workspace from there.
bytesReceivedstring (int64)

OutsideShareState is how far a snapshot’s share outside its team is.

One of: OUTSIDE_SHARE_STATE_UNSPECIFIED, OUTSIDE_SHARE_STATE_PREPARING, OUTSIDE_SHARE_STATE_READY.

OwnerWord is a workspace’s access, as its owner signed it with a key of their keyring (internal/ownerword): document is the access as framed JSON, signature the key’s SSH signature over it (sshsig, namespace “spin-access”) - what ssh-keygen -Y sign writes, so a FIDO2 key signs one through ssh-agent.

FieldTypeWhat it is
documentstring (byte)
signaturestring (byte)

Pagination for list requests

FieldTypeWhat it is
pageSizeinteger (int32)
pageTokenstring
FieldTypeWhat it is
nextPageTokenstring
totalCountinteger (int32)

PendingSignature is one document the caller is asked to sign.

FieldTypeWhat it is
kindSignatureKind
subjectIdstringsubject_id is the user, the team or the workspace the document is of.
documentstring (byte)document is the document to sign, as framed JSON: what the client shows and signs as it is.
signerslist of stringsigners are the keys, in authorized_keys form, any one of which may sign it.
summarystringsummary is a line saying what it changes, for a list: the document itself is what to read.
FieldTypeWhat it is
artifactPlatformImageArtifact
statePlatformImageState
detailstringWhy it failed, or why it is left alone.
versionstringThe machine’s release, or the supervisor’s (the control plane’s) version.
updatedAtTimestamp

One of: PLATFORM_IMAGE_ARTIFACT_UNSPECIFIED, PLATFORM_IMAGE_ARTIFACT_BASE, PLATFORM_IMAGE_ARTIFACT_SUPERVISOR.

One of: PLATFORM_IMAGE_STATE_UNSPECIFIED, PLATFORM_IMAGE_STATE_PENDING, PLATFORM_IMAGE_STATE_PUBLISHED, PLATFORM_IMAGE_STATE_PUBLISHING, PLATFORM_IMAGE_STATE_FAILED, PLATFORM_IMAGE_STATE_UNAVAILABLE, PLATFORM_IMAGE_STATE_FOREIGN.

Who may reach a published port. Per port rather than per workspace: one workspace serves a demo anyone may see and an admin panel only its owner may, and a single setting for both makes the safe answer for one the wrong answer for the other. UNSPECIFIED is not a level and is never stored - the column’s CHECK excludes it. A request that leaves it at proto3’s zero is treated as PRIVATE, which is the direction to be wrong in: the cost of failing closed is a confusing error, and the cost of failing open is a port somebody published without meaning to.

One of: PORT_ACCESS_UNSPECIFIED, PORT_ACCESS_PRIVATE, PORT_ACCESS_WHITELIST, PORT_ACCESS_PUBLIC.

One user a whitelisted port is shared with.

FieldTypeWhat it is
userIdstring
emailstringOutput only, so a list is readable without a second lookup
grantedAtTimestamp

A prebuild: one build of a project’s ref at a commit, and the snapshot it left.

FieldTypeWhat it is
idstring
projectIdstring
refstring
commitstring
statePrebuildState
snapshotIdstring
parentIdstringThe prebuild it was built on, and how many builds it is from the image (0: built from it).
depthinteger (int32)
imagestring
settingsDigeststringThe SHA-256 of the settings its word approved, and of the checkout’s .spin.yaml at the commit.
claimstring (byte)What its host signed of it (PrebuildClaim), once it is ready.
logstringThe tail of what its build said, and why it failed.
errorstring
createdAtTimestamp
builtAtTimestamp

One of: PREBUILD_STATE_UNSPECIFIED, PREBUILD_STATE_BUILDING, PREBUILD_STATE_READY, PREBUILD_STATE_FAILED, PREBUILD_STATE_RETIRED.

PreemptionSource mirrors spin.agent.v1.PreemptionSource, which is what reaches the host.

One of: PREEMPTION_SOURCE_UNSPECIFIED, PREEMPTION_SOURCE_AWS, PREEMPTION_SOURCE_GCP, PREEMPTION_SOURCE_AZURE.

A project: a repository and the shape of the workspace that opens it.

FieldTypeWhat it is
idstring
teamIdstring
namestring
slugstringWhat a person names it by in the team: teams.slug’s shape
descriptionstring
repositorystringAn https URL, with nothing of a credential in it
refstringThe branch or tag a workspace opens at unless the open names one
imagestringAs CreateWorkspaceRequest.image; empty is the installation’s default when opened
presetstringAs CreateWorkspaceRequest.preset; empty likewise
networkTagslist of string
workspaceCountinteger (int32)Workspaces open on it, the trash included
createdAtTimestamp
updatedAtTimestamp
prebuildRefslist of stringThe refs it prebuilds (spin#480 §3): none is none. Each is built as it moves, and opening the project at one clones its newest ready prebuild.
prebuildRebaseEveryinteger (int32)Every how many prebuilds of a ref one is built from the image again, rather than on the one before: a clone is a layer deeper than what it is cloned from.
prebuildOwnerIdstringWho the builds run as, for what they use: the admin who last named the refs.
FieldTypeWhat it is
targetstringWhere the attempt went: the destination, as the supervisor saw it (host and port).
detailsmap of string to stringWhat the supervisor held of it, in its own words: which user in the guest, which process, why the policy refused.
atTimestampWhen the attempt was made, as the guest clock held it.

RateLimitSettings configures API rate limiting

FieldTypeWhat it is
enabledbooleanEnable rate limiting
authRequestsPerMinuteinteger (int32)Auth endpoints (login, token exchange, etc.) Requests per minute for auth endpoints
authBurstinteger (int32)Burst allowance for auth endpoints
apiRequestsPerMinuteinteger (int32)API endpoints (all other endpoints) Requests per minute for API endpoints
apiBurstinteger (int32)Burst allowance for API endpoints
FieldTypeWhat it is
addressstring
namestring
protocolstring“tcp”, “udp”, “icmp”, or the protocol’s number.
portintegerFor tcp and udp; zero otherwise.
packetsstring (int64)

Registration mode enum

One of: REGISTRATION_MODE_UNSPECIFIED, REGISTRATION_MODE_OPEN, REGISTRATION_MODE_WHITELIST, REGISTRATION_MODE_CLOSED.

FieldTypeWhat it is
idstring
tokenPrefixstringFirst 8 chars for identification
descriptionstringHuman-readable description
teamIdstringOptional: team scope for registered host
expiresAtTimestamp
createdAtTimestamp
createdBystring
usedboolean
usedByHostIdstringHost ID that used this token; a reusable token’s last one
reusablebooleanA pool’s token: it registers every host that presents it until it expires or is revoked.
hostPolicyHostPolicyWhat every host it registers is told (HostPolicy without its host_id); unset tells them nothing, and they keep their own defaults until an operator says otherwise.

RekeyState is how far a disk’s re-key is.

One of: REKEY_STATE_UNSPECIFIED, REKEY_STATE_PENDING, REKEY_STATE_COPYING, REKEY_STATE_READY.

The repository a workspace opened, as its guest clones it: the project’s URL, the ref the workspace was opened at, and where on the disk it goes (projects.CheckoutPath). Part of the settings the owner approves, as the environment is: a disk is written to only as its owner said.

FieldTypeWhat it is
urlstring
refstring
pathstring
authorNamestringWho the checkout’s commits are by: the workspace’s owner’s name and email as the installation knows them, set as the checkout’s own user.name and user.email - the push goes as the team’s app, and the commit says the person. Empty is neither set.
authorEmailstring
commitstringcommit is the one a prebuild’s build checks out and runs create at; empty for a workspace a person opens, which follows the ref.
fromCommitstringfrom_commit is the commit the disk’s checkout already is, for a disk cloned from a prebuild: the guest holds the tree to it (git fsck, no tracked file changed) before it fetches.
prebuildIdstringThe prebuild the disk is a clone of, and the SHA-256 of the claim its host signed of it (PrebuildClaim): what the owner approves when the open was from one.
prebuildClaimDigeststring
pullRefstringpull_ref is a pull request’s ref as its forge serves it (refs/pull/<n>/head, GitLab’s refs/merge-requests/<n>/head), fetched once ref is cloned and checked out as pr-<n> or mr-<n>; empty for a workspace that opens at ref itself.
FieldTypeWhat it is
namestring
outcomestringfiltered, refused, upstream_failed or malformed.
atTimestamp

ResourcePreset is a class of workspace: its size, and how a workspace of it may grow. Every workspace is created from one.

FieldTypeWhat it is
idstring
namestringDisplay name (e.g., “Small”, “Medium”, “Large”)
descriptionstringDescription of the preset
cpuCoresinteger (int32)Number of CPU cores
memoryMbinteger (int32)Memory in megabytes
diskGbinteger (int32)Disk space in gigabytes
burstBurstMode
isDefaultbooleanThis is the default preset
enabledbooleanPreset is available for selection
sortOrderinteger (int32)Display order (lower = first)
createdAtTimestamp
updatedAtTimestamp
burstFloorCpuCoresinteger (int32)What a workspace of a burst mode starts with; at most cpu_cores and memory_mb.
burstFloorMemoryMbinteger (int32)
bandwidthMbpsinteger (int32)What a workspace of it may carry each way, in megabits a second; 0 is unshaped.
rpoSecondsinteger (int32)How far behind the object store a workspace of it may fall, in seconds; 0 is the installation’s (InstallationSettings.volume_rpo_seconds).

Resource allocation for workspaces. Initial values (cpu_cores, memory_mb) are used at boot time. Max values control scaling limits: - 0 = unlimited (burstable to host capacity) - >0 = hard limit (cannot exceed)

FieldTypeWhat it is
cpuCoresinteger (int32)Initial CPU cores at boot (default: 1)
memoryMbinteger (int32)Initial memory in MB at boot (default: 512)
diskGbinteger (int32)Disk size in GB (default: 10)
maxCpuCoresinteger (int32)Max CPU cores (0 = unlimited)
maxMemoryMbinteger (int32)Max memory in MB (0 = unlimited)
bandwidthMbpsinteger (int32)What a workspace’s network carries each way, in megabits a second (0 = unshaped): its preset’s, held on its host by a token bucket on each way out of its machine’s namespace. Its vsock - ssh, the editor, forwarded ports - is not shaped.

User’s uploaded SSH public key

FieldTypeWhat it is
idstring
namestringUser-provided name
fingerprintstringSHA256 fingerprint
publicKeystringFull public key
createdAtTimestampNo last_used_at: a user’s key authenticates inside the guest, over SSH, where the control plane is not, so the only honest answer it could give is “unknown”. Compare ApiKey.last_used_at, which the control plane stamps because it is the thing being presented to.

SecuritySettings contains security-related configuration

FieldTypeWhat it is
rateLimitRateLimitSettingsRate limiting configuration
sessionDurationHoursinteger (int32)Session configuration Session token lifetime in hours (default: 168 = 7 days)
allowWorkspaceSharingbooleanAccess control Allow users to share workspaces
allowPublicWorkspacesbooleanAllow publicly accessible workspace URLs
updatedAtTimestamp

What one of the cloud’s services cost on one day, in millionths of the bill’s currency.

FieldTypeWhat it is
servicestring
microsstring (int64)

ServiceHealth is one service over a window: the traces begun in it - what it was asked to do - how many failed and how long they took, and how many errors it logged.

FieldTypeWhat it is
servicestring
tracesstring (int64)
failedTracesstring (int64)
p50Millisnumber (double)
p95Millisnumber (double)
errorLogsstring (int64)
intervalslist of ServiceInterval
FieldTypeWhat it is
startTimestamp
tracesstring (int64)
failedTracesstring (int64)

One of: SIGNATURE_KIND_UNSPECIFIED, SIGNATURE_KIND_KEYRING, SIGNATURE_KIND_ROSTER.

SignedDocument is a document as framed JSON and an SSH signature over it (sshsig) - what ssh-keygen -Y sign writes, so a FIDO2 key signs one through ssh-agent, and a passkey’s WebAuthn assertion is one too (internal/sshauth).

FieldTypeWhat it is
documentstring (byte)
signaturestring (byte)

A snapshot is a rotation of a workspace’s volume, published as a commit. It has no name outside its id.

FieldTypeWhat it is
idstring
workspaceIdstring
descriptionstringUser-provided description
createdAtTimestamp
isPublicbooleanWhether snapshot is publicly visible
shareCountinteger (int32)Number of users snapshot is shared with
accessTypeSnapshotAccessTypeHow user has access
stateSnapshotState
withMemorybooleanwith_memory: the snapshot also kept the running machine’s memory, so restoring it resumes the processes where they were instead of booting the disk. The memory is on the host the workspace ran on.

Access type for snapshots

One of: SNAPSHOT_ACCESS_TYPE_UNSPECIFIED, SNAPSHOT_ACCESS_TYPE_OWNER, SNAPSHOT_ACCESS_TYPE_SHARED, SNAPSHOT_ACCESS_TYPE_PUBLIC.

A share record for a snapshot

FieldTypeWhat it is
idstring
snapshotIdstring
userIdstring
userEmailstring
userNamestring
grantedAtTimestamp
grantedBystring

How far along a snapshot is. A snapshot is taken by the host serving the volume, so it exists before it is usable: CREATING is the window between asking for one and the host reporting the commit it published.

One of: SNAPSHOT_STATE_UNSPECIFIED, SNAPSHOT_STATE_CREATING, SNAPSHOT_STATE_PUBLISHED, SNAPSHOT_STATE_FAILED, SNAPSHOT_STATE_DELETING.

Span is one operation of a trace, as OpenTelemetry names its parts.

FieldTypeWhat it is
traceIdstring
spanIdstring
parentSpanIdstringEmpty for the trace’s first span.
servicestring
namestring
startTimestamp
durationMicrosstring (int64)How long it took, in microseconds.
failedbooleanWhether it ended in an error, and what it said.
statusMessagestring
attributesStruct
eventslist of StructWhat happened during it, as the span recorded it: each event’s name, time and attributes.
FieldTypeWhat it is
kindStatusDisagreementKind
detailstringOne sentence naming both sides and the gap between them, for a person to read. The kind is what a script branches on.

One of: STATUS_DISAGREEMENT_KIND_UNSPECIFIED, STATUS_DISAGREEMENT_KIND_SUPERVISOR_STALE, STATUS_DISAGREEMENT_KIND_SUPERVISOR_ABSENT, STATUS_DISAGREEMENT_KIND_HOST_UNREACHABLE, STATUS_DISAGREEMENT_KIND_VOLUME_REFUSING, STATUS_DISAGREEMENT_KIND_UNHEALTHY.

StorageSettings is where the object store is: a bucket, or on one machine a directory.

FieldTypeWhat it is
bucketstring
endpointstringEmpty is the store’s own service for its region.
regionstring
accessKeyIdstringThe control plane’s own credential; empty is the machine’s own.
secretSetbooleanWhether the access key’s secret is set: the secret itself is never read back.
dirstring
principalstringWho the control plane issues each runner’s credential to the store as, as the store names it (for an S3 store, the role it assumes).
FieldTypeWhat it is
objectsstring (int64)
bytesstring (int64)

StoredVolume is one volume in the store: what is under volumes/<volume_id>/, and the layers its commits name under layers/.

FieldTypeWhat it is
volumeIdstring
kindStoredVolumeKind
namestringThe workspace’s name, the image’s ref, or the extension and its version.
workspaceIdstringThe workspace’s, for a workspace’s disk.
ownerEmailstring
currentbooleanWhether it is the workspace’s disk now, rather than one it had.
ownStorageTallyThe descriptor, HEAD, the epoch and the commit manifests.
layersStorageTally
checkpointsStorageTallyIts checkpoints’ memory and records.
removablebooleanWhether RemoveStoredVolume would take it: an image no ref names and nothing was cloned from, an extension release nothing runs, an unclaimed volume or an orphan.
untaggablebooleanAn image its ref still names, which UntagImage takes the ref off.
keptBecausestringWhy it stays, in words, where it is an image or a release that may not go.

One of: STORED_VOLUME_KIND_UNSPECIFIED, STORED_VOLUME_KIND_WORKSPACE, STORED_VOLUME_KIND_IMAGE, STORED_VOLUME_KIND_EXTENSION, STORED_VOLUME_KIND_UNCLAIMED, STORED_VOLUME_KIND_ORPHAN.

SupervisorState is what the supervisor inside a VM is doing. Here rather than beside the stream that carries it, because it is read from both sides: the supervisor reports it on its own connection (spin.agent.v1) and an operator asks for it through WorkspaceService.GetWorkspaceStatus. A vocabulary with two definitions is two vocabularies.

One of: SUPERVISOR_STATE_UNSPECIFIED, SUPERVISOR_STATE_INITIALIZING, SUPERVISOR_STATE_READY, SUPERVISOR_STATE_RUNNING_HOOK, SUPERVISOR_STATE_ERROR, SUPERVISOR_STATE_DISCONNECTED.

What the supervisor inside the guest last reported. Absent (connected false with a zero last_heartbeat) means no supervisor of this workspace has ever reached a control plane.

FieldTypeWhat it is
stateSupervisorState
versionstring
lastHeartbeatTimestamp
connectedbooleanWhether a control plane holds this supervisor’s stream right now. It is read from the durable row and not from the local connection table on purpose: a request may be served by a control plane other than the one the supervisor is attached to, and that one knows nothing about it.
healthHealthReport
FieldTypeWhat it is
idstring
parentIdstringEmpty if root team
namestring
slugstring
pathstringMaterialized path: “/engineering/backend”
depthinteger (int32)1, 2, or 3
descriptionstring
memberCountinteger (int32)Direct members only
workspaceCountinteger (int32)Direct workspaces only
createdAtTimestamp
updatedAtTimestamp
displayNamestringHuman-friendly name (falls back to name if empty)
isPersonalbooleanPersonal team for a single user (cannot be deleted or left by owner)
FieldTypeWhat it is
forgestring
appIdstring (int64)
installationIdstring (int64)
apiUrlstring
hostslist of string
updatedAtTimestamp
FieldTypeWhat it is
idstring
namestring
providerTypestringoidc, github, google, azure-ad
issuerUrlstring
autoJoinCelExpressionstringCEL expression for auto-membership
roleCelExpressionstringCEL expression for role assignment
enabledboolean
createdAtTimestamp
FieldTypeWhat it is
userIdstring
emailstring
namestring
roleTeamRole
joinedAtTimestamp

Team member role enum

One of: TEAM_ROLE_UNSPECIFIED, TEAM_ROLE_OWNER, TEAM_ROLE_ADMIN, TEAM_ROLE_MEMBER.

FieldTypeWhat it is
namestring
updatedAtTimestamp
hostslist of string
refstringWhere the team keeps the value; empty where the control plane does.

TelemetryFlow is what one exporter of the collector did over the last window.

FieldTypeWhat it is
sentstring (int64)
failedstring (int64)
FieldTypeWhat it is
idstring
emailstring
namestring
avatarUrlstring
subscriptionTierstring
createdAtTimestamp
isInstanceAdminboolean
disabledboolean
disabledReasonstring
FieldTypeWhat it is
dotfilesDotfilesConfig
startupTaskfilestringInline Taskfile YAML
defaultShellstringe.g., /bin/bash, /bin/zsh
editorSettingsmap of string to stringIDE preferences
defaultEnvmap of string to stringEnvironment variables
updatedAtTimestamp

VSCodeServerPublish is this control plane’s publish: the last one, or the one under way.

FieldTypeWhat it is
stateVSCodeServerPublishState
stepstringWhich part is running, while it works.
detailstringWhy it failed.
versionstringWhat it released, once it has.
updatedAtTimestamp

One of: VS_CODE_SERVER_PUBLISH_STATE_UNSPECIFIED, VS_CODE_SERVER_PUBLISH_STATE_IDLE, VS_CODE_SERVER_PUBLISH_STATE_WORKING, VS_CODE_SERVER_PUBLISH_STATE_PUBLISHED, VS_CODE_SERVER_PUBLISH_STATE_FAILED.

VolumeRekey is a workspace’s disk to re-key or being re-keyed.

FieldTypeWhat it is
volumeIdstring
workspaceIdstring
workspaceNamestring
stateRekeyState
hostIdstringThe host copying it, empty while pending.
reasonstring
FieldTypeWhat it is
idstring
namestring
teamIdstringEvery workspace has one: its owner’s personal team unless another was named
hostIdstring
imagestringContainer image used for this workspace
resourcesResources
stateWorkspaceState
urlstringOutput only: https://{name}.{base domain}; empty until setup records a domain
envmap of string to string
createdAtTimestamp
updatedAtTimestamp
snapshotCountinteger (int32)Number of snapshots in history
failureReasonstringReason for failure (only set when state=FAILED)
networkTagslist of stringThe network policies this workspace runs under, by name. Read back because what a workspace may reach is worth seeing without asking the host that enforces it.
hostConnectedbooleanhost_connected says the host this workspace is on is talking to the control plane now. A workspace’s state is its host’s last word, and a host that stops talking stops correcting it: RUNNING is not transitional, so nothing fails it and nothing moves it, and a workspace whose machine died with its host reads as healthy for ever. The honest answer is not a different state - a host that cannot be reached may be running the machine perfectly well behind a broken network - but to say that the state is old and why. False for a workspace with no host at all (a stopped one), so read it beside the state.
waitingReasonstringwaiting_reason is why a WAITING workspace has no host yet, as of the last attempt to place it: which runner was full of what, or that none is connected. Empty in every other state.
failureWorkspaceFailurefailure is which part failed when state=FAILED, UNSPECIFIED in every other state: what a client says a person can do is decided by it, and failure_reason is the detail.
networkWatchbooleannetwork_watch says its host records where it connects into its logs (SetWorkspaceNetworkWatch).
floorCpuCoresinteger (int32)What its preset started it at. resources.cpu_cores and memory_mb are what it holds now, and above these they are a grant (GrantWorkspaceResources).
floorMemoryMbinteger (int32)
grantExpiresAtTimestampWhen its grant is given back on its own; unset for one kept until it is given back, and for a workspace holding none.
quarantineHeldbooleanquarantine_held says a quarantine holds it: in force (state QUARANTINED), or asked for and its stop still on the way or ended FAILED. Until an administrator releases it, its own person cannot start, move or delete it, whatever the state says.
progressWorkspaceProgressprogress is where a transition is while one is under way - CREATING, STARTING, STOPPING, WAITING - and unset at rest: which attempt, why the one before failed, what the host is doing now, since when and until when before the control plane gives up on it.
allowedActionslist of WorkspaceActionallowed_actions are what the server takes from this workspace as it is: its state, a quarantine’s hold, and the failure it ended in. A client offers these and no others.
failureSummarystringfailure_summary says in a sentence what failed when state=FAILED, decided by failure: what a client shows above failure_reason, so the dashboard and the CLI say the same thing. What to do next is each client’s, from allowed_actions.
readyAtTimestampready_at is when the workspace’s supervisor answered for its current run: the workspace is usable, not only its machine handed off. Unset before, and while it is not running.
traceIdstringtrace_id is the trace of the request that asked for its current generation, which runs through the host’s operation and the state it reported. Empty when that request was not sampled.
durabilityWorkspaceDurabilitydurability is how much of what runs is in the object store. Answered by GetWorkspace only, and only for a workspace with a volume: a listing does not ask every volume.
rolestringrole is the caller’s in it: “owner”, or “guest” - who may connect, see it and open its ports, and nothing that changes it.
accessSignedbooleanaccess_signed is whether its owner has signed an access of it: nobody logs in until then.
memoryMachineGonebooleanmemory_machine_gone says it is suspended with memory taken on a machine no host of the installation registers now (WORKSPACE_FAILURE_MACHINE_CHANGED): a start cannot resume it, and WORKSPACE_ACTION_START_FROM_DISK, which drops the memory, is what is offered instead.
suspendsAtTimestampThe question before a suspension: when the installation suspends it unless somebody keeps it (KeepWorkspace), asked ten minutes ahead, and which of the two suspensions is due (WORKSPACE_EVENT_TYPE_IDLE_SUSPENDED or WORKSPACE_EVENT_TYPE_RUNNING_CAP_SUSPENDED). Unset while none is due within the warning: somebody used it since, or it is kept.
suspendsForWorkspaceEventType
keptUntilTimestampAn answer: kept awake until then, and neither suspension fires before it.
leaseslist of WorkspaceLeaseThe leases its processes hold, as its supervisor last reported them: while one is held and within the installation’s workspace_lease_max_minutes of its start, nobody is asked, nothing idle is suspended, and the running cap waits for the lease’s end.
projectIdstringThe project it opened and the ref it was opened at; empty for a workspace that opened none.
refstring
wakeOnAccessbooleanSuspended, it is resumed by a signed-in visitor of one of its published ports (OpenWorkspaceProxySession). Never by an anonymous one: that would undo the idle suspension for whoever has a public port’s URL.

WorkspaceAction is an act a person can ask of a workspace.

One of: WORKSPACE_ACTION_UNSPECIFIED, WORKSPACE_ACTION_START, WORKSPACE_ACTION_STOP, WORKSPACE_ACTION_FORCE_STOP, WORKSPACE_ACTION_DELETE, WORKSPACE_ACTION_FORCE_DELETE, WORKSPACE_ACTION_SUSPEND, WORKSPACE_ACTION_START_FROM_DISK.

What one workspace cost in the month, in millionths of the bill’s currency, and whose it was on the last day it cost anything.

FieldTypeWhat it is
workspaceIdstring
namestring
teamIdstring
teamNamestringEmpty where the team was deleted since.
ownerIdstring
ownerEmailstringEmpty where the owner was deleted since.
computeMicrosstring (int64)Its share of the runners: what it held of them.
storageMicrosstring (int64)Its share of the volumes’ bucket: what its volumes kept.
sentBytesstring (int64)What its traffic came to in the month: its machine’s network out and back, and its sessions - ssh, the editor, forwarded ports - through the relay, both ways. Counted, not yet costed.
receivedBytesstring (int64)
forwardedBytesstring (int64)

WorkspaceDurability is what of a running workspace is published, so it survives its host.

FieldTypeWhat it is
lastPublishedAtTimestamplast_published_at is when its last commit reached the object store, as its host last said.
unpublishedSecondsstring (int64)What is written and not yet published, as of the host’s report plus the time since.
unpublishedBytesstring (int64)
stalledbooleanstalled says publishing has not kept up with the bound it runs to (the volume’s RPO).
reportedAtTimestampreported_at is the host’s report these are as of.

Timeline event for workspace state changes

FieldTypeWhat it is
idstring
workspaceIdstring
typeWorkspaceEventType
timestampTimestamp
detailsstringAdditional info (JSON)

One of: WORKSPACE_EVENT_TYPE_UNSPECIFIED, WORKSPACE_EVENT_TYPE_CREATED, WORKSPACE_EVENT_TYPE_STARTED, WORKSPACE_EVENT_TYPE_STOPPED, WORKSPACE_EVENT_TYPE_SNAPSHOT_CREATED, WORKSPACE_EVENT_TYPE_DELETED, WORKSPACE_EVENT_TYPE_FAILED, WORKSPACE_EVENT_TYPE_RESTORED, WORKSPACE_EVENT_TYPE_RESUMED, WORKSPACE_EVENT_TYPE_BOOTED, WORKSPACE_EVENT_TYPE_QUARANTINED, WORKSPACE_EVENT_TYPE_UNQUARANTINED, WORKSPACE_EVENT_TYPE_PLACED, WORKSPACE_EVENT_TYPE_TRASHED, WORKSPACE_EVENT_TYPE_UNDELETED, WORKSPACE_EVENT_TYPE_MOVED, WORKSPACE_EVENT_TYPE_DISPLACED, WORKSPACE_EVENT_TYPE_STOP_BACKUP_FAILED, WORKSPACE_EVENT_TYPE_IDLE_SUSPENDED, WORKSPACE_EVENT_TYPE_RUNNING_CAP_SUSPENDED, WORKSPACE_EVENT_TYPE_SUSPENSION_DUE, WORKSPACE_EVENT_TYPE_KEPT, WORKSPACE_EVENT_TYPE_UNRESPONSIVE.

WorkspaceFailure is why a FAILED workspace failed: which part of its run, closed so what a person can do about it - and a failure rate split by the repair it needs - is decided by the kind rather than by the text of an error. The reason beside it is the detail. One enum for the client and the host’s report (spin.agent.v1.ObservedWorkspace): the kind a person is shown is the one the host named, with no second list to keep in step.

One of: WORKSPACE_FAILURE_UNSPECIFIED, WORKSPACE_FAILURE_VOLUME, WORKSPACE_FAILURE_EXTENSION, WORKSPACE_FAILURE_NETWORK, WORKSPACE_FAILURE_RESOURCES, WORKSPACE_FAILURE_MACHINE, WORKSPACE_FAILURE_GUEST, WORKSPACE_FAILURE_RELEASE_GONE, WORKSPACE_FAILURE_EXITED, WORKSPACE_FAILURE_STOP, WORKSPACE_FAILURE_TIMED_OUT, WORKSPACE_FAILURE_NO_HOST, WORKSPACE_FAILURE_MACHINE_CHANGED.

Whether the machine’s host is reachable at all. A workspace cannot be healthier than the host under it, and “my workspace is broken” is most often this.

FieldTypeWhat it is
hostIdstring
stateHostState
lastHeartbeatTimestamp

WorkspaceLease is a process in the workspace keeping it awake while it lives.

FieldTypeWhat it is
namestringname is the command, or the .spin.yaml task, that holds it.
sinceTimestamp
untilTimestampuntil is when the lease stops counting whether or not the process lives: since plus the installation’s workspace_lease_max_minutes.

WorkspacePhase is what a host is doing to bring a workspace up.

One of: WORKSPACE_PHASE_UNSPECIFIED, WORKSPACE_PHASE_DISK, WORKSPACE_PHASE_EXTENSIONS, WORKSPACE_PHASE_NETWORK, WORKSPACE_PHASE_MACHINE, WORKSPACE_PHASE_FIRST_BOOT, WORKSPACE_PHASE_GUEST, WORKSPACE_PHASE_BACKUP.

WorkspaceProgress is a transition under way.

FieldTypeWhat it is
attemptinteger (int32)attempt is the host’s attempt at the current generation, from 1, and attempts how many it makes before the workspace fails. Zero before the host has made one.
attemptsinteger (int32)
lastFailureWorkspaceFailureWhy the attempt before this one failed, while this one is in progress: what a retry hides.
lastReasonstring
phaseWorkspacePhasephase is what the host is doing now; UNSPECIFIED when it has not said.
sinceTimestampsince is when the transition began, and deadline when the control plane gives up on it - a wait for a host, or a start or a stop the host does not finish - and fails the workspace.
deadlineTimestamp

Proxy status for workspace access

One of: WORKSPACE_PROXY_STATUS_UNSPECIFIED, WORKSPACE_PROXY_STATUS_ACCESSIBLE, WORKSPACE_PROXY_STATUS_NOT_RUNNING, WORKSPACE_PROXY_STATUS_NOT_FOUND, WORKSPACE_PROXY_STATUS_PORT_NOT_EXPOSED, WORKSPACE_PROXY_STATUS_WAKING.

WorkspaceRuntime is a running workspace’s machine as its host measures it from outside the guest. Answers “is my workspace out of memory” and “did it get the cores it borrowed” for the one person asking, which no metric may: those are labelled by host, never by workspace.

FieldTypeWhat it is
cpuCoresinteger (int32)
memoryBytesstring (int64)
memoryUsedBytesstring (int64)
cpuSecondsnumber (double)
machineStartedAtTimestamp

Workspace states

One of: WORKSPACE_STATE_UNSPECIFIED, WORKSPACE_STATE_CREATING, WORKSPACE_STATE_STARTING, WORKSPACE_STATE_RUNNING, WORKSPACE_STATE_STOPPING, WORKSPACE_STATE_STOPPED, WORKSPACE_STATE_FAILED, WORKSPACE_STATE_DELETED, WORKSPACE_STATE_WAITING, WORKSPACE_STATE_QUARANTINED.

FieldTypeWhat it is
workspaceIdstring
errorstring

Whether the disk under the workspace is being served. refusal is the token an alert keys on; refusal_detail is the sentence the agent sent with it.

FieldTypeWhat it is
volumeIdstring
statestring
refusalstring
refusalDetailstring

WritebackPreset is a pair of writeback thresholds measured on a Spin OS metal host (NVMe, a 4 KiB write+fsync in one workspace beside another writing 2 GiB flat out).

FieldTypeWhat it is
namestringname is how the preset is told apart; label is how a person is shown it.
labelstring
limitBytesstring (int64)Both zero is unset.
backgroundBytesstring (int64)
measuredstringmeasured is what it did, in words.

WritebackRun mirrors spin.agent.v1.WritebackRun, which is what the host reports.

FieldTypeWhat it is
writerBytesPerSecondstring (int64)
probeP50Usstring (int64)
probeP99Usstring (int64)
probeMaxUsstring (int64)
probesinteger (int32)

WritebackTest is one TestHostWriteback: the thresholds tested, both runs, and until when SetHostPolicy takes those thresholds for that host on the strength of it.

FieldTypeWhat it is
hostIdstring
limitBytesstring (int64)
backgroundBytesstring (int64)
candidateWritebackRuncandidate ran under the thresholds above, current under the ones the host held.
currentWritebackRun
testedAtTimestamp
expiresAtTimestamp

Generated by task reference from spin/internal/controlplane/apidocs/spin.v1.openapi.json at 8eee32b9d.

Documents Spinbox v20261019.02. This page as Markdown, for a model or a terminal.