← All guides

The Norway problem: when YAML says no

A country code that becomes false, versions that lose their zeros, and the YAML type-guessing that has broken real deployments.

4 min read · Reviewed July 2026

Ad space (header)

Somewhere out there is a config file listing country codes: DE, FR, NO. And somewhere out there is a parser that read NO and stored false, because classic YAML helpfully interprets no, yes, on, and off as booleans. Norway becomes false. This is famous enough to have a name — the Norway problem — and it's the perfect specimen of YAML's central flaw: it guesses types from the way text looks.

The whole family of gotchas

Version numbers: 1.10 parses as the float 1.1 — your patch release just vanished. Git commit hashes that happen to be all digits with an e in the middle (like 123e45) parse as scientific notation. Time-looking values like 12:30 become sexagesimal numbers in some parsers. Octal surprises: a zip code 010101 might come back as a different number entirely. Every one of these has broken a real pipeline somewhere.

The newer YAML 1.2 spec fixed most of this — only true and false are booleans — but the most-used parsers in the wild spent a decade on 1.1 behavior, and mixed environments still bite. You don't control which parser reads your file.

The defense

One habit fixes it: quote any string that could look like something else. 'NO', '1.10', '12:30'. Quotes tell every parser, of every vintage, that this is a string, full stop. Our JSON-to-YAML converter above does this automatically for the dangerous cases — convert something with a version field and watch the quotes appear. That's not decoration; that's the converter having read this guide.

Written and maintained by the Developer Toolkit team. Reviewed July 2026.

Ad space (footer)