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.
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