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
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.
Agreed. YAML is a pain to edit manually, to ensure that all the tabulation is correct and the parser does not choke. JSON is passable, but you must be mindful about the brackets. XML is too verbose and duplicative. INI files are just good enough.
That's why I like TOML. It's basically INI, but it has more structural features if you need them. Most of the TOML files I use look just like ini files.
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
I'd say a file that you can open with a simple text editor is convenient, so it can be a simple .conf/.ini, more complex are .xml/.yaml that you can still edit in vim/nano but can be cumbersome.
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.
If you use protobuf/gRPC anywhere in your application, text format protobuf. Writes like JSON, but with a clear schema, a parser that already exists in most languages, and has comments.
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.
I like Python and use it a lot, but Dhall has several guarantees that Python doesn't. If you hand someone clever a Python interpreter, they can and will find a way to run rm -rf / or what-have-you, no matter what safeguards you put in place. Dhall also guarantees that it will terminate, which is pretty useful if you're embedding it in something else. In Python you could pretty easily accidentally or purposefully get into a while True loop.