Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

D003: Data Format — Real YAML, Not MiniYAML

Decision: Use standard spec-compliant YAML with serde_yaml. Not OpenRA’s MiniYAML.

Rationale:

  • Standard YAML parsers, linters, formatters, editor support all work
  • serde_yaml → typed Rust struct deserialization for free
  • JSON-schema validation catches errors before game loads
  • No custom parser to maintain
  • Inheritance resolved at load time as a processing pass, not a parser feature

Alternatives considered:

  • MiniYAML as-is (rejected — custom parser, no tooling support, not spec-compliant)
  • TOML (rejected — awkward for deeply nested game data)
  • RON (rejected — modders won’t know it, thin editor support)
  • JSON (rejected — too verbose, no comments)

Migration: cnc-formats convert --format miniyaml --to yaml CLI subcommand (behind miniyaml feature flag, MIT/Apache-2.0) converts MiniYAML files to standard YAML on disk (--format auto-detected from extension when unambiguous; --to always required). ic-cnc-content wraps the same parser for IC’s runtime auto-conversion pipeline (D025).