Deployments
Deployments
Components, releases, deployment zones, and the append-only deployment journal — the runtime pillar of the control plane, and why it sits next to the contract.
Why release tracking lives here
The commercial contract already knows every instance, the customer it belongs to, and what that customer is entitled to. Release tracking adds the other half of the same fact: which versions of your product each instance runs. Kaiten keeps both halves in one model, so a question such as "Sakura Tokyo's License grants delivery tracking — does its instance run the release that ships it?" is answered by reading one set of records, with the same slugs on both sides.
Most stacks hold this knowledge in several places: the delivery pipeline knows what was shipped, an inventory knows which customer runs where, and the commercial system knows what was sold. Putting what runs where beside who bought what makes the separate inventory redundant. It does not move the pipeline: your CI/CD, registries, and runners keep shipping the artifacts; Kaiten records the landing and exposes it to the contract, to targeting rules, and to the audit trail.
The four entities
Component — one building block of your product at one version: name plus version, unique together within your organization. Successive versions chain through previousComponentId, so Delivery Service 0.9.0 → 1.0.0 is two components linked into one history. A component that no release has bundled yet can be edited in place; once a release bundles it, edits produce the next version instead.
Release — a versioned bundle of components, the shippable unit. Its component list is fixed at creation and there is no update endpoint: Kaiten Sushi Shop's 2026.8.0, the release that introduces real-time delivery tracking, bundles API and Web App at 2026.8.0, Kitchen Display 1.2.0, and Delivery Service 1.0.0, and it will bundle exactly those four for as long as it exists.
Deployment zone — a logical execution environment where instances run, shared by many customers' instances or dedicated to one. Kaiten Sushi Shop runs shared-eu, shared-apac, and sakura-dedicated, all three production zones; a dedicated metadata field says which one serves a single customer. A zone points at the release it currently runs (releaseId), carries typed metadata, and is what an instance optionally attaches to — the instance runs whatever its zone runs.
Deployment — the append-only journal. Every time a zone's current release changes, one entry is appended: the release, the zone, the moment, the actor. Entries are never edited, and are removed only with their zone, so the journal is the history of every zone and of every release. Kaiten Sushi Shop's journal reads as a progressive rollout: 2026.7.0 in all three zones, then, about five weeks later, 2026.8.0 in shared-eu and shared-apac — while sakura-dedicated still runs 2026.7.0.
How it works
- Register components as your product's building blocks ship —
POST /components, one entry per version, chained to the previous one. - Cut a release that bundles the component versions you are shipping together —
POST /releaseswith their ids. From this point the bundle is a fact. - Model your zones —
POST /deployment-zonesfor each place instances run, with its environment class astypeand the metadata your organization declared. - Record each landing by pointing the zone at the release —
PUT /deployment-zones/{slug}with the newreleaseId. Kaiten appends the journal entry and emitsRELEASE_DEPLOYED. - Attach instances to zones at creation or later. What an instance runs is then derived from its zone, and targeting rules can read the zone an instance runs in.
Everything on these pages is scoped to your organization: components, releases, zones, and the journal are yours alone, like every other record in the model.
In this section
Components & Releases
The versioned brick and the immutable bundle — creation, versioning, the immutability rule, and what the API exposes.
Deployment Zones
Shared and dedicated zones, what a zone models, and how instances attach to one.
Deployments & Lifecycle
Recording a deployment, reading the journal, the instance linkage, and the states the model carries.
API endpoints overview
Scopes follow the module: read:components / write:components, read:releases / write:releases, read:deployment_zones / write:deployment_zones; the instance linkage uses write:instances. See scopes.
Components
| Method | Endpoint | Description |
|---|---|---|
GET | /components | List components (cursor-paginated) |
POST | /components | Create a component, optionally derived from a previous version |
GET | /components/{slug} | Get a component |
PUT | /components/{slug} | Update in place when unlinked; create the next version when a release bundles it |
DELETE | /components/{slug} | Delete a component not linked to any release |
Releases
| Method | Endpoint | Description |
|---|---|---|
GET | /releases | List releases (cursor-paginated) |
POST | /releases | Create a release and link its components |
GET | /releases/{slug} | Get a release with its components |
DELETE | /releases/{slug} | Delete a release that was never deployed — refused with 409 once the journal names it, or while another release names it as its predecessor |
Deployment zones
| Method | Endpoint | Description |
|---|---|---|
GET | /deployment-zones | List zones (cursor-paginated) |
POST | /deployment-zones | Create a zone; a releaseId records its first deployment |
GET | /deployment-zones/{slug} | Get a zone, including its current releaseId |
PUT | /deployment-zones/{slug} | Update a zone; a changed releaseId records a deployment |
DELETE | /deployment-zones/{slug} | Delete a zone |
Instance linkage
| Method | Endpoint | Description |
|---|---|---|
POST | /instances | deploymentZoneId places the new instance in a zone |
PUT | /instances/{slug} | A different deploymentZoneId moves the instance to another zone |
Events
| Event name | Event type |
|---|---|
COMPONENT_CREATED | com.kaiten.component.v1.created |
COMPONENT_UPDATED | com.kaiten.component.v1.updated |
COMPONENT_DELETED | com.kaiten.component.v1.deleted |
RELEASE_CREATED | com.kaiten.release.v1.created |
RELEASE_DELETED | com.kaiten.release.v1.deleted |
DEPLOYMENT_ZONE_CREATED | com.kaiten.deployment_zone.v1.created |
DEPLOYMENT_ZONE_UPDATED | com.kaiten.deployment_zone.v1.updated |
DEPLOYMENT_ZONE_DELETED | com.kaiten.deployment_zone.v1.deleted |
RELEASE_DEPLOYED | com.kaiten.deployment_zone.v1.release_deployed |
INSTANCE_DEPLOYED | com.kaiten.instance.v1.deployed |
INSTANCE_MIGRATED | com.kaiten.instance.v1.migrated |
The event catalog lists every event with its payload; events and webhooks explains the two delivery paths.
Where to go next
The one-screen version of this pillar is the concept page Releases & Deployments. Exact reference — tables, columns, constraints: the releases and deployments section of the data model.
Usage & Thresholds
The two numbers on the grant that decide enforcement, the allowance arithmetic, the exact refusal, the three crossing signals, and how every report and every closed window lands in the audit trail.
Components & Releases
The component as a versioned brick and the release as an immutable bundle of component versions — creation, versioning, the immutability rule, and the associations the API exposes.