Skip to content

Instantly share code, notes, and snippets.

@oconnor663
Last active May 2, 2023 00:43
Show Gist options
  • Save oconnor663/9aeb4ed56394cb013a20 to your computer and use it in GitHub Desktop.
Save oconnor663/9aeb4ed56394cb013a20 to your computer and use it in GitHub Desktop.
TOML vs YAML

EDIT from 2019: Hi folks. I wrote this gist for myself and some friends, and it seems like it's gotten posted somewhere that's generated some (ahem, heated) discussion. The whitespace was correct when it was posted, and since then GitHub changed how it formats <pre> tags. Look at the raw text if you care about this. I'm sure someone could tell me how to fix it, but (thank you @anzdaddy for suggesting a formatting workaround) honestly this is a random throwaway gist from 2015, and someone more knowledgable about this comparison should just write a proper blog post about it. If you comment here I'll hopefully see it and stick a link to it up here. Cheers. @oconnor663

Here's the canonical TOML example from the TOML README, and a YAML version of the same.

title = "TOML Example"
 
[owner]
name = "Tom Preston-Werner"
dob = 1979-05-27T07:32:00-08:00
 
[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]
connection_max = 5000
enabled = true
 
[servers]
 
  [servers.alpha]
  ip = "10.0.0.1"
  dc = "eqdc10"
   
  [servers.beta]
  ip = "10.0.0.2"
  dc = "eqdc10"
   
[clients]
data = [ ["gamma", "delta"], [1, 2] ]
 
hosts = [
  "alpha",
  "omega"
]
title: YAML Example
 
owner:
  name: Tom Preston-Werner
  dob: 1979-05-27T07:32:00-08:00
 
database:
  server: 192.168.1.1
  ports: [ 8001, 8001, 8002 ]
  connection_max: 5000
  enabled: true
 
servers:
 
  alpha:
    ip: 10.0.0.1
    dc: eqdc10
   
  beta:
    ip: 10.0.0.2
    dc: eqdc10
 
clients:
  data: [ [gamma, delta], [1, 2] ]
   
  hosts:
    - alpha
    - omega
@bradleypeabody
Copy link

@anzdaddy Machine-generated TOML is an example of where that is useful. For example a file starts as hand-edited configuration but then there is a UI tool that needs to read that file, make some changes to the data and then write it back out. In this case there might be a deeply nested and complex object that is convenient to emit in that longer form using {...}. It seems to be a sensible way to keep simple configuration simple but also allow these deeply nested things to exist in a succinct-but-ugly form as needed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment