Skip to content
Back to Blog
informational

Was ist YAML? Die menschenfreundliche Datensprache

2026-05-17 9 min read

YAML einfach erklärt

Der vollständige Name von YAML ist 'YAML Ain't Markup Language' – ein rekursiver Witz, der dir sagt, was es *nicht* ist. Es ist nicht dafür gedacht, Dokumente wie HTML auszuzeichnen. Stattdessen ist YAML ein Daten-Serialisierungsformat, das so konzipiert wurde, dass es von einem Menschen lesbar und bearbeitbar ist, ohne dass man ein Handbuch in einem weiteren Tab geöffnet haben muss. Es erschien erstmals 2001, eine Schöpfung von Clark Evans, Ingy döt Net und Oren Ben-Kiki. Seitdem ist es die Standard-Konfigurationssprache für wichtige Tools wie Kubernetes, Ansible, GitHub Actions, Docker Compose und Ruby on Rails geworden. Im Kern verwendet YAML Einrückungen, um Datenstrukturen wie Schlüssel-Wert-Paare und Listen darzustellen. Hier findest du keine spitzen Klammern oder geschweiften Klammern. Eine einfache Docker Compose-Datei zeigt dies deutlich: version: '3.9' services: web: image: nginx:latest ports: - '80:80' Vergleiche das mit dem entsprechenden JSON, und der Reiz ist offensichtlich. Keine Kommas, keine Anführungszeichen bei Schlüsseln und keine schließenden Klammern, die nicht übereinstimmen könnten. Der Kompromiss ist, dass die Einrückung bedeutsam wird. Machst du nur einen einzigen Leerschritt falsch, kann die Datei möglicherweise nicht geparst werden oder, schlimmer noch, stillschweigend etwas ganz anderes bedeuten. Diese Spannung zwischen einfacher Lesbarkeit und strenger Struktur definiert die YAML-Erfahrung. Dich damit vertraut zu machen, ist der Schlüssel zur guten Nutzung des Formats.

Wie YAML Daten strukturiert: Die drei Bausteine

Jedes YAML-Dokument besteht aus den gleichen grundlegenden Teilen: Skalaren, Sequenzen und Mappings. Ein Skalar ist einfach ein einzelner Wert, wie ein String, eine Zahl, ein boolescher Wert oder null. YAML ist clever darin, den Typ abzuleiten, was meist hilfreich ist, aber manchmal nach hinten losgehen kann. Der String 'yes' wird im älteren YAML 1.1-Standard, der immer noch von PyYAML und anderen älteren Tools verwendet wird, als boolescher Wert `true` geparst. YAML 1.2 behandelt es jedoch korrekt als einfachen String. Diese Versionslücke hat zu realen Bugs in der Produktion geführt, daher musst du unbedingt wissen, welchen Parser deine Tools verwenden. Eine Sequenz ist einfach eine geordnete Liste. Du schreibst sie mit einem führenden Gedankenstrich und einem Leerzeichen: fruits: - apple - banana - mango Ein Mapping ist eine Menge von Schlüssel-Wert-Paaren, die du am häufigsten in Konfigurationsdateien sehen wirst. Du kannst Mappings beliebig tief verschachteln, und die Struktur wird rein durch konsistente Einrückung definiert. Die YAML-Spezifikation ist hier eindeutig: Du musst Leerzeichen verwenden, niemals Tabs. YAML bietet auch leistungsstarke Funktionen zur Reduzierung von Wiederholungen. Anker (&) und Aliase (*) ermöglichen es dir, einen Datenblock einmal zu definieren und ihn an anderer Stelle wiederzuverwenden. Das ist ein Lebensretter in CI/CD-Pipelines, wo mehrere Jobs genau den gleichen Block von Umgebungsvariablen teilen könnten. Für lange Strings bietet YAML zwei Blockstile: Der Literal Block Scalar (|) bewahrt Zeilenumbrüche exakt, während der Folded Block Scalar (>) sie zu Leerzeichen zusammenfasst. Das ist perfekt für lange Shell-Befehle, die du in der Datei lesbar halten möchtest, ohne dem Befehl selbst tatsächliche Zeilenumbrüche hinzuzufügen.

Wo YAML tatsächlich eingesetzt wird

YAML gedeiht in der Welt der Infrastruktur und Entwickler-Tools. Die Zahlen lügen nicht. Stand 2024 verarbeitet GitHub Actions täglich über 100 Millionen Workflow-Ausführungen, jede einzelne davon gesteuert durch eine .yml-Datei im .github/workflows-Verzeichnis eines Projekts. Kubernetes, die Engine hinter den meisten Cloud-nativen Anwendungen, verlässt sich auf YAML, um jede einzelne Ressource zu definieren: Deployments, Services, ConfigMaps, was auch immer du nennen möchtest. Eine typische Microservices-Anwendung kann leicht Hunderte von YAML-Dateien ansammeln. Ansible, das IT-Automatisierungstool, das von über 25.000 Organisationen (laut Red Hat) genutzt wird, verwendet YAML für alle seine Playbooks. Eine Standardaufgabe in einem Ansible-Playbook sieht so aus: - name: Install nginx ansible.builtin.package: name: nginx state: present Jenseits der DevOps-Sphäre findest du YAML in statischen Website-Generatoren wie Jekyll, das YAML Front Matter verwendet, um Metadaten in Markdown-Dateien zu speichern. API-Test-Tools wie Hoppscotch und Insomnia nutzen es für die Umgebungskonfiguration. Sogar Data-Science-Pipelines verwenden es; Tools wie DVC (Data Version Control) verfolgen Experimentparameter in YAML-Dateien. Ein Bereich, in dem du nicht viel YAML sehen wirst, ist der Datenaustausch zwischen Webdiensten. REST-APIs verwenden fast universell JSON für Anfrage- und Antwort-Bodies. Warum? Weil JSON-Parser in jedem Browser integriert sind und die Strenge des Formats keinen Raum für Mehrdeutigkeiten lässt. Das ist der entscheidende Unterschied: YAML ist für Menschen, die Dateien auf der Festplatte bearbeiten; JSON ist für Maschinen, die Daten über ein Netzwerk austauschen. Das Merken dieser einfachen Regel wird viel Verwirrung bei der Wahl des Formats verhindern.

YAML vs. JSON vs. TOML: Das richtige Format wählen

Wenn du ein Konfigurationsformat wählst, entscheidest du dich normalerweise zwischen YAML, JSON und TOML. Jedes hat eine eigene Persönlichkeit. JSON (JavaScript Object Notation) ist das strengste. Jeder String muss in Anführungszeichen stehen, jede Liste und jedes Objekt explizit geschlossen werden, und es gibt keine Unterstützung für Kommentare. Letzteres ist eine große Frustquelle für Entwickler, die Konfigurationen kommentieren möchten. Aber JSONs Stärke ist seine starre, eindeutige Analyse; zwei konforme Parser werden aus der gleichen Eingabe identische Datenstrukturen erzeugen. Seine Dateigröße ist für typische Konfigurationen im Allgemeinen mit YAML vergleichbar. TOML (Tom's Obvious, Minimal Language) wurde geschaffen, um JSONs Mangel an Kommentaren und YAMLs knifflige Leerzeichenregeln zu beheben. Es verwendet eine INI-ähnliche Syntax und wurde von Rusts Cargo Paketmanager und Pythons pyproject.toml Standard übernommen. TOML ist fantastisch für flache oder wenig verschachtelte Konfigurationen, wird aber unhandlich und wortreich, wenn du tief verschachtelte Daten darstellen musst. Wo passt YAML also hin? YAML ist der klare Gewinner, wenn deine Konfiguration eine erhebliche Verschachtelungstiefe aufweist, wenn du Anker und Aliase verwenden kannst, um Wiederholungen zu eliminieren, oder wenn nicht-technische Personen die Datei bearbeiten müssen. Es ist die falsche Wahl, wenn dein Team ständig mit Einrückungsfehlern zu kämpfen hat oder wenn die Typinferenz Überraschungen bereitet (wie das berüchtigte Norwegen-Problem, bei dem der Ländercode 'NO' als boolescher Wert `false` geparst wurde). Wenn du zwischen Formaten konvertieren musst, bietet CocoConvert zuverlässige YAML-zu-JSON- und JSON-zu-YAML-Konvertierungen. Es unterstützt TOML jedoch nicht als Ausgabeformat. Wenn du von YAML zu TOML gelangen musst, musst du auf ein Kommandozeilen-Tool wie `yq` zurückgreifen. Das ist besser, wenn man es vorher weiß.

Häufige YAML-Fehler und wie du sie vermeidest

Die häufigste Ursache für YAML-Fehler ist inkonsistente Einrückung. Jeder, der eine Stunde damit verbracht hat, eine CI-Pipeline zu debuggen, nur um einen einzigen falsch platzierten Leerschritt zu finden, kennt diesen Schmerz. Anders als Python, das jede konsistente Einrückungsbreite akzeptiert, verlangt YAML, dass gleichrangige Schlüssel auf derselben Ebene genau dieselbe Einrückung haben. Das Mischen von Zwei-Leerzeichen- und Vier-Leerzeichen-Einrückungen in einer Datei führt zu einem Parse-Fehler oder, viel schlimmer, zu einer stillschweigenden Umstrukturierung deiner Daten. Die einzig sichere Arbeitsweise ist, deinen Editor so zu konfigurieren, dass er Leerzeichen anstelle von Tabs verwendet und eine konsistente Einrückungsgröße erzwingt. Zwei Leerzeichen sind der De-facto-Standard für Kubernetes und GitHub Actions. Nicht zitierte Sonderzeichen sind eine weitere Falle. Ein Doppelpunkt, gefolgt von einem Leerzeichen, ist ein Schlüssel-Wert-Trennzeichen, daher muss ein String wie 'http://example.com:8080' in Anführungszeichen gesetzt werden. Vergisst du die Anführungszeichen, erhältst du einen Parse-Fehler. Ebenso müssen Werte, die mit `{`, `[` oder `%` beginnen, in Anführungszeichen gesetzt werden, da sie in der YAML-Syntax eine besondere Bedeutung haben. Dann gibt es noch die Überraschungen bei der Typumwandlung. Wir haben bereits erwähnt, wie 'no' zu `false` werden kann. Aber wusstest du, dass Zahlen mit führenden Nullen als oktale Ganzzahlen geparst werden können? Der Wert 0755, eine übliche Unix-Dateiberechtigung, wird zu dezimal 493, es sei denn, du setzt ihn in Anführungszeichen. Datumsangaben sind eine weitere Stolperfalle; 2024-01-01 ohne Anführungszeichen wird zu einem Datumsobjekt, nicht zu einem String, was Tools stören kann, die einen String erwarten. Die beste Verteidigung ist, dein YAML zu linten, bevor du es committest. `yamllint` ist ein unverzichtbares Kommandozeilen-Tool, das Einrückungsfehler, überflüssige Leerzeichen am Zeilenende und andere häufige Probleme erkennt. Deine CI-Pipeline sollte unbedingt einen `yamllint`-Schritt enthalten. Für einen schnellen einmaligen Check ist das Einfügen deiner Datei in den YAML-zu-JSON-Konverter von CocoConvert ein hervorragender Sanity-Test. Wenn die resultierende JSON-Struktur nicht so aussieht, wie du es beabsichtigt hast, hat dein YAML ein Problem.

YAML-Dateien konvertieren: Was CocoConvert kann

CocoConvert bietet Tools für die beiden häufigsten Konvertierungsbedürfnisse: YAML zu JSON und JSON zu YAML. Der Prozess ist einfach: Füge deinen Inhalt ein oder lade eine .yaml-Datei hoch, wähle dein Zielformat und lade das Ergebnis herunter. Der Konverter bewahrt die verschachtelte Struktur deiner Daten präzise. Er behandelt auch korrekt YAML-Dateien mit mehreren Dokumenten (wobei Dokumente durch --- getrennt sind), indem er jedes einzelne in ein separates JSON-Objekt innerhalb eines größeren Arrays umwandelt. Bei der Konvertierung von YAML zu JSON wird die Ausgabe mit einer standardmäßigen Zwei-Leerzeichen-Einrückung formatiert, wodurch sie lesbar und mit nahezu allen JSON-Tools kompatibel ist. Wenn du einen kompakten, einzeiligen JSON-String benötigst – vielleicht für eine Umgebungsvariable oder um die Payload-Größe zu reduzieren – ist eine Minify-Option auf der Ergebnisseite verfügbar. Bei der Konvertierung von JSON zu YAML verwendet der Konverter eine Zwei-Leerzeichen-Einrückung und lässt den Dokumentstartmarker (---) für einzelne Dokumente weg. Wenn die Eingabe mehrere JSON-Objekte enthält, wird jedes zu einem eigenständigen YAML-Dokument, getrennt durch den `---`-Marker. Entscheidend ist, dass es String-Werte, die als Booleans, Nullwerte oder Zahlen missinterpretiert werden könnten, automatisch in Anführungszeichen setzt, sodass du dir keine Sorgen machen musst, dass ein String wie 'true' oder '1.0' Probleme verursacht. Seien wir direkt, was die Einschränkungen angeht. CocoConvert bewahrt YAML-Kommentare während der Konvertierung nicht. Dies ist kein Mangel des Tools; Kommentare sind nicht Teil des formalen Datenmodells von YAML, daher werden sie vom Parser entfernt. Anker und Aliase werden ebenfalls aufgelöst, was bedeutet, dass die endgültige Ausgabe wiederholte Werte anstelle von Referenzen enthält. Schließlich können sehr große Dateien (über 10 MB) im kostenlosen Tarif zu einem Timeout führen. Für solche großen Aufgaben ist ein Kommandozeilen-Tool wie `yq` die bessere Wahl.

Wann du YAML verwenden solltest und wann lieber nicht

YAML ist das richtige Tool, wenn einige Bedingungen erfüllt sind. Die Datei wird von Menschen gelesen und bearbeitet, die Daten haben eine sinnvolle verschachtelte Struktur, und das umgebende Ökosystem verwendet bereits YAML. Kubernetes-Manifeste, CI/CD-Pipelines und Ansible-Playbooks sind die Paradebeispiele dafür. Der Versuch, JSON in diesen Szenarien zu verwenden, macht das Leben nur schwieriger, ohne echten Nutzen. Umgekehrt ist YAML die falsche Wahl, wenn eine Datei nur von Maschinen berührt wird. Für die Kommunikation von Maschine zu Maschine verwende JSON oder ein effizienteres Binärformat wie MessagePack oder Protocol Buffers. Es ist auch eine schlechte Wahl, wenn dein Team ständig mit Einrückungsfehlern kämpft und die Disziplin fehlt, einen Linter zu verwenden. In dieser Situation wird die einfachere Syntax von TOML oder sogar eine vorverarbeitete JSON-Datei zu weniger Produktionsvorfällen führen. Wenn du YAML in Python-Projekten verwendest, gibt es ein kritisches Sicherheitsrisiko, das du verstehen musst. Die Standardfunktion `yaml.load()` von PyYAML kann beliebigen Code ausführen, der in einer YAML-Datei eingebettet ist. Wenn du YAML aus einer nicht vertrauenswürdigen Quelle parst, musst du immer `yaml.safe_load()` verwenden. Dies ist keine theoretische Schwachstelle; sie wurde in realen Supply-Chain-Angriffen ausgenutzt. Das Format begleitet uns seit über zwei Jahrzehnten und wird nicht verschwinden. Die YAML 1.2-Spezifikation, die die meisten der lästigen Typumwandlungsprobleme aus Version 1.1 behoben hat, wird nun von modernen Parsern wie PyYAML 6.0+, js-yaml 4.x und Gos yaml.v3 weitgehend unterstützt. Meine stärkste Empfehlung: Wenn du an einem Projekt arbeitest, das stark auf YAML angewiesen ist, ist die Migration zu einem 1.2-kompatiblen Parser das wirkungsvollste Upgrade, das du vornehmen kannst. Es wird eine ganze Klasse von subtilen Fehlern eliminieren, ohne dass du auch nur eine einzige Konfigurationszeile ändern musst.