Laatst bijgewerkt: april 2026
Wat is TOML-opmaak?
TOML (Tom's Obvious Minimal Language) is een configuratiebestandsformaat dat in 2013 is gemaakt door Tom Preston-Werner. Het wordt direct vertaald naar een hashtabel en gebruikt expliciete typen voor alle waarden. Een TOML-formatter neemt ruwe of inconsistent opgemaakte TOML en herserialiseert deze met uniforme spatiëring, correcte inspringing en canonieke sleutelordening. Het resultaat is een bestand dat in het hele project dezelfde conventies volgt, waardoor configuratiewijzigingen makkelijker te beoordelen zijn in diffs.
De TOML v1.0.0-specificatie, definitief vastgesteld in januari 2021, definieert de grammatica strikt genoeg dat elke conforme parser een identieke gegevensstructuur produceert uit dezelfde invoer. Opmaak verandert de semantische inhoud van een TOML-bestand niet. Alleen witruimte, sleutelgroepering en aanhalingstekenstijl worden aangepast. Dit betekent dat u TOML-bestanden vrijelijk kunt formatteren zonder te hoeven zorgen dat het gedrag van uw applicatie verstoord wordt.
In tegenstelling tot JSON ondersteunt TOML opmerkingen, native datum-tijdtypes en meerdere tekenreeksvormen (basis, letterlijk en meerregelig). Een goede formatter bewaart opmerkingen en respecteert het onderscheid tussen inline-tabellen en standaard tabelkoppen. Het verwerkt ook arrays van tabellen correct en houdt de sectiegroepering intact, zodat het bestand leesbaar blijft voor zowel mensen als de parsers die het verwerken.
title="My App" version="1.0.0" debug=false [database] host="localhost" port=5432 name="mydb" [database.pool] max_connections=25 timeout=30 [[servers]] name="web" host="web.example.com" [[servers]] name="api" host="api.example.com"
title = "My App" version = "1.0.0" debug = false [database] host = "localhost" port = 5432 name = "mydb" [database.pool] max_connections = 25 timeout = 30 [[servers]] name = "web" host = "web.example.com" [[servers]] name = "api" host = "api.example.com"
Waarom een TOML Formatter gebruiken?
Configuratiebestanden raken stilistisch versnipperd naarmate verschillende teamleden ze in de loop van de tijd bewerken. Tabs worden gemengd met spaties, sommige sleutels worden onnodig geciteerd en tabelsecties verliezen hun visuele groepering. Een TOML-formatter normaliseert dit alles in één keer.
Toepassingen van de TOML Formatter
TOML-syntaxisreferentie
TOML heeft een kleine verzameling constructies. De onderstaande tabel toont elk structureel element dat is gedefinieerd in de TOML v1.0.0-specificatie. Een formatter past consistente spatiëring en groepering toe op al deze elementen.
| Syntaxis | Naam | Opmerkingen |
|---|---|---|
| key = "value" | Basic key-value pair | Keys are bare or quoted; values are typed |
| [table] | Standard table | Creates a named section (hash table) |
| [a.b.c] | Dotted table | Shorthand for nested tables |
| [[array]] | Array of tables | Each [[name]] block appends to an array |
| key = """...\n""" | Multi-line basic string | Allows newlines, escapes processed |
| key = '''...\n''' | Multi-line literal string | Allows newlines, no escape processing |
| # comment | Comment | Extends to end of line; not in JSON output |
| {inline = true} | Inline table | Single-line table, no newlines allowed |
TOML vs JSON vs YAML
TOML, JSON en YAML lossen overlappende problemen op, maar maken verschillende afwegingen.
| Functie | TOML | JSON | YAML |
|---|---|---|---|
| Opmerkingen | # regelopmerkingen | Niet ondersteund | # regelopmerkingen |
| Getypeerde waarden | String, int, float, bool, datetime | String, number, bool, null | Afgeleid (foutgevoelig) |
| Nesting | [table]-koppen | Accolades | Op inspringing gebaseerd |
| Specificatiestrengheid | Strikt (één parseresultaat) | Strikt (RFC 8259) | Losjes (meerdere geldige parses) |
| Datum/tijd-ondersteuning | 4 native typen | Geen (gebruik tekenreeksen) | Impliciet (fragiel) |
| Afsluitende komma's | Niet toegestaan | Niet toegestaan | N.v.t. (geen komma's) |
Codevoorbeelden
De onderstaande voorbeelden formatteren TOML programmatisch in verschillende talen en hulpmiddelen. Elk leest een bestand, parseert het en schrijft een geformatteerde versie.
import { parse, stringify } from '@iarna/toml'
import fs from 'fs'
const raw = fs.readFileSync('config.toml', 'utf-8')
const doc = parse(raw)
const formatted = stringify(doc)
// stringify() outputs canonical TOML with consistent spacing
fs.writeFileSync('config.toml', formatted)
// Quick one-liner with npx:
// npx taplo fmt config.tomlimport tomllib # Python 3.11+ (read-only)
import tomli_w # pip install tomli-w (write)
# Parse and re-serialize to format
with open("config.toml", "rb") as f:
data = tomllib.load(f)
formatted = tomli_w.dumps(data)
# tomli_w produces sorted keys, consistent quoting, and
# proper whitespace around = signs
print(formatted)
# CLI alternative: taplo fmt config.tomlpackage main
import (
"fmt"
"os"
"github.com/BurntSushi/toml"
"bytes"
)
func main() {
var data map[string]interface{}
_, err := toml.DecodeFile("config.toml", &data)
if err != nil {
fmt.Fprintln(os.Stderr, err) // parse error with line number
os.Exit(1)
}
var buf bytes.Buffer
enc := toml.NewEncoder(&buf)
enc.Indent = " "
enc.Encode(data) // re-serialized with consistent formatting
fmt.Print(buf.String())
}# Install taplo — the standard TOML toolkit cargo install taplo-cli # or: npm install -g @taplo/cli # Format a single file in place taplo fmt config.toml # Format all .toml files in a project taplo fmt # Check formatting without modifying (CI-friendly) taplo fmt --check # Validate TOML syntax without formatting taplo lint config.toml