[TOML](https://toml.io/en/) is largely a formalization of an extremely common unspecified historical format simply known as [[INI]].
# Example
```toml
# This is a TOML document.
title = "TOML Example"
[owner]
name = "Tom Preston-Werner"
dob = 1979-05-27T07:32:00-08:00 # First class dates
[database]
server = "192.168.1.1"
ports = [ 8000, 8001, 8002 ]
connection_max = 5000
enabled = true
[servers]
# Indentation (tabs and/or spaces) is allowed but not required
[servers.alpha]
ip = "10.0.0.1"
dc = "eqdc10"
[servers.beta]
ip = "10.0.0.2"
dc = "eqdc10"
[clients]
data = [ ["gamma", "delta"], [1, 2] ]
# Line breaks are OK when inside arrays
hosts = [
"alpha",
"omega"
]
```
via [Wikipedia](https://en.wikipedia.org/wiki/Toml)
# Criticism
Some people don't like the fact that TOML has a concept of data types. I think this is a silly complaint on its own.
I do think TOML requires too much syntax to do what is essentially a very limited number of tasks. Strings must be quoted everywhere. Brackets are necessary when commas would be adequate for separating.
Fundamentally I don't think that TOML solved primarily for the 80% case, but instead tried to solve for a lot of edge cases as a first order problem. And this is why the syntax is so heavy for what should be a very lightweight system.
Given the choice between XML, JSON, YAML, or TOML I will take TOML every time. And since it is very common and well supported, if anyone asks what configuration language they should use it will be my number one recommendation until something else comes along.
I think as a "at least it isn't XML" solution it is great. But on its own, objectively, it has a lot of problems.
# Implementations
There exist TOML implementations in just about every language known to humankind.
It is particularly popular in the [[Rust|Rust]] scene.
# References
https://hitchdev.com/strictyaml/why-not/toml/