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:
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 |
β