TOML is a file format for configuration files. It is intended to be easy to read and write due to obvious semantics which aim to be "minimal", and is designed to map unambiguously to a dictionary. Its specification is open-source, and receives community contributions. TOML is used in a number of software projects, and is implemented in many programming languages. The name "TOML" is an acronym for "Tom's Obvious, Minimal Language" referring to its creator, Tom Preston-Werner.

Syntax
TOML's syntax primarily consists of key = value pairs, [section names], and # (for comments). TOML's syntax somewhat resembles that of .INI files, but it includes a formal specification, whereas the INI file format suffers from many competing variants.

Its specification includes a list of supported data types: String, Integer, Float, Boolean, Datetime, Array, and Table.

Example
# This is a TOML document.

title = "ImpalaPay Co."

[owner]
name = "Impala Co."
establishment=""

[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"
]

Use cases
TOML is used in a variety of settings (some related to its creator), such as:
 Static site generators like Jekyll and Hugo
 Continuous integration on e.g. GitHub and GitLab
 Python programming language
 Rust package manifest
 Julia project setting and package manifest

Comparison to other formats

Criticism
Although there is not a consensus, TOML has received several critiques since its first release. The HitchDev lists the following points as problematic in TOML:

 TOML is verbose; it is not DRY and it is syntactically noisy
 TOML's hierarchies are difficult to infer from syntax alone
 Overcomplication: Like YAML, TOML has too many features
 In TOML the syntax determines the data types ("syntax typing")

The libconfini project has since released a more extensive critique of TOML from the INI perspective, listing the following points (among others) as problematic:

 TOML lets the configuration file decide about data types (syntax typing), when de facto it is the client application that decides. Any mismatching type will be either ignored or converted to the expected type (depending on the parser) anyway
 TOML re-introduces what human-friendly languages normally try to get rid of: a verbose syntax and the necessity of using quotes for strings
 TOML syntax is always case-sensitive, despite the fact that there are situations where configuration files must be case-insensitive (as, for instance, configuration files that map a FAT32 filesystem or HTML tags)
 TOML uses square brackets for arrays even though square brackets are already reserved for table names; furthermore any special syntax for arrays brings the language back to syntax typing
 A TOML table must be populated in a single step; merging multiple TOML files is problematic
 TOML arbitrarily introduces a syntax for dates
 TOML allows (but discourages) the empty string as a key
 TOML's quoting rules introduce confusion between actual strings (free content) and enumeration labels (i.e. choices within closed sets of options)
 TOML's rules cannot be inferred from the content, therefore editing a TOML file requires prior knowledge of the language
 TOML is backward-incompatible with INI

See also
 JSON - from JavaScript ecosystem
 Recfiles
 HOCON

References

External links 
 
 

Computer file formats
Configuration files
Lightweight markup languages
Markup languages