Skip to main content
Private Preview·Early access by invitation.Request access →
Kirimana.
Docs · Authoring

Editing kiri.yml — the project config reference

kiri.yml sits at the repo root and configures the whole project: identity, adapter, connection targets, silver technique, naming, secrets, and governance. This page documents every block. Field types come from the canonical ProjectConfig model; where a field is an enum, only the listed values validate.

Validate any change with:

uv run kiri project validate --project .

The complete sales example is at examples/sales/kiri.yml.

Minimal project

Only name and adapter are strictly required; a usable project also needs at least one target and a default_target:

name: sales-demo
version: 0.1.0
adapter: localduckdb
default_target: localduckdb
targets:
  localduckdb:
    path: ./.kiri/warehouse.duckdb
    bronze_root: ./.kiri/bronze
    schema: bronze
silver:
  technique: flat
vault:
  kind: env

Identity

FieldRequiredType / valuesNotes
nameyesstringProject name. Also the default job-name prefix (see orchestration).
versionnostring (default 0.1.0)Project version.
adapteryesstringRuntime adapter, e.g. localduckdb, databricks. Exercised runtimes today are DuckDB + Databricks.
layoutnoper_domain | per_source (default per_domain)How source/contract files are organised on disk.
modenocontract | auto | hybrid (default contract)DPA authoring mode. contract = you own the YAML.
default_targetnostringWhich targets entry to use when --target is omitted.

targets — connection profiles

A map of named environments (e.g. dev, test, prod, or localduckdb). Each entry is a free-form profile the adapter reads; fields depend on the adapter.

targets:
  localduckdb:                      # local dev — no cloud
    path: ./.kiri/warehouse.duckdb
    bronze_root: ./.kiri/bronze
    schema: bronze
  prod:                             # Databricks
    adapter: databricks             # per-target adapter override (optional)
    host: https://adb-xxxx.azuredatabricks.net
    http_path: /sql/1.0/warehouses/abc123
    warehouse_id: abc123
    catalog: sales_prod
    schema: bronze
    governance_schema: sales_governance
    bronze_root: ./.kiri/bronze
    auth_type: azure-sp             # adapter-specific; see below
    token: ${vault:databricks/prod:token}

Common target fields:

FieldApplies toNotes
pathlocalduckdbDuckDB file path.
host / http_path / warehouse_iddatabricksSQL warehouse endpoint.
catalog / schemadatabricksConnection defaults; per-model routing may override (see naming.catalog_pattern).
governance_schemaallSchema for governance/audit objects.
bronze_rootallLocal staging root for landed files.
auth_typedatabricksAuthentication mode. Adapter-specific; common values: azure-sp (Azure-AD service principal), oauth_m2m (OAuth machine-to-machine), or a token/PAT supplied via ${vault:}.
tokendatabricksSecret reference (${vault:...}), never a literal.
ingest_volumedatabricksUC Volume used to stage landing files for read_files().
landing_storagedatabricksCloud landing block for production.
libraries / project_volume / new_clusterdatabricksScheduled-Job compute for kiri flows sync: the wheel + synced project + job cluster.

Secrets in any target use ${vault:<id>:<key>} (see vault).

sources — where raw data comes from

A map of named source systems. Database sources (e.g. SQL Server) declare a connection; REST sources declare an endpoint. Authentication follows the same no-plaintext rule.

sources:
  crm:                              # a database source
    host: sql.example.com
    database: crm_db
    port: 1433
    authentication: aad_az_cli      # Entra token from the ambient az session
  catalog_api:                      # a REST source
    base_url: https://api.example.com/v1
    auth: ${vault:catalog_api:token}

For the full add-a-source walkthrough see Adding a source.

silver — the silver technique

silver:
  technique: flat                   # flat | data_vault | kimball_dimensional | scd2_curated
  emit_curated_history: true        # meaningful for scd2_curated
  data_vault:                       # only when technique=data_vault
    execution_backend: native       # native | datavault4dbt
FieldType / valuesNotes
techniquerequiredflat | data_vault | kimball_dimensional | scd2_curatedProject-wide silver strategy. Locked after the first silver contract.
emit_curated_historybool (default true)For scd2_curated: whether to emit the __curated SCD2-history peer alongside the standardized table.
data_vault.execution_backendnative | datavault4dbtOnly valid when technique=data_vault.

To change technique later, see the task Switch silver technique.

naming — object names and catalog pattern

naming:
  preserve_verbatim: true                     # byte-for-byte declared names
  catalog_pattern: "{env}_dp_{domain}_{layer}" # renders each layer's catalog
FieldTypeNotes
preserve_verbatimboolWhen true, physical names equal declared names exactly (case + diacritics). Required for exact-match migrations.
catalog_patternstringTemplate for per-layer catalog names. Closed token set: {env}, {domain}, {layer} — any other {token} is rejected at parse time. Literal text between tokens is emitted verbatim. When set, layer manifests leave targets.<env>.catalog blank.
medallionblockPer-layer schema-name overrides (bronze/silver/gold, plus named silver zones).
dv / kimballblocksTechnique-specific naming (hub/link/sat suffixes; dim/fact prefixes).

Concepts and the schema registry: Naming, catalog and the schema registry.

orchestration — scheduled-job naming

orchestration:
  job_name_prefix: dp_sales_        # compiled jobs become dp_sales_<flow>
FieldTypeNotes
job_name_prefixstring | omitPrefix for compiled Databricks Workflows job names. Omit to accept the neutral project-slug default (<name>_).

vault — secret resolution

vault:
  kind: env                         # env | azure | aws
  prefix: ""                        # optional id prefix, e.g. "kirimana/"
  vault_url: null                   # for kind=azure/aws

${vault:<id>:<key>} references anywhere in the project resolve through this backend. kind: env reads $KIRIMANA_* environment variables.

governance and domains

governance:
  mode: light                       # light | enterprise (approval tiers)
domains:
  sales:
    owners: [sales-data@example.com]
    default_classification: internal
    retention_days: 3650
    approval_policy:
      default_approvers: 1
      classification_raise_approvers: 2
      cross_domain_consumption_approvers: 2
BlockFieldNotes
governancemodelight (single-approver, default) or enterprise (two-approver on destructive actions).
domains.<name>ownersDomain owner emails.
default_classificationDefault kiri.classification for the domain.
retention_daysDefault retention.
approval_policy.*Approver counts per action class.

Other blocks (optional)

BlockPurposeReference
semantic_layerRegenerate BI-tool semantic-layer files on apply.Consuming gold for BI
audit / complianceAudit-log + compliance-report settings.Security and compliance
incidentsITSM incident dispatch.
reconcilePost-migration cross-engine reconcile.Backfill and reprocess
sizingCompute-sizing hints.
project_chunksChunk-awareness for large projects.
allow_legacy_source_fallbackPermit uncontracted ingest during migration (emits a warning).

See also

Updated 8 July 2026 · v1.0.0-beta.1