Komposer

2 min read

A Komposer is a Katalog with an imports block. The separate kind is intentional — it keeps composition explicit and prevents collapsing imported operator specs into a single undifferentiated Katalog.

A Komposer cannot import another Komposer — only kind: Katalog files are valid import targets.

Wire format

apiVersion: orkestra.orkspace.io/v1   # required
kind: Komposer                         # required

metadata:
  name: platform                       # required

imports:
  files:
    - ...
  helm:
    - ...
  registry:
    - ...

# Optional inline overrides — merged last, win on name conflict
spec:
  crds:
    <name>:
      ...

# Same top-level fields as Katalog
security:
  ...
notification:
  ...
providers:
  - ...

imports.files

imports:
  files:
    - ./katalogs/local.yaml
    - https://raw.githubusercontent.com/org/repo/main/katalog.yaml
    - $MY_KATALOG_URL

    # Authenticated
    - url: https://private.example.com/katalog.yaml
      auth:
        type: bearer
        fromEnv: MY_TOKEN
FieldDescription
urlLocal path, HTTPS URL, or $ENV_VAR reference.
auth.typebearer, basic, or github.
auth.fromEnvEnvironment variable holding the token or password.

imports.helm

imports:
  helm:
    - repo: https://charts.example.com
      chart: platform-crds
      version: 1.2.0
      valueFiles:
        - ./values/prod.yaml
      values:
        region: us-east-1
FieldRequiredDescription
repoyesHelm chart repository URL.
chartyesChart name within the repo.
versionyesChart version. Pin this for reproducibility.
valueFilesnoValues files (local paths or remote URLs).
valuesnoInline key-value overrides.

Orkestra renders with helm template and scans for kind: Katalog documents in the output.

imports.registry

imports:
  registry:
    - url: $ORK_REGISTRY
      katalog:
        postgres:
          branch: main
        redis:
          branch: v7

    - url: oci://ghcr.io/myorg/patterns/postgres:v14
      oci: true
FieldDescription
urlRegistry URL or $ENV_VAR. Also set via ORK_REGISTRY env var or --registry flag.
ocitrue for OCI artifact references.
useKomposerLoad the upstream komposer.yaml instead of katalog.yaml.

Resolution order

1. imports.registry
2. imports.files
3. imports.helm
4. spec.crds   (inline — wins on name conflict)

CRD names must be unique across all imports. A duplicate name is a hard error.

Top-level field accumulation

FieldMerge strategy
securityKomposer’s setting wins on conflict.
notification.teamsUnion of all imports; Komposer wins on duplicate team name.
providersUnion; deduplicated by name.

→ Next: motif.md