Skip to content

Categorical Configuration Language

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 tools
name = Example Site
version = 1.0.0
database =
/= Indentation creates hierarchy
host = localhost
port = 5432
allowed origins =
= https://example.com
= https://www.example.com

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

Readable file 1 service = api 2 database = 3 host = localhost 4 pool = 5 min = 2 6 max = 10
Resolved tree
  • service api
  • database
    • host localhost
    • pool
      • min 2
      • max 10

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.

CCL · key = value
service = api
port = 8080
retries =
count = 3
backoff = 250ms
JSON · braces
{
"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.

project = first-ccl-file format = readable parser = same tree