Skip to content
rise.Operator docs
GitHub

Schema Reference

These schemas are generated from the Rust types in crates/rise-resource-api/ and are byte-identical across runs. They are regenerated and verified in CI via:

Terminal window
mise run resource:schema:generate
mise run resource:schema:check

The raw JSON files live under /operator-docs/schemas/ (linked from each section). Tooling can consume them directly: JSON Schema Draft 2020-12.

The wire envelope for any resource — built-in or external. spec and status are generic (kind-specific shapes are validated by typed validators for built-ins and JSON Schema for external custom resources).

FieldTypeRequiredDescription
apiVersionstringyes
kindstringyes
metadataResourceMetadatayes
specobject<string, any>no
statusobject<string, any>no
Nested types (2)

OwnerReference

FieldTypeRequiredDescription
apiVersionstringyes
blockOwnerDeletionbooleanno default: false
kindstringyes
namestringyes
uidstringyes

ResourceMetadata

FieldTypeRequiredDescription
annotationsobject<string, string>no default: {}
deletionTimestampstring | nullno
discriminatorstring | nullno
effectiveLabelsobject<string, string>noEvery label key in force on this resource, resolved nearest-wins down its ancestry (ADR-0001 §6.1). Computed on read from the ancestor chain, never stored: this is the same walk authorization performs, so the value a client sees and the value a `labelSelector` matches can never disagree. Responses built without an ancestor chain leave it empty rather than repeating `labels`, which would claim an inheritance answer nobody resolved.
finalizersarray<string>no default: []
labelsobject<string, string>noTargeting metadata. A key becomes access-relevant exactly when some policy binding's `labelSelector` references it (ADR-0001 §6.1); no key carries authorization meaning on its own.
namestringyes
ownerReferencesarray<OwnerReference>no
revisioninteger | nullno
uidstring | nullno

Standard metadata fields common to every resource. The fields uid, revision, discriminator, and deletionTimestamp are server-controlled (rejected on create; only revision is required on update).

ResourceMetadata

Download JSON
FieldTypeRequiredDescription
annotationsobject<string, string>no default: {}
deletionTimestampstring | nullno
discriminatorstring | nullno
effectiveLabelsobject<string, string>noEvery label key in force on this resource, resolved nearest-wins down its ancestry (ADR-0001 §6.1). Computed on read from the ancestor chain, never stored: this is the same walk authorization performs, so the value a client sees and the value a `labelSelector` matches can never disagree. Responses built without an ancestor chain leave it empty rather than repeating `labels`, which would claim an inheritance answer nobody resolved.
finalizersarray<string>no default: []
labelsobject<string, string>noTargeting metadata. A key becomes access-relevant exactly when some policy binding's `labelSelector` references it (ADR-0001 §6.1); no key carries authorization meaning on its own.
namestringyes
ownerReferencesarray<OwnerReference>no
revisioninteger | nullno
uidstring | nullno
Nested types (1)

OwnerReference

FieldTypeRequiredDescription
apiVersionstringyes
blockOwnerDeletionbooleanno default: false
kindstringyes
namestringyes
uidstringyes

The shape of status for kinds that surface controller-owned status. Each entry under controllers is keyed by the calling Controller’s resource name.

ControllerStatusMap

Download JSON
FieldTypeRequiredDescription
controllersobject<string, any>no

The built-in Organization resource — root-scoped (apiVersion: rise.dev/v1alpha1, kind: Organization). spec.deploymentControllerClass is the controller identifier that owns this org’s deployments; the Kubernetes controller reconciles only orgs whose value matches its configured controller_class_name. The default organization additionally carries an annotation kubernetes.rise.dev/namespace-prefix that the Kubernetes controller uses to build per-project namespace names.

Organization

Download JSON
FieldTypeRequiredDescription
apiVersionstringyes
kindstringyes
metadataResourceMetadatayes
specOrganizationSpecno
statusOrganizationStatusno
Nested types (4)

OrganizationSpec

FieldTypeRequiredDescription
deploymentControllerClassstring | nullno
displayNamestringyes

OrganizationStatus

FieldTypeRequiredDescription
controllersobject<string, any>no

OwnerReference

FieldTypeRequiredDescription
apiVersionstringyes
blockOwnerDeletionbooleanno default: false
kindstringyes
namestringyes
uidstringyes

ResourceMetadata

FieldTypeRequiredDescription
annotationsobject<string, string>no default: {}
deletionTimestampstring | nullno
discriminatorstring | nullno
effectiveLabelsobject<string, string>noEvery label key in force on this resource, resolved nearest-wins down its ancestry (ADR-0001 §6.1). Computed on read from the ancestor chain, never stored: this is the same walk authorization performs, so the value a client sees and the value a `labelSelector` matches can never disagree. Responses built without an ancestor chain leave it empty rather than repeating `labels`, which would claim an inheritance answer nobody resolved.
finalizersarray<string>no default: []
labelsobject<string, string>noTargeting metadata. A key becomes access-relevant exactly when some policy binding's `labelSelector` references it (ADR-0001 §6.1); no key carries authorization meaning on its own.
namestringyes
ownerReferencesarray<OwnerReference>no
revisioninteger | nullno
uidstring | nullno

The built-in ResourceDefinition resource that registers custom resource kinds. Identity fields (group, kind, plural, parent) become immutable once instances exist. See Custom Resources for the registration flow and version lifecycle.

ResourceDefinition

Download JSON
FieldTypeRequiredDescription
apiVersionstringyes
kindstringyes
metadataResourceMetadatayes
specResourceDefinitionSpecno
statusResourceDefinitionStatusno
Nested types (6)

OwnerReference

FieldTypeRequiredDescription
apiVersionstringyes
blockOwnerDeletionbooleanno default: false
kindstringyes
namestringyes
uidstringyes

ResourceDefinitionSpec

FieldTypeRequiredDescription
groupstringyes
kindstringyes
parentResourceParentRef | nullnoThe resource is root-scoped when this is absent; otherwise it must live under a parent of the referenced API group and kind.
pluralstringyes
versionsarray<ResourceDefinitionVersion>yes

ResourceDefinitionStatus

FieldTypeRequiredDescription
controllersobject<string, any>no

ResourceDefinitionVersion

FieldTypeRequiredDescription
namestringyes
schemaanyno
servedbooleanyes
storagebooleanyes

ResourceMetadata

FieldTypeRequiredDescription
annotationsobject<string, string>no default: {}
deletionTimestampstring | nullno
discriminatorstring | nullno
effectiveLabelsobject<string, string>noEvery label key in force on this resource, resolved nearest-wins down its ancestry (ADR-0001 §6.1). Computed on read from the ancestor chain, never stored: this is the same walk authorization performs, so the value a client sees and the value a `labelSelector` matches can never disagree. Responses built without an ancestor chain leave it empty rather than repeating `labels`, which would claim an inheritance answer nobody resolved.
finalizersarray<string>no default: []
labelsobject<string, string>noTargeting metadata. A key becomes access-relevant exactly when some policy binding's `labelSelector` references it (ADR-0001 §6.1); no key carries authorization meaning on its own.
namestringyes
ownerReferencesarray<OwnerReference>no
revisioninteger | nullno
uidstring | nullno

ResourceParentRef

FieldTypeRequiredDescription
apiVersionstringyes
kindstringyes

These are generated by separate commands (backend config-schema, backend rise-toml-schema), not by backend schemas generate. They are kept separate to avoid two code paths for the same artifact.

  • Backend settings schema
  • rise.toml schema: docs/user/public/schemas/rise-toml-v1.schema.json — served by the user docs site at /schemas/rise-toml-v1.schema.json