If you want the file to be directly human readable/editable:
- TOML
- YAML
If you never need to look at it or edit it manually:
- JSON
I hate yaml with a passion. for stuff such as ansible it becomes an uneditable mess (one copy and paste away from destroying the whole file)
luckily, yaml is a superset of json, so you could just write json and feed it through a yaml parser and it’ll work
deleted by creator
if i miss a quote in json, it’s an invalid file. I fix it and move on. Maybe just pass it through a beautifier or something.
if I mess up indentation in yaml (which can easily happen after a copy and paste), I get a valid file that means something completely different. And no beautifier can help with that, because it’s a valid file. I have to look really closely to find the error, because tools can’t help. And when I do, I usually have to change multiple lines, instead of just adding a comma.
I don’t know which is the best, but yaml is the worst.
TOML looks good but it’s rarely used
TOML does look good. Wow! I havent looked at it at all before.
Makes certain levels of nesting painful
You can say this is a design choice, and you shouldn’t ever go too deep in config, and I’d agree, but it is a limiting factor to be aware of
For simple stuff, INI is pretty good.
I must admit I’ve written stuff that uses a JSON config file, but I might finish implementing YAML instead. Any day now…
Agreed about INI for simple stuff. Not good for arrays and nested things though. Usually use binary for that type of config (with clear documentation). Most binary config files I use are plain old C structures. I’m not a web person so no need to make the config plain text.
This human would prefer YAML for that, especially if I had to generate/modify said config in Ansible/puppet/whatever.
You could use TOML. It’s pretty much an extension of INI
Normal text file
JSON if it also has an online schema, and a reference to it in the JSON file. That way some editors can check for errors and hint to the user about it.
But the good old flat text-data, the ini format is consistent, readable, and easily understandable by less-technical users.
It’s like yaml but simple, consistent, untyped, and you never need to escape any characters, ever.
Types and validation aren’t going to be great unless they’re in the actual code anyway.
deleted by creator
I like how elixir approaches it: configs are just elixir script files that have a module for some common conventions. Gives you a lot of power, and no goofy new syntax
That works if you have a small, disciplined team. As the team grows and it becomes harder to enforce standards, config files that are run through the language compiler easily get filled with programming statements that shouldn’t be in a config file.
That one which I can automate.
I mainly use Ansible or Puppet. So YAML isn’t that bad if you fully understand it.
Puppet language sux IMHO.
YAML. This is the way.
That depends on if a human is reading/writing it, or a program.