{"id":13465072,"url":"https://github.com/kdl-org/kdl","last_synced_at":"2026-02-01T21:37:42.709Z","repository":{"id":41869520,"uuid":"320448793","full_name":"kdl-org/kdl","owner":"kdl-org","description":"the kdl document language specifications","archived":false,"fork":false,"pushed_at":"2026-01-12T21:42:16.000Z","size":6280,"stargazers_count":1461,"open_issues_count":47,"forks_count":72,"subscribers_count":26,"default_branch":"main","last_synced_at":"2026-01-13T01:55:37.921Z","etag":null,"topics":["kdl","language","serialization","specification"],"latest_commit_sha":null,"homepage":"https://kdl.dev","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kdl-org.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["zkat"]}},"created_at":"2020-12-11T02:47:24.000Z","updated_at":"2026-01-12T21:42:03.000Z","dependencies_parsed_at":"2022-08-31T06:51:31.101Z","dependency_job_id":"97fe1923-97fd-4b08-ac94-3ebd52d29630","html_url":"https://github.com/kdl-org/kdl","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/kdl-org/kdl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kdl-org%2Fkdl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kdl-org%2Fkdl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kdl-org%2Fkdl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kdl-org%2Fkdl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kdl-org","download_url":"https://codeload.github.com/kdl-org/kdl/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kdl-org%2Fkdl/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28991770,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-01T20:57:35.821Z","status":"ssl_error","status_checked_at":"2026-02-01T20:57:29.580Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["kdl","language","serialization","specification"],"created_at":"2024-07-31T14:00:57.467Z","updated_at":"2026-02-01T21:37:42.702Z","avatar_url":"https://github.com/kdl-org.png","language":"Makefile","readme":"# The KDL Document Language\n\nKDL is a small, pleasant document language with XML-like node semantics that\nlooks like you're invoking a bunch of CLI commands! It's meant to be used both\nas a serialization format and a configuration language, much like JSON, YAML, or\nXML. It looks like this:\n\n```kdl\npackage {\n  name my-pkg\n  version \"1.2.3\"\n\n  dependencies {\n    // Nodes can have standalone values as well as\n    // key/value pairs.\n    lodash \"^3.2.1\" optional=#true alias=underscore\n  }\n\n  scripts {\n    // \"Raw\" and dedented multi-line strings are supported.\n    message \"\"\"\n      hello\n      world\n      \"\"\"\n    build #\"\"\"\n      echo \"foo\"\n      node -c \"console.log('hello, world!');\"\n      echo \"foo\" \u003e some-file.txt\n      \"\"\"#\n  }\n\n  // `\\` breaks up a single node across multiple lines.\n  the-matrix 1 2 3 \\\n             4 5 6 \\\n             7 8 9\n\n  // \"Slashdash\" comments operate at the node level,\n  // with just `/-`.\n  /-this-is-commented {\n    this entire node {\n      is gone\n    }\n  }\n}\n```\n\nFor more details, see the [overview below](#overview).\n\nThere's a living [specification](https://kdl.dev/spec/), as well as various\n[implementations](#implementations). You can also check out the [FAQ](#faq) to\nanswer all your burning questions!\n\nThe current version of the KDL spec is\n[KDL 2.0.0](https://kdl-org.github.io/kdl/#go.draft-marchan-kdl2.html). For legacy KDL,\nplease refer to the [KDL 1.0.0\nspec](https://github.com/kdl-org/kdl/blob/2.0.0/SPEC_v1.md). All users are\nencouraged to migrate. [Migration is forward-and-backward-compatible and\nsafe](https://kdl-org.github.io/kdl/#go.draft-marchan-kdl2.html#compatibility), and can\nbe automated.\n\nIn addition to a spec for KDL itself, there are specifications for [a KDL Query\nLanguage](QUERY-SPEC.md) based on CSS selectors, and [a KDL Schema\nLanguage](SCHEMA-SPEC.md) loosely based on JSON Schema.\n\nThe language is based on [SDLang](https://sdlang.org), with a [number of\nmodifications and clarifications on its syntax and behavior](#why-not-sdlang).\nWe are grateful for their work as an inspiration to ours.\n\n[Play with it in your browser!](https://kdl.dev/play/)\n\n## Design and Discussion\n\nKDL 2.0.0 has been finalized, and no further changes are expected. For questions\nabout KDL and discussions, please see the [discussions\npage](https://github.com/kdl-org/kdl/discussions). For minor editorial fixes or\ncritical spec errata, please feel free to [file an\nissue](https://github.com/kdl-org/kdl/issues).\n\n## Used By\n\nA lot of folks have started picking up KDL for both personal projects, and\nlarger open source, and even proprietary projects! This section includes a list\nof some examples of KDL in the wild (either v1, v2, or both):\n\n* [Zellij](https://zellij.dev) - Terminal workspace/multiplexer\n* [Niri](https://github.com/YaLTeR/niri) - Scrollable-tiling window manager for Wayland\n* [Bikeshed](https://github.com/speced/bikeshed) ([here](https://github.com/speced/bikeshed-boilerplate/blob/main/boilerplate/doctypes.kdl) and [here](https://github.com/speced/bikeshed-data/blob/main/data/manifest.txt)) - Specification pre-processor used by CSS, C++, WHATWG, various W3C working groups, and others.\n* [orogene](https://orogene.dev) - Lightning-fast JavaScript package manager\n* [Onyx](https://onyxlang.io/) - An efficient, procedural, and pragmatic programming language that compiles to WASM. Used for package manifests.\n* [Pop!_OS/System76 Scheduler](https://github.com/pop-os/system76-scheduler) - Scheduling service which optimizes Linux's CPU scheduler and makes it go faster.\n* [ImStyle](https://patitotective.github.io/ImStyle/) - ImGui application styling with Nim and KDL\n* [fmod-rs](https://github.com/CAD97/fmod-rs) - Rust bindings to FMOD Core and FMOD Studio\n* [mise](https://mise.jdx.dev/) - dev tools, env vars, task runner\n* [Camping](https://github.com/camping/camping) - Ruby web microframework\n* [Iron Vault](https://ironvault.quest) - VTT (Virtual Tabletop) plugin for Obsidian for the Ironsworn family of games\n* [Microsoft TypeScript DOM Generator](https://github.com/microsoft/TypeScript-DOM-lib-generator) - Tool for generating DOM-related TypeScript and JavaScript library files\n* You?\n\n## Implementations\n\n\u003e [!INFO] There are two major versions of KDL. Different libraries may support one or the\n\u003e other, or even provide a \"hybrid\" mode where both versions are attempted, since\n\u003e there's no data ambiguity between v1 and v2 documents.\n\n| Language | Implementation | v1 | v2 | Notes |\n|---|---|---|---|---|\n| C | [ckdl](https://github.com/tjol/ckdl) | ✅ | ✅ | |\n| C#/.NET | [Kadlet](https://github.com/oledfish/Kadlet) | ✅ | ✖️ | |\n| C++ | [kdlpp](https://github.com/tjol/ckdl) | ✅ | ✅ | part of ckdl, requires C++20 |\n| Common Lisp | [kdlcl](https://github.com/chee/kdlcl) | ✅ | ✖️ | |\n| Crystal | [kdl-cr](https://github.com/danini-the-panini/kdl-cr) | ✅ | ✖️ | |\n| Dart | [kdl-dart](https://github.com/danini-the-panini/kdl-dart) | ✅ | ✅ | |\n| Elixir | [kuddle](https://github.com/IceDragon200/kuddle) | ✅ | ✅ | |\n| Go | [gokdl](https://github.com/lunjon/gokdl) | ✅ | ✖️ | |\n| Go | [kdl-go](https://github.com/sblinch/kdl-go) | ✅ | ✖️ | |\n| Haskell | [Hustle](https://github.com/fuzzypixelz/Hustle) | ✅ | ✖️ | |\n| Haskell | [kdl-hs](https://github.com/brandonchinn178/kdl-hs) | ✅ | ✖️ | Includes some v2 syntax |\n| Java | [kdl4j](https://github.com/kdl-org/kdl4j) | ✅ | ✅ | |\n| JavaScript | [@bgotink/kdl](https://github.com/bgotink/kdl) | ✅ | ✅ | Format/comment-preserving parser |\n| JavaScript | [@virtualstate/kdl](https://github.com/virtualstate/kdl) | ✅ | ✖️ | query only, JSX based |\n| JavaScript | [kdljs](https://github.com/kdl-org/kdljs) | ✅ | ✅ | |\n| Lua | [kdlua](https://github.com/danini-the-panini/kdlua) | ✅ | ✖️ | |\n| Nim | [kdl-nim](https://github.com/Patitotective/kdl-nim) | ✅ | ✖️ | |\n| OCaml | [ocaml-kdl](https://github.com/eilvelia/ocaml-kdl) | ✅ | ✅ | |\n| PHP | [kdl-php](https://github.com/kdl-org/kdl-php) | ✅ | ✖️ | |\n| Python | [ckdl](https://github.com/tjol/ckdl) | ✅ | ✅ | |\n| Python | [cuddle](https://github.com/djmattyg007/python-cuddle) | ✅ | ✖️ | |\n| Python | [kdl-py](https://github.com/tabatkins/kdlpy) | ✅ | ✅ | |\n| Ruby | [kdl-rb](https://github.com/danini-the-panini/kdl-rb) | ✅ | ✅ | |\n| Rust | [kdl-rs](https://github.com/kdl-org/kdl-rs) | ✅ | ✅ | Format/comment-preserving parser |\n| Rust | [knus](https://crates.io/crates/knus/) | ✅ | ✖️ | Serde-_style_ derive macros (not actual Serde) |\n| Swift | [kdl-swift](https://github.com/danini-the-panini/kdl-swift) | ✅ | ✖️ | |\n| XSLT | [xml2kdl](https://github.com/Devasta/XML2KDL) | ✅ | ✖️ | |\n\n## Compatibility Test Suite\n\nThere is a [compatibility test suite](tests/README.md) available for KDL\nimplementors to check that their implementations are actually spec-compatible.\n\nThe implementations above are not guaranteed to pass this test suite in its\nentirety, but in the future, may be required to in order to be included here.\n\n## Editor Support\n\n* [Intellij IDEA](https://plugins.jetbrains.com/plugin/20136-kdl-document-language)\n* [Sublime Text](https://packagecontrol.io/packages/KDL)\\*\n* [TreeSitter](https://github.com/tree-sitter-grammars/tree-sitter-kdl) (neovim, among others)\n* [VS Code](https://marketplace.visualstudio.com/items?itemName=kdl-org.kdl\u0026ssr=false#review-details)\\*\n* [vim](https://github.com/imsnif/kdl.vim)\n* [Kate](https://github.com/larsgw/katepart-kdl)\\*\n* [Zed](https://zed.dev/extensions/kdl)\n\n\\* Supports KDL 2.0.0\n\n## Overview\n\n### Basics\n\nA KDL node is a node name string, followed by zero or more \"arguments\", and\nchildren.\n\n```kdl\ntitle \"Hello, World\"\n```\n\nYou can also have multiple values in a single node!\n\n```kdl\nbookmarks 12 15 188 1234\n```\n\nNodes can have properties, with string keys.\n\n```kdl\nauthor \"Alex Monad\" email=alex@example.com active=#true\n```\n\nAnd they can have nested child nodes, too!\n\n```kdl\ncontents {\n  section \"First section\" {\n    paragraph \"This is the first paragraph\"\n    paragraph \"This is the second paragraph\"\n  }\n}\n```\n\nNodes without children are terminated by a newline, a semicolon, or the end of\na file stream:\n\n```kdl\nnode1; node2; node3\n```\n\n### Values\n\nKDL supports 4 data types:\n\n* Strings: `unquoted`, `\"hello world\"`, or `#\"hello world\"#`\n* Numbers: `123.45`, `0xdeadbeef`, `#inf`, `#-inf`, `#nan`\n* Booleans: `#true` and `#false`\n* Null: `#null`\n\n#### Strings\n\nIt supports three different formats for string input: unquoted, quoted, and raw.\n\n```kdl\nnode1 this-is-a-string\nnode2 \"this\\nhas\\tescapes\"\nnode3 #\"C:\\Users\\zkat\\raw\\string\"#\n```\n\nYou don't have to quote strings unless any the following apply:\n  * The string contains whitespace.\n  * The string contains any of `[]{}()\\/#\";=`.\n  * The string is one of `true`, `false`, `null`, `inf`, `-inf`, or `nan`.\n  * The strings starts with a digit, or `+`/`-`/`.`/`-.`,`+.` and a digit.\n    (aka \"looks like a number\")\n\nIn essence, if it can get confused for other KDL or KQL syntax, it needs\nquotes.\n\nBoth types of quoted string can be written across multiple lines by using triple\nquotes (`\"\"\"`) followed immediately by a newline. Additionally, common\nindentation shared with the line containing the closing quotes will be\nstripped/dedented:\n\n```kdl\nstring \"\"\"\n  my\n    multiline\n  value\n  \"\"\"\n```\n\nRaw strings, which do not support `\\` escapes and can be used when you want\ncertain kinds of strings to look nicer without having to escape a lot:\n\n```kdl\nexec #\"\"\"\n  echo \"foo\"\n  echo \"bar\"\n  cd C:\\path\\to\\dir\n  \"\"\"#\n\nregex #\"\\d{3} \"[^/\"]+\"\"#\n```\n\nYou can add any number of `#`s before and after the opening and\nclosing `#` to disambiguate literal closing `#\"` sequences:\n\n```kdl\nother-raw ##\"hello#\"world\"##\n```\n\n#### Numbers\n\nThere are 4 ways to represent numbers in KDL, plus 3 float keywords. KDL does\nnot prescribe any representation for these numbers, and it's entirely up to\nindividual implementations whether to represent all numbers with a single type,\nor to have different representations for different forms.\n\nKDL has regular decimal-radix numbers, with optional decimal part, as well as\nan optional exponent.\n\n```kdl\nnum 1.234e-42\n```\n\nAnd using the appropriate prefix, you can also enter hexadecimal, octal, and\nbinary literals:\n\n```kdl\nmy-hex 0xdeadbeef\nmy-octal 0o755\nmy-binary 0b10101101\n```\n\nIf you're intending to represent IEEE 754 floats, there are three special\nkeywords you can use:\n\n```kdl\nspecial-floats #inf #-inf #nan\n```\n\nFinally, all numbers can have underscores to help readability:\n\n```kdl\nbignum 1_000_000\n```\n\n### Comments\n\nKDL supports C-style comments, both line-based and multiline. Multiline\ncomments can be nested.\n\n```kdl\n// C style\n\n/*\nC style multiline\n*/\n\ntag /*foo=#true*/ bar=#false\n\n/*/*\nhello\n*/*/\n```\n\nOn top of that, KDL supports `/-` \"slashdash\" comments, which can be used to\ncomment out individual nodes, entries, or child blocks:\n\n```kdl\n// This entire node and its children are all commented out.\n/-mynode foo key=1 {\n  a\n  b\n  c\n}\n\nmynode /-commented \"not commented\" /-key=value /-{\n  a\n  b\n}\n// The above is equivalent to:\nmynode \"not commented\"\n```\n\n### Type Annotations\n\nKDL supports type annotations on both values and nodes. These can be\narbitrary, but can be used by individual implementations or use-cases to\nconstrain KDL's basic types. A number of type names are also reserved to have\nspecific meanings.\n\n```kdl\nnumbers (u8)10 (i32)20 myfloat=(f32)1.5 {\n  strings (uuid)\"123e4567-e89b-12d3-a456-426614174000\" (date)\"2021-02-03\" filter=(regex)#\"$\\d+\"#\n  (author)person name=Alex\n}\n```\n\n### More Details\n\n```kdl\n// Nodes can be separated into multiple lines\ntitle \\\n  \"Some title\"\n\n\n// Files must be utf8 encoded!\nsmile 😁\n\n// Node names and property keys are just strings, so you can write them like\n// quoted or raw strings, too!\n\"illegal(){}[]/\\\\=#;identifier\" #\"1.2.3\"# \"#false\"=#true\n\n// Identifiers are very flexible. The following is a legal bare identifier:\n-\u003c123~!$@%^\u0026*,.:'`|?+\u003e\n\n// And you can also use non-ASCII unicode!\nノード　お名前=ฅ^•ﻌ•^ฅ\n\n// kdl specifically allows properties and values to be\n// interspersed with each other, much like CLI commands.\nfoo bar=#true baz quux=#false 1 2 3\n```\n\n## Design Principles\n\n1. Human Maintainability\n1. Flexibility\n1. Cognitive Simplicity and Learnability\n1. Ease of de/serialization\n1. Ease of implementation\n\n## Compatibility with JSON and XML\n\nThere are two specifications for writing KDL that can be losslessly translated\nbetween it and JSON or XML. These specifications define a stricter _subset_ of\nKDL that, even if not entirely idiomatic, is still valid and fits into the\ndata models of the other two languages:\n\n* [JSON in KDL](JSON-IN-KDL.md)\n* [XML in KDL](XML-IN-KDL.md)\n\n## FAQ\n\n#### How do you pronounce KDL?\n\nSame as \"cuddle\".\n\n#### Why yet another document language?\n\nBecause nothing out there felt quite right. The closest one I found was\nSDLang, but that had some design choices I disagreed with.\n\n\u003ca name=\"why-not-sdlang\"\u003e\u003c/a\u003e\n#### Ok, then, why not SDLang?\n\nSDLang is an excellent base, but I wanted some details ironed out, and some\nthings removed that only really made sense for SDLang's current use-cases, including\nsome restrictions about data representation. KDL is very similar in many ways, except:\n\n* The grammar and expected semantics are [well-defined and specified](https://kdl-org.github.io/kdl/#go.draft-marchan-kdl2.html).\n  This was the original impetus for working on KDL, followed by details that\n  seemed like they could be improved.\n* There is only one \"number\" type. KDL does not prescribe representations, but\n  does have keywords for NaN, infinity, and negative infinity if decimal numbers\n  are intended to be represented as IEEE754 floats.\n* Slashdash (`/-`) comments are great and useful!\n* Quoteless \"identifier\" strings (e.g. `node foo=bar`, vs `node foo=\"bar\"`).\n* KDL does not have first-class date or binary data types. Instead, it\n  supports arbitrary type annotations for any custom data type you might need:\n  `(date)\"2021-02-03\"`, `(binary)\"deadbeefbadc0ffee\"`.\n* Values and properties can be interspersed with each other, rather than one\n  having to follow the other. It was not clear whether this was actually allowed in SDLang.\n* Multi-line strings are supported using `\"\"\"\u003cnewline\u003e` and their lines are automatically\n  \"dedented\" to match their closing quotes' indentation level.\n* Raw strings are written with `#` (`#\"foo\\bar\"#`), instead of backticks. This,\n  while more verbose, allows embedding of languages, especially scripting\n  languages, that use this syntax on a regular basis, without additional escaping\n  (e.g. bash and JavaScript).\n* KDL identifiers can use a wide range of UTF-8 and are much more lax about\n  valid characters than SDLang.\n* KDL does not support \"anonymous\" nodes. Instead, any string can be used as a\n  node name. For lists of arbitrary values, there is a convention of naming the nodes\n  simply `-`.\n* Namespaces are not supported, but `:` is a legal identifier character, and applications\n  can choose to implement namespaces as they see fit.\n* KDL supports arbitrary identifiers for node names and attribute\n  names, meaning you can use arbitrary strings for those: `\"123\" \"value\"=1` is\n  a valid node, for example. This makes it easier to use KDL for\n  representing arbitrary key/value pairs using child nodes.\n\n#### Have you seen that one XKCD comic about standards?\n\nYes. I have. Please stop linking me to it.\n\n#### What about YAML?\n\nYAML is a great, widespread language. Unlike KDL, which is node-based (like\nXML or HTML), it's based on map and array data structures, which can provide\nan easier serialization experience in some cases.\n\nAt the same time, YAML can be ambiguous about what types the data written into\nit is. There's also a persistent issue where very large YAML files become\nunmanageable, especially due to the significant indentation feature.\n\nKDL is designed to avoid these particular pitfalls by always being explicit\nabout types, and having clearly-delimited scope (and the ability to\nauto-indent/auto-format). Syntax errors are easier to catch, and large files\nare (hopefully!) much more manageable.\n\n#### What about JSON?\n\nJSON is a great serialization language, but it can be very difficult to use as\na human configuration language. This is largely due to its very specific, very\nstrict syntax, as well as its lack of support for comments.\n\nKDL, on the other hand, has great comment support, and has a much more\nforgiving syntax without being so flexible as to allow certain classes of\nunfortunate mistakes. It also has much more flexibility around how to\nrepresent data.\n\nIf you need to interoperate with a service that consumes or emits JSON, or for\nsome other reason have need to write \"JSON in KDL\", [we have JiK, an official\nmicrosyntax for losslessly encoding JSON](JSON-IN-KDL.md).\n\n#### What about TOML?\n\nIt nests very poorly. It doesn't fare well with large files. Also, I felt some\ndiscomfort [continuing to use and promote something by its\ncreator](https://en.wikipedia.org/wiki/Tom_Preston-Werner#Resignation_from_GitHub).\n\n\n#### What about XML?\n\nXML is actually pretty fantastic, and has long been a standard for data\nexchange across many industries. At the same time, XML is known to be very\nverbose, and editing it involves writing (and updating) matching tags. Another\nlarge pitfall with XML is its lack of direct support for arbitrary string\nkey/value pairs, so what would be a simple `foo: x` in some languages has to\nbe represented as `\u003centry name=\"foo\" value=\"x\" /\u003e` or something similar. XML\nalso functions great as a **markup** language. That is, it is easy to\nintersperse with text, like HTML.\n\nKDL, just like XML, is a node/element-based language, but with much more\nlightweight syntax. It also adds the ability to apply anonymous values\ndirectly to a node, rather than as children. That is, `nodename 1 2 3` instead\nof `\u003celement\u003e\u003cchild\u003e1\u003c/child\u003e\u003cchild\u003e2\u003c/child\u003e(etc)\u003c/element\u003e`. This can make\nit much more manageable and readable as a human configuration language, and is\nalso less verbose when exchanging documents across APIs!\n\nFinally, KDL is **not** a markup language. XML or HTML do a much better job of\n\"marking up\" a text document with special tags, although KDL can still be\nuseful for templating engines that want to be more strict about text\nfragments.\n\nIf you need to interoperate with a service that consumes or emits XML, or for\nsome other reason have need to write \"XML in KDL\", [we have XiK, an official\nmicrosyntax for losslessly encoding XML](XML-IN-KDL.md).\n\n## License\n\n\u003ca rel=\"license\" href=\"http://creativecommons.org/licenses/by-sa/4.0/\"\u003e\u003cimg alt=\"Creative Commons License\" style=\"border-width:0\" src=\"https://i.creativecommons.org/l/by-sa/4.0/88x31.png\" /\u003e\u003c/a\u003e\u003cbr /\u003eThis work is licensed under a \u003ca rel=\"license\" href=\"http://creativecommons.org/licenses/by-sa/4.0/\"\u003eCreative Commons Attribution-ShareAlike 4.0 International License\u003c/a\u003e.\n\nThis license applies to the text and assets _in this repository_.\nImplementations of this specification are not \"derivative works\", and thus are\nnot bound by the restrictions of CC-BY-SA.\n\nThe KDL logo design and files were generously contributed by Timothy Merritt\n([@timmybytes](https://github.com/timmybytes)), and are also available under\nthe same license.\n","funding_links":["https://github.com/sponsors/zkat"],"categories":["Others","language","Makefile","Configuration Management"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkdl-org%2Fkdl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkdl-org%2Fkdl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkdl-org%2Fkdl/lists"}