YAML vs. TOML
Wählen Sie YAML für Ökosysteme, die es bereits sprechen – Kubernetes, CI-Pipelines, Ansible – und für tief verschachtelte Dokumente, die Menschen lesen müssen. Wählen Sie TOML, wenn eine Datei eindeutig, einfügesicher und streng typisiert sein soll: Strings in Anführungszeichen, native Datumsangaben, explizite Struktur. Beide unterstützen Kommentare, beide sind Konfigurationssprachen, und die Umwandlung zwischen ihnen ist Routine.
YAML vs. TOML erklärt
YAML und TOML existieren aus demselben Grund: JSON macht elende Konfiguration – keine Kommentare, Pflicht-Anführungszeichen an jedem Schlüssel, geschweifte Klammern zum Zählen. Von diesem gemeinsamen Startpunkt aus gingen die beiden entgegengesetzte Wetten ein. YAML setzte auf Kürze durch Inferenz: Anführungszeichen meist optional, Verschachtelung durch Einrückung ausgedrückt, Struktur impliziert. TOML setzte auf Explizitheit: Strings müssen in Anführungszeichen stehen, Abschnitte müssen mit [Headern] deklariert werden, und nichts wird geraten. Keine der Wetten ist falsch; sie optimieren auf unterschiedliche Fehlerarten.
YAMLs Wette kauft kompakte, sehr lesbare Dateien – und eine ganze Fehlerklasse, die TOML nicht hat. Einrückungsfehler formen Dokumente still um, und nackte Skalare werden per Inferenz typisiert, sodass ein Ländercode wie NO zu booleschem false wird (das Norwegen-Problem). TOMLs Wette kauft Dateien, die in der Tiefe länger, aber nahezu unmöglich falsch zu lesen sind: Die Grammatik ist klein, seit 2021 semver-stabil bei 1.0 versioniert, und der Typ eines Werts wird stets durch seine Syntax deklariert.
Diese Seite vergleicht die beiden dort, wo Entscheidungen fallen: Syntax und Struktur, Typisierung und die klassischen Überraschungen, Kommentare und Anker sowie die Ökosysteme – Kubernetes und CI für YAML, Cargo und Python-Packaging für TOML –, die meist zuerst für Sie entscheiden.
Am schnellsten spüren Sie den Typisierungsunterschied, wenn Sie dieselbe Datei in beide Richtungen umwandeln – der YAML-zu-JSON-Konverter zeigt in Ihrem Browser exakt, was aus jedem nackten Skalar geworden ist.
Sie möchten wissen, worauf TOMLs expliziter Stil hinausläuft? Der TOML-zu-JSON-Konverter parst lokal und beschriftet nichts, denn nichts muss erschlossen werden.
Zwei Philosophien: erschlossen versus deklariert
Der tiefste aller Unterschiede ist, wo die Struktur lebt. In YAML ist Struktur Leerraum: Einrückungsebenen definieren die Verschachtelung, und Tabs sind kategorisch verboten. In TOML ist Struktur Zeichensetzung: Eine Zeile wie [database.pool] deklariert eine Tabelle, und Einrückung ist rein kosmetisch. Alles andere auf dieser Seite – Einfügesicherheit, Ausführlichkeit in der Tiefe, Fehlermeldungen – folgt aus dieser einen Entscheidung.
| Aspekt | YAML 1.2 | TOML 1.0 |
|---|---|---|
| Struktur | Einrückung (nur Leerzeichen; Tabs verboten) | [table]-Header und gepunktete Schlüssel |
| Strings | Anführungszeichen meist optional | Immer in Anführungszeichen – "..." oder '...' |
| Typisierung | Je Parser erschlossen; NO wird false | Durch Syntax deklariert; nichts erschlossen |
| Datums- und Zeitangaben | Zeitstempel-Typ, parserabhängig | Native RFC 3339-Zeitangaben |
| Anker | &-Anker und *-Aliase | Keine – Werte werden wiederholt oder erzeugt |
| Mehrdokument | Ja – durch --- getrennte Streams | Ein Dokument pro Datei |
| Kommentare | # bis zum Zeilenende | # bis zum Zeilenende |
| Stabilität der Spezifikation | 1.2 (2009), geschichtet und verschachtelt | 1.0 (2021), klein und semver-stabil |
Syntax: Einrückung gegen Tabellenheader
Flache Konfiguration schmeichelt beiden Formaten; tiefe Verschachtelung trennt sie. YAML wird mit wachsender Struktur immer leiser – zwei Leerzeichen und ein Strich –, während TOML eine Headerzeile pro Ebene schreibt: [database.pool.limits], dann [database.pool.limits.read]. Bei drei Ebenen ist TOML bloß ausführlich; bei acht ist YAML die einzig vernünftige handgeschriebene Wahl. Tabellen-Arrays drehen das Urteil um: TOMLs [[products]]-Blöcke sind knackig und greppbar, während lange YAML-Listen von Maps genau dort sind, wo Spalten abdriften.
Einfügesicherheit folgt unmittelbar. Ein Block, der in YAML eine Spalte zu weit links oder rechts eingefügt wird, bricht entweder das Parsen oder – schlimmer – verändert still seine Bedeutung; die Datei parst weiter, und nichts warnt Sie. In TOML trägt ein eingefügter Block seinen eigenen [Header], landet also dort, wo seine Überschrift es sagt, ganz gleich, wie der umgebende Leerraum aussieht.
Typen und das Norwegen-Problem
YAML erschließt Skalartypen, und die Inferenz hat Zähne: yes, no, on und off werden unter den YAML-1.1-Regeln, die viele Parser noch ausliefern, zu Booleans, NO wird false, und eine als 1.20 geschriebene Version kann als Zahl 1.2 ankommen. YAML 1.2 hat die Regeln gestutzt, aber die Parser nicht vereinheitlicht, sodass dieselbe Datei je nach Tool unterschiedlich typisiert sein kann. Die Verteidigung ist, alles in Anführungszeichen zu setzen, was ein String bleiben muss.
TOML hat keinen Inferenzschritt, den man falsch machen könnte: Anführungszeichen machen einen String, nackte Ziffern machen eine Ganzzahl (Unterstreichzeichen zur besseren Lesbarkeit erlaubt), und RFC 3339-Zeitstempel sind ein erstklassiger Typ – ein echter Vorteil gegenüber JSON wie YAML für Konfiguration, die Datumsangaben enthält. Mehrzeilige Strings gibt es in beiden: TOMLs dreifach zitierte """-Blöcke und YAMLs |- und >-Skalare.
Ökosysteme und wann Sie was wählen
Die Ökosysteme haben das Terrain bereits aufgeteilt. YAML besitzt Cloud-native und CI: Kubernetes-Manifeste, GitHub Actions und GitLab CI, Ansible, docker-compose, OpenAPI-Beschreibungen. TOML besitzt Packaging- und Tooling-Metadaten: Rusts Cargo, Pythons pyproject.toml und eine lange Liste von CLI-Tools, die eindeutige, kommentarfreundliche Konfiguration wollen. Sich gegen ein Ökosystem zu entscheiden bedeutet, für immer gegen dessen Tooling zu kämpfen, daher ist das selten eine freie Wahl.
Wo Sie doch wählen: YAML für tief verschachtelte, von Menschen geprüfte Dokumente, und TOML, wenn Werte eindeutig, Diffs exakt und Dateien von Menschen wie Generatoren bearbeitet sein müssen. Die Empfehlung kehrt sich routinemäßig um – die meisten Repositories haben beide –, und die hier verlinkten Konverter überbrücken beide Richtungen lokal.
Häufig gestellte Fragen
Verdrängt TOML YAML?
Nein – die beiden haben sich das Terrain geteilt, statt darum zu kämpfen. YAML ist dort verankert, wo Cloud-native-Tooling es vorschreibt: Kubernetes, GitHub Actions, Ansible, docker-compose. TOML ist im Packaging verankert: Cargo.toml, pyproject.toml und die Konfiguration der meisten modernen CLI-Tools. Neue Tools wählen zunehmend TOML für einfache Einstellungen, aber eine ernsthafte Migration weg von YAML findet in keinem Maßstab statt.
Hat TOML das Norwegen-Problem?
Nein. YAML erschließt Typen für nackte Skalare, also parst NO als boolesches false, und on oder off werden ebenfalls zu Booleans. TOML verlangt, dass jeder String in Anführungszeichen steht, also ist "NO" eindeutig ein String, und nichts wird je erschlossen. Die YAML-Verteidigung ist dieselbe Disziplin, die TOML vorschreibt: jeden Wert in Anführungszeichen setzen, der Text bleiben muss.
Laden die YAML- und TOML-Konverter meine Konfiguration hoch?
Nein. Parsen und Ausgeben laufen in Ihrem Browser-Tab – es gibt keinen Upload-Endpunkt, und die Content-Security-Policy der Website erlaubt Netzwerk-Requests nur an sich selbst. Öffnen Sie beim Konvertieren den Netzwerk-Tab der DevTools, und Sie sehen keinen ausgehenden Request; die eingefügten Dateien bleiben im Tab.
Warum wird TOML bei verschachtelter Konfiguration so ausführlich?
Jede Verschachtelungsebene braucht ihren eigenen Header in eckigen Klammern: [database.pool.limits.read] deklariert drei Zeilen Gültigkeitsbereich, bevor der erste Wert kommt. Diese Ausführlichkeit ist zugleich das Feature – Abschnitte sind greppbar, der Geltungsbereich ist eindeutig, und Diffs zeigen exakt, was sich bewegt hat. Wenn Ihre Konfiguration acht Ebenen tief verschachtelt, ist YAMLs Einrückung wirklich die bessere Passung.
Unterstützen YAML und TOML beide Kommentare?
Ja – beide nutzen # bis zum Zeilenende, und genau deshalb haben beide JSON für Konfiguration verdrängt. Sie unterscheiden sich in fast allem anderen: Anker und Mehrdokument-Streams gibt es nur in YAML, während TOML native RFC 3339-Datumsangaben und eine semver-stabile 1.0-Grammatik bietet, die YAML nie erreicht hat.
Welches Format ist beim Kopieren und Einfügen sicherer?
TOML. Ein in YAML eingefügter Block muss auf genau der richtigen Einrückungsspalte landen, sonst ändert sich die Bedeutung des Dokuments still; selbst wenn es parst, warnt Sie nichts. TOML-Blöcke sind durch ihre eigenen [Header] abgegrenzt, also ist Einrückung kosmetisch, und ein eingefügter Abschnitt bedeutet, was seine Überschrift sagt, egal wo er landet.
Wo kann ich die hier zitierten Standards nachlesen?
Welche verwandten Tools sollten Sie als Nächstes nutzen?
- JSON vs. YAMLDirekter VergleichÖffnen
- YAML-GrundlagenLeitfaden in verständlicher SpracheÖffnen
- YAML in JSON umwandelnUmwandeln, ohne dass aus „NO“ false wirdÖffnen
- JSON in YAML umwandelnMit Anführungszeichen, die den Rückweg überstehenÖffnen
- TOML zu JSONKonverter – läuft in Ihrem BrowserÖffnen
- JSON zu TOMLKonverter – läuft in Ihrem BrowserÖffnen