Config File
chant uses a chant.config.ts file at the project root for configuration.
Minimal Config
Section titled “Minimal Config”export default { lexicons: ["aws"],};Full Config
Section titled “Full Config”export default { lexicons: ["aws"],
lint: { extends: ["@intentius/chant/lint/presets/strict"],
rules: { "EVL001": "error", "COR002": "warning", "COR009": "off", },
overrides: [ { files: ["src/legacy/**/*.ts"], rules: { "EVL001": "warning", "COR005": "off", }, }, ],
plugins: ["./lint-rules/org-standards.ts"], },};Fields
Section titled “Fields”lexicons
Section titled “lexicons”An array of lexicon names the project uses.
ownership
Section titled “ownership”Opt-in cloud-side ownership marking. When stack is set, the serializer stamps a chant ownership marker carrying this stack (and optional env) identity onto every supported resource at synthesis time:
ownership: { stack: "billing", // stamped onto every resource (enables marking) env: "prod", // optional environment identity // enabled: false, // set to disable without removing the block}The marker is the record that later lets delete be precise without an authoritative state file — ownership lives on the cloud resource, not in a file chant has to host or lock. It is stamped into each target’s native metadata channel:
| Channel | Targets | Keys |
|---|---|---|
| Labels | Kubernetes, GCP (Config Connector) | app.kubernetes.io/managed-by=chant, chant.intentius.io/stack, chant.intentius.io/env |
| Tags | AWS | chant:managed-by=chant, chant:stack, chant:env |
| Tags | Azure | chant-managed-by=chant, chant-stack, chant-env |
The marker carries stack identity, not just managed=true, so one stack never mistakes another’s resources for its own. Ownership means “carries chant’s marker”, not “carries only chant’s marker” — co-stamping with other tools (ArgoCD, Terraform) is fine, and explicit per-resource tags/labels win on key collisions. Walk-away cost stays zero: these are standard tags/labels, nothing proprietary.
environments
Section titled “environments”An optional array of environment names the project deploys to. An environment is just a named identity chant threads through the operational layer — there is no per-environment config block to maintain.
environments: ["local", "staging", "prod"],--env <name> selects one and defaults to local when omitted. The selected environment is what chant lifecycle diffs against, the env identity stamped into the ownership marker, and the key the component release ledger records each deploy under — as in chant run --components <name> --env <env> and chant components status <env>.
lint.extends
Section titled “lint.extends”An array of preset configuration paths to inherit from:
extends: ["@intentius/chant/lint/presets/strict"]lint.rules
Section titled “lint.rules”A map of rule ID to severity or [severity, options] tuple:
rules: { "EVL001": "error", "COR009": ["warning", { max: 12 }],}lint.overrides
Section titled “lint.overrides”File-specific rule overrides using glob patterns:
overrides: [ { files: ["src/legacy/**/*.ts"], rules: { "EVL001": "warning" }, },]lint.plugins
Section titled “lint.plugins”An array of plugin paths to load custom lint rules:
plugins: ["./lint-rules/org-standards.ts"]Config Resolution
Section titled “Config Resolution”- Load
chant.config.tsfrom the project root - Resolve and merge all
extendspresets (in order) - Apply local
ruleson top - Load
plugins - At lint time, apply
overridesto matching files