Throughout our system you will come across 'KDL' files for exporting and importing.
You really don't need to know anything about them other than "they are a way to save and load data". But if you want to know more, read on.
KDL Document Language
The KDL Document Language (pronounced "cuddle") is a modern, human-friendly configuration and serialization format designed as an alternative to JSON, YAML, or XML. It features XML-like node semantics with a syntax that resembles CLI commands, supporting features like slashdash comments (/-), C-style comments, and type annotations (e.g., (ipv4)"127.0.0.1").
- Current Spec: Version 2.0.0 is the active specification that we use, circa 2026.03, in MCe,
- Usage: It is used for reports, events and actions, automations, procedures, preferences, UIConfig and more.
- Implementations: Official parsers exist for several languages, we use the JavaScript (
kdljs) one. - Tooling: Syntax highlighting is available for VS Code (
vscode-kdl) https://code.visualstudio.com/download and Sublime Text https://www.sublimetext.com/download, others may exist as well.
Why KDL? Why not JSON or XML or YAML
- JSON: KDL is more human-friendly, supports comments, and allows multi-line strings.
- YAML: KDL avoids YAML’s indentation pitfalls and type ambiguities. Getting one too many spaces or one too few can blow up a YAML file in very frustrating ways.
- XML: KDL provides similar node-based semantics but with a cleaner, less verbose syntax.
KDL is increasingly being adopted in both open-source and proprietary projects, offering a modern alternative for structured document representation. We started using KDL around 2021 when it was about 1 year old and we have never looked back, it is so much easier than the YAML, JSON and occasionally XML that we used to use. They of course worked, but KDL is so much more user friendly and means there are fewer mistakes when editing.
Can you edit them?
Yes. And indeed there are some very useful times to edit them.
- Exporting preferences, finding all those for a access group or person, then copying them for another access group or person and importing is a very good use case