Every sufficiently advanced configuration language is the wrong tool for the job.

For basic configuration, YAML or JSON is usually good enough. It falls apart when you try to do more:

These are anti-patterns and often cause more issues than they solve. So instead, we develop more advanced configuration languages that aim to solve many of the problems that we duck-tape with YAML or aren't possible to express in YAML.

The logical extreme is becoming more evident – advanced configuration in general-purpose programming languages. You can see this in the emergence of Typescript for Infrastructure-as-Code. For the most basic (and human 0x777) configuration needs, there will always be simple formats – YAML, JSON, INI, etc.).

For everything else, general-purpose languages will win out.

But we're not quite there yet. Typescript is one of the most promising languages for infrastructure (and, soon, language-agnostic project configuration). What else needs to happen before we see widespread configuration-as-code.

Some common objections: