Letzte Aktualisierung: April 2026
Was ist TOML-Formatierung?
TOML (Tom's Obvious Minimal Language) ist ein Konfigurationsdateiformat, das Tom Preston-Werner im Jahr 2013 entwickelt hat. Es bildet direkt auf eine Hash-Tabelle ab und verwendet explizite Typisierung für alle Werte. Ein TOML-Formatter nimmt rohe oder uneinheitlich gestaltete TOML-Daten und serialisiert sie mit gleichmäßigem Abstand, korrekter Einrückung und kanonischer Schlüsselanordnung neu. Das Ergebnis ist eine Datei, die im gesamten Projekt denselben Konventionen folgt und Config-Änderungen in Diffs leichter nachvollziehbar macht.
Die TOML-v1.0.0-Spezifikation, die im Januar 2021 finalisiert wurde, definiert die Grammatik so streng, dass jeder konforme Parser aus derselben Eingabe eine identische Datenstruktur erzeugt. Formatierung verändert den semantischen Inhalt einer TOML-Datei nicht. Sie passt ausschließlich Leerzeichen, Schlüsselgruppierung und Anführungsstil an. Das bedeutet: TOML-Dateien können bedenkenlos formatiert werden, ohne das Verhalten der Anwendung zu beeinflussen.
Im Gegensatz zu JSON unterstützt TOML Kommentare, native Datum-Uhrzeit-Typen und mehrere String-Formen (einfach, literal und mehrzeilig). Ein guter Formatter bewahrt Kommentare und respektiert den Unterschied zwischen Inline-Tabellen und Standard-Tabellenheadern. Er behandelt auch Arrays von Tabellen korrekt und hält die Abschnittsgruppiering intakt, damit die Datei sowohl für Menschen als auch für Parser lesbar bleibt.
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"
Warum einen TOML-Formatter verwenden?
Konfigurationsdateien häufen mit der Zeit Stilabweichungen an, wenn verschiedene Teammitglieder sie bearbeiten. Tabs mischen sich mit Leerzeichen, manche Schlüssel werden unnötigerweise in Anführungszeichen gesetzt, und Tabellenabschnitte verlieren ihre visuelle Gruppierung. Ein TOML-Formatter normalisiert all das in einem einzigen Durchgang.
Anwendungsfälle für den TOML Formatter
TOML-Syntax-Referenz
TOML hat einen überschaubaren Satz an Konstrukten. Die nachfolgende Tabelle listet alle strukturellen Elemente auf, die in der TOML-v1.0.0-Spezifikation definiert sind. Ein Formatter wendet auf alle davon konsistente Abstände und Gruppierungen an.
| Syntax | Name | Hinweise |
|---|---|---|
| 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 und YAML lösen überlappende Probleme, treffen aber unterschiedliche Kompromisse.
| Merkmal | TOML | JSON | YAML |
|---|---|---|---|
| Kommentare | # Zeilenkommentare | Nicht unterstützt | # Zeilenkommentare |
| Typisierte Werte | String, int, float, bool, datetime | String, number, bool, null | Abgeleitet (fehleranfällig) |
| Verschachtelung | [table]-Header | Geschweifte Klammern | Einrückungsbasiert |
| Spezifikationsstrenge | Streng (ein Parse-Ergebnis) | Streng (RFC 8259) | Locker (mehrere gültige Parses) |
| Datum-/Uhrzeit-Unterstützung | 4 native Typen | Keine (Strings verwenden) | Implizit (fragil) |
| Abschließende Kommas | Nicht erlaubt | Nicht erlaubt | K. A. (keine Kommas) |
Code-Beispiele
Die folgenden Beispiele zeigen, wie TOML programmatisch in verschiedenen Sprachen und Tools formatiert wird. Jedes liest eine Datei, parst sie und schreibt eine formatierte Version.
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