Structured data formats
JSON is the default interchange shape. Human-edited config, programmable constraints, LLM token budgets, and zero-copy wire formats pull in different successors. This page mirrors the Configuration classification and lineage graph in DevCentr’s Create… catalog.
Do not confuse prose with data
CentrMark / Markdown / AsciiDoc model document trees (paragraphs, headings, directives). SDLang / KDL / JSON model data trees (nodes, arguments, properties). Comparing KDL to CentrMark as peers is a category error—pick documentation markup or structured data first.
OCIF (Open Canvas Interchange) is a third category: a canvas scene graph (placed nodes, relations, resources), not prose and not app config. Prefer it for infinite-canvas / sticky-board interchange; see Open Canvas (OCIF). Do not treat SVG as that live document.
Human-edited config
| Format | Prefer when |
|---|---|
SDLang ( |
DevCentr owns the parser (catalogs, |
KDL ( |
Greenfield or cross-language node documents: strict grammar, |
JSON5 ( |
Stuck in the JSON family but humans edit the file (comments, trailing commas). Use plain JSON when the tool forbids dialects. |
Extended SDL / XDL |
Avoid. Unfinished dialect in |
SDLang, KDL, and Extended SDL
Both SDLang and KDL are node-based documents. KDL is the clearer modern successor (unambiguous grammar, explicit type annotations, safer node commenting). Policy: keep SDLang where DevCentr already parses .sdl; prefer KDL for new documents outside that surface. Do not adopt Extended SDL/XDL as a compromise—it does not finish SDLang’s gaps and does not inherit KDL’s ecosystem. Full decision table: SDL Preference — Decision.
Three extremes beyond JSON text
When “better than JSON” is taken to the limit, solutions split by goal:
| Goal | Examples | Mechanism |
|---|---|---|
Validation and programmability |
Pkl, CUE, Nickel, KCL |
Schema, constraints, or generation live in the config language; often emit JSON/YAML for consumers. |
Human or LLM ergonomics |
KDL, TOON |
Node trees or tabular/token-dense encodings instead of brace-heavy maps. |
Network and CPU performance |
Cap’n Proto, FlatBuffers, CBOR, MessagePack |
Binary layouts; zero-copy or compact encodings. Humans do not hand-edit these as primary authoring. |
Evolution (lineage)
flowchart TB json[JSON] json5[JSON5] sdlang[SDLang] kdl[KDL] xdl[XDL_avoid] toon[TOON] cbor[CBOR] msgpack[MessagePack] pkl[Pkl] cue[CUE] capnp[Capn_Proto] flatbuffers[FlatBuffers] json -->|evolves| json5 json -->|evolves| sdlang sdlang -->|supersedes| kdl sdlang -.->|avoid| xdl json -->|specializes| toon json -->|specializes| cbor json -->|specializes| msgpack json -->|specializes| pkl json -->|specializes| cue json -->|specializes| capnp json -->|specializes| flatbuffers
Use the lineage view in Create… when the job tree (human config vs programmable vs binary) is not enough to separate near neighbors.
Related
-
Create… catalog and dialog: Content Create
-
Prose markup: Documentation markup
-
SDL policy: SDL Preference