Compared with Other Configuration Formats
What Confµgami offers next to the plain text formats and next to the configuration systems that solve the same problems, row by row.
The tables are about what each format or system offers together with its usual tooling, not about what a project could build on top of it. A cell names the restriction where there is one.
Text File Formats
| Confµgami JSON5 | JSON + Schema | YAML + Schema | TOML | XML + XSD | |
|---|---|---|---|---|---|
Writing a value |
|||||
Comments in the data file |
yes |
no |
yes |
yes |
yes |
Ranges, patterns and lengths checked |
yes |
yes |
yes |
no |
yes |
Constraints relating several values |
yes |
conditional presence |
conditional presence |
no |
XSD 1.1 assertions |
Physical unit on a value |
yes |
no |
no |
no |
no |
Default declared in the model |
yes |
yes |
yes |
no |
yes |
Overridable default structure |
yes |
no |
no |
no |
no |
Documentation reaching the editor |
yes |
yes |
yes |
no |
yes |
Documentation written on the data |
yes |
no |
no |
no |
no |
Expressions and computed values |
in constraints |
no |
no |
no |
no |
Working across files |
|||||
Validated references between elements |
yes |
no |
no |
no |
yes |
Several files contributing to one object |
yes |
no |
no |
no |
no |
A file contributing to one nested element |
yes |
no |
no |
no |
no |
Priority ladder deciding an override |
yes |
no |
no |
no |
no |
One block of settings applied to many elements |
yes |
no |
within one document |
no |
no |
Reuse inside the configuration with type and name |
yes |
no |
anchors, untyped |
no |
no |
Isolated projects in one workspace |
yes |
no |
no |
no |
no |
Understanding the result |
|||||
Record of where a merged value came from |
yes |
no |
no |
no |
no |
Custom annotations carried with the data |
yes |
unvalidated |
no |
no |
appinfo |
Custom annotations validated by the model |
yes |
no |
no |
no |
no |
Living with the model |
|||||
Naming conventions enforced on the model |
yes |
no |
no |
no |
identifier pattern |
Model version recorded in the data file |
yes |
dialect only |
dialect only |
no |
by namespace |
Deprecation with replacement and migration text |
yes |
a flag |
a flag |
no |
no |
Completion, hover, go to definition and rename |
yes |
completion and hover |
yes |
no |
completion and hover |
Completion writing the whole required structure |
yes |
required members |
yes |
no |
required members |
Canonical formatter for the data files |
yes |
external tools |
external tools |
yes |
external tools |
Typed bindings generated from the model |
Rust, Python |
yes |
yes |
no |
yes |
Machine-readable diagnostics for CI |
yes |
yes |
yes |
no |
yes |
Model exposed to AI agents over a protocol |
yes |
no |
no |
no |
no |
Configuration Systems
The same rows against the systems that do solve those problems, each in its own domain:
| Confµgami | Kconfig | Devicetree | ARXML | CUE | Pkl | |
|---|---|---|---|---|---|---|
Writing a value |
||||||
Comments in the data file |
yes |
yes |
yes |
yes |
yes |
yes |
Hand-editable without a vendor tool |
yes |
yes |
yes |
the vendor tool |
yes |
yes |
Ranges, patterns and lengths checked |
yes |
int ranges |
with bindings |
yes |
yes |
yes |
Constraints relating several values |
yes |
depends on, select, symbol ranges |
conditional presence with bindings |
tool specific |
yes |
yes |
Physical unit on a value |
yes |
no |
in the name |
yes |
no |
size and time |
Default declared in the model |
yes |
yes |
documented only |
yes |
yes |
yes |
Overridable default structure |
yes |
defconfig |
board dts |
vendor configuration |
no |
no |
Documentation reaching the editor |
yes |
in menuconfig |
with bindings |
tool specific |
partly |
yes |
Documentation written on the data |
yes |
no |
no |
tool specific |
no |
no |
Expressions and computed values |
in constraints |
yes |
no |
yes |
yes |
yes |
Working across files |
||||||
Validated references between elements |
yes |
between symbols |
phandles |
yes |
within the model |
within the model |
Several files contributing to one object |
yes |
with a merge script |
overlays |
yes |
yes |
by amending |
A file contributing to one nested element |
yes |
flat symbols |
overlay fragments |
path repeated |
path shorthand |
no |
Priority ladder deciding an override |
yes |
last fragment wins |
later overlay wins |
tool specific |
conflicts error |
the amender wins |
One block of settings applied to many elements |
yes |
no |
no |
no |
yes |
yes |
Reuse inside the configuration with type and name |
yes |
no |
no |
no |
yes |
yes |
Isolated projects in one workspace |
yes |
one .config at a time |
per board file |
tool specific |
by package |
by package |
Understanding the result |
||||||
Record of where a merged value came from |
yes |
no |
no |
no |
no |
no |
Custom annotations carried with the data |
yes |
no |
no |
annotations and special data groups |
attributes |
yes |
Custom annotations validated by the model |
yes |
no |
no |
no |
no |
yes |
Living with the model |
||||||
Naming conventions enforced on the model |
yes |
no |
node and property names |
identifier pattern |
no |
no |
Model version recorded in the data file |
yes |
no |
no |
yes |
no |
by package |
Deprecation with replacement and migration text |
yes |
no |
a flag |
a flag |
no |
yes |
Completion, hover, go to definition and rename |
yes |
menuconfig search |
with an extension |
tool specific |
partly |
yes |
Completion writing the whole required structure |
yes |
no |
no |
required containers |
no |
no |
Canonical formatter for the data files |
yes |
no |
no |
tool specific |
yes |
in the IDE |
Typed bindings generated from the model |
Rust, Python |
C macros |
C macros |
yes |
Go |
four languages |
Machine-readable diagnostics for CI |
yes |
no |
no |
tool specific |
no |
no |
Model exposed to AI agents over a protocol |
yes |
no |
no |
tool specific |
no |
no |