Not xml
There is no best. It depends on the application
How would it depend?
Some applications don’t have enough config entries to warrant support for nested entries
Some applications need variable-length data, and some even variable-length lists
Some applications don’t care about having fast read/write times or a small memory footprint and can do with more complex formats that require the use of third-party libraries
Some embedded applications (e.g. AVR) don’t have access to a whole lot of libraries
JSON is overly verbose and doesn’t allow comments. Please do not use it for anything that humans frequently need to read or write.
YAML is a syntactic minefield. Please do not use it for anything ever.
How is it syntatic minefield? I find it at least more reasonable than XML. The comment feature is nice to have.
yaml is susceptible to things like the Norway problem: https://www.bram.us/2022/01/11/yaml-the-norway-problem/
There’s also a lot of stuff that can go wrong with deserialisation that make it a tricky dependency for security purposes. I like how yaml looks and it’s obviously much better than XML, but it had those potential problems
The one already being used by the project.
Yup. If I have to pick one for a new project, I’ll go with TOML unless there’s a reason to pick something else. I like that it’s simple, while also having a bunch of features for when the project grows.
Pretty much same here. With Spring stuff I still use YAML because TOML doesn’t have first class support yet. If TOML is an option I don’t have to go too far out of my way for them I go for it.
YAML has too many foot guns. It’s still less annoying to read and write than JSON though. Properties files are okay but there doesn’t seem to be an agreed upon spec, so for edge cases it can be confusing.
Yup, YAML is a terrible data format, but for a configuration format that you completely control, it works well. Your parser only needs to be good enough to read the configs you create.
Likewise, JSON is a pretty bad config format due to strictness in the syntax (no optional commas, excessive quotes, etc), but it’s pretty good data format because it’s pretty easy to parse.
TOML is like YAML, but it has fewer corner cases so it’s pretty easy to learn completely.
Though anything is superior when it’s already the status quo on a project.
How able Lua?
It’s a programming language, so you can do fancy stuff, or you can just use it as a regular key value file. You can also safely enable/disable features so you only need to allow the subset of Lua that you need.
It works really well for things like editor configuration (see neovim), and it’s especially nice if you already use Lua as a plugin language or something.
.ini has never let me down.
It’s a bit janky with spaces and things, but the simplicity is insane!
Yup yup!
Definitely not yaml. It’s spec is horrible.
Toml is pretty nice though.
I hate table definitions in TOML with a passion.
I like YAML. I guess that’s because I don’t need to build parsers for it. What’s your worst complain about it?
Not XML. Not binary-only (looking at you, Solaris).
Personally, I like .ini-style config files, but I’m weird that way.
Toml is kind of ini++, though, isn’t it.
I don’t know. Never really thought about TOML.
Check out the spec sometime. It’s basically ini with some stuff added on top.
It’s quite nice when you need something that parses into some kind of map, while being human readable.
nix
This post was sponsored by NixOS gang
(jokes aside, json is king. Yaml is a pain in the ass)
Json
Overall, JSON5 (having comments and end-of-line commas is a big reason I got into YAML).
I suffer with YAML, but use it pretty heavily. It also has the * and & operators which I use fairly heavily, and it fits well with the Markdown + YAML I use, but I hate that whitespace indenting with a passion.
Occasionally, I look at Nickle (https://github.com/tweag/nickel) and KDL (https://kdl.dev/) and I get really tempted, just haven’t made that jump.
.txt