The key difference between YAML 1.1 and YAML 1.2 is that YAML 1.2 significantly restricts which values are interpreted as Booleans, making it more predictable and less ambiguous. Only true, True, TRUE, false, False, and FALSE remain as Boolean values in YAML 1.2.

YAML 1.1 defined several unquoted words as booleans. In particular on and off (any casing) are treated as true/false:

# YAML 1.1 parser interpretation
feature_enabled: on # β†’ boolean true
feature_disabled: off # β†’ boolean false

YAML 1.2 tightened this to match JSON’s strict true/false, so only unquoted true and false (all lowercase) are booleans. Others become plain strings:

# YAML 1.2 parser interpretation
feature_enabled: on # β†’ string "on"
feature_disabled: off # β†’ string "off"
feature_flag: true # β†’ boolean true
feature_flag: false # β†’ boolean false

Example Comparison:

KeyYAML 1.1 ParseYAML 1.2 Parse
toggle: ontoggle: truetoggle: "on"
toggle: OFFtoggle: falsetoggle: "OFF"
toggle: truetoggle: truetoggle: true
toggle: FALSEtoggle: falseError (unquoted)

Complete Comparison Table

YAML 1.1 ValueYAML 1.1 InterpretationValue TypeYAML 1.2 Interpretation
yTrueSingle CharString
YTrueSingle CharString
yesTrueYes/NoString
YesTrueYes/NoString
YESTrueYes/NoString
trueTrueTrue/FalseBoolean
TrueTrueTrue/FalseBoolean
TRUETrueTrue/FalseBoolean
onTrueOn/OffString
OnTrueOn/OffString
ONTrueOn/OffString
nFalseSingle CharString
NFalseSingle CharString
noFalseYes/NoString
NoFalseYes/NoString
NOFalseYes/NoString
falseFalseTrue/FalseBoolean
FalseFalseTrue/FalseBoolean
FALSEFalseTrue/FalseBoolean
offFalseOn/OffString
OffFalseOn/OffString
OFFFalseOn/OffString
⁂