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 falseYAML 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 falseExample Comparison:
| Key | YAML 1.1 Parse | YAML 1.2 Parse |
|---|---|---|
toggle: on | toggle: true | toggle: "on" |
toggle: OFF | toggle: false | toggle: "OFF" |
toggle: true | toggle: true | toggle: true |
toggle: FALSE | toggle: false | Error (unquoted) |
Complete Comparison Table
| YAML 1.1 Value | YAML 1.1 Interpretation | Value Type | YAML 1.2 Interpretation |
|---|---|---|---|
y | True | Single Char | String |
Y | True | Single Char | String |
yes | True | Yes/No | String |
Yes | True | Yes/No | String |
YES | True | Yes/No | String |
true | True | True/False | Boolean |
True | True | True/False | Boolean |
TRUE | True | True/False | Boolean |
on | True | On/Off | String |
On | True | On/Off | String |
ON | True | On/Off | String |
n | False | Single Char | String |
N | False | Single Char | String |
no | False | Yes/No | String |
No | False | Yes/No | String |
NO | False | Yes/No | String |
false | False | True/False | Boolean |
False | False | True/False | Boolean |
FALSE | False | True/False | Boolean |
off | False | On/Off | String |
Off | False | On/Off | String |
OFF | False | On/Off | String |
β