TOML

Configuration file format

TOML

Filename extension|

.toml

Internet media type|

application/toml

Developed by|

* Tom Preston-Werner
* Community

Initial release| 23 February 2013; 12 years ago (2013-02-23)
Latest release|

1.0.0[1]
12 January 2021; 4 years ago (12 January 2021)

Type of format| Data interchange
Open format?| Yes
Website| toml.io

Tom's Obvious, Minimal Language (TOML, originally Tom's Own Markup Language[2]) is a file format for configuration files.[3] It is intended to be easy to read and write due to obvious semantics which aim to be "minimal", and it is designed to map unambiguously to a dictionary. Originally created by Tom Preston-Werner, its specification is open source. TOML is used in a number of software projects[4][5][6] and is implemented in many programming languages.[7]

## Syntax

[edit]

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

[edit]

# This is a TOML document.

title = "ImpalaPay Co."

[database]
server = "192.168.1.1"
ports = [ 8000, 8001, 8002 ]
connection_max = 5000
enabled = true

# Line breaks are okay when inside arrays
hosts = [
"alpha",
"omega"

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

## Use cases

[edit]

TOML is used in a variety of settings (some related to its creator), such as:

* Static site generators like Jekyll and Hugo.
* Python programming language[8] and package manifest[9]
* Rust package manifest[4]
* Julia project setting and package manifest[10]
* Blender add-on manifest.
* Gradle version catalog[11]

## Criticism

[edit]

TOML has been criticized on a number of points:[12][13]

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

## See also

[edit]

* Configuration file § File format
* INI file

## References

[edit]

1. ^ "Release 1.0.0". 12 January 2021. Retrieved 17 January 2021.
2. ^ Preston-Werner, Tom (2013-02-24). "Initial commit · toml-lang/toml@84db252". GitHub. Archived from the original on 2024-06-15. Retrieved 2024-06-15.
3. ^ Preston-Werner, Tom; Gedam, Pradyun (January 11, 2021). "TOML: English v1.0.0". Archived from the original on January 29, 2024. Retrieved January 27, 2024.
4. ^ a b "The Manifest Format - The Cargo Book". doc.rust-lang.org. Archived from the original on 2019-08-26. Retrieved 2023-07-08.
5. ^ DeVault, Drew (2021-07-28). "My wish-list for the next YAML". Archived from the original on 2024-03-09. Retrieved 2021-07-28. "YAML is both universally used, and universally reviled. It has a lot of problems, but it also is so useful in solving specific tasks that it's hard to replace. Some new kids on the block (such as TOML) have successfully taken over a portion of its market share, but it remains in force in places where those alternatives show their weaknesses."
6. ^ "TOML: Tom's Obvious Minimal Language". toml.io. Archived from the original on 2022-08-08. Retrieved 2022-08-08.
7. ^ "toml-lang/toml". GitHub. 23 May 2022. Archived from the original on 15 February 2017. Retrieved 16 December 2016.
8. ^ "tomllib — Parse TOML files". Python documentation. Archived from the original on 2024-06-11. Retrieved 2023-07-08.
9. ^ "PEP 518 – Specifying Minimum Build System Requirements for Python Projects | peps.python.org". Python Enhancement Proposals (PEPs). Retrieved 2025-02-04.
10. ^ "10. Project.toml and Manifest.toml · Pkg.jl". pkgdocs.julialang.org. Archived from the original on 2023-07-08. Retrieved 2023-07-08.
11. ^ https://docs.gradle.org/current/userguide/version_catalogs.html
12. ^ What is wrong with TOML?
13. ^ An INI critique of TOML

## External links

[edit]

* Official website

* v
* t
* e

Data exchange formats

Human
readable|

* Atom
* CSV
* EDIFACT
* JSON
* Web Encryption
* Web Token
* Web Signature
* Property list
* RDF
* Rebol
* TOML
* XML
* YAML

Binary|

* AMF
* Ascii85
* ASN.1
* SMI
* Avro
* Base32
* Base64
* Bencode
* BSON
* UBJSON
* Cap'n Proto
* CBOR
* FlatBuffers
* MessagePack
* Property list
* Protocol Buffers
* Thrift
* Cyphal DSDL
* XDR
* uuencode
* yEnc

Comparison of data-serialization formats
*[v]: View this template
*[t]: Discuss this template
*[e]: Edit this template