Categorical Configuration Language
Configuration that reads like plain text.
CCL stores everything as readable key = value pairs. Indentation makes
hierarchy. Comments and multiline values come standard.
Need exact parser behavior? Skip to the parser validation path.
/= Clear rows are easy for people, parsers, and AI toolsname = Example Siteversion = 1.0.0
database = /= Indentation creates hierarchy host = localhost port = 5432
allowed origins = = https://example.com = https://www.example.comIndented rows resolve into the same tree for humans, parsers, and AI tools.
One rule
Indentation becomes structure.
CCL keeps the file readable while giving implementers one predictable rule: each indented line belongs to the nearest parent above it.
parent = nearest less-indented row Same result for people, parsers, and AI tools.
1 service = api 2 database = 3 host = localhost 4 pool = 5 min = 2 6 max = 10 - service
api - database
- host
localhost - pool
- min
2 - max
10
- min
- host
The same config, easier to read
CCL keeps the same structure with less punctuation to scan. Compare a small service config in CCL and JSON.
service = apiport = 8080
retries = count = 3 backoff = 250ms{ "service": "api", "port": 8080, "retries": { "count": 3, "backoff": "250ms" }}same tree, fewer tokens to scan.
Pick your path
Start with the language, or verify parser behavior when exact results matter.
Turn the model into a file.
Write a small CCL config, then keep the syntax rules open when you need exact parser behavior.