TL;DR
|
Eine YAML-Datei ist eine reine Textdatei, die Einstellungen und andere strukturierte Informationen in einem Format speichert, das sowohl Menschen als auch Programme lesen können. Sie nutzt Einrückungen und einfache Satzzeichen wie Doppelpunkte und Bindestriche, um zu zeigen, wie Informationen zueinander in Beziehung stehen.
Du wirst meist mit YAML in Berührung kommen, wenn ein Tool dich auffordert, es zu konfigurieren: eine Deployment-Pipeline, eine Container-Einrichtung oder eine Hosting-Plattform. Dieser Leitfaden erklärt, wie YAML aufgebaut ist, führt dich durch konkrete Beispiele und behandelt die wenigen Fehler, die hinter den meisten fehlerhaften YAML-Dateien stecken.
Das Wichtigste auf einen Blick: YAML ist eines der gängigsten Formate für Konfigurationsdateien in Entwicklungstools, da man es ohne spezielle Software lesen und bearbeiten kann.
Der Name ist ein rekursiver Witz: YAML steht für „YAML Ain’t Markup Language“. Der springende Punkt ist, dass YAML Daten wie Einstellungen, Listen und Optionen beschreibt, anstatt ein Dokument so zu formatieren, wie es HTML tut.
YAML-Dateien findest du in vielen Tools, die Entwickler täglich nutzen:
| Tool | Was die YAML-Datei bewirkt | Typischer Dateiname |
|---|---|---|
| GitHub Actions | Definiert automatisierte Workflows, z. B. das Ausführen von Tests bei jeder Änderung | .github/workflows/test.yml |
| Docker Compose | Beschreibt mehrere Container, die gemeinsam auf deinem Computer laufen | compose.yaml |
| Kubernetes | Beschreibt die Container, Netzwerke und den Speicher, die eine App benötigt | Jeder Name, der auf .yaml oder .yml endet |
| Upsun Cloud | Beschreibt die Apps, Dienste und Routen eines Projekts an einem Ort | .upsun/config.yaml |
Konfigurationsdateien werden viel häufiger von Menschen gelesen und geändert, als dass sie von Grund auf neu geschrieben werden – und genau hier zahlt sich ein lesbares Format aus. YAML-Dateien befinden sich oft neben anderen Konfigurationsdateien in einem Projekt, wie zum Beispiel einer .env-Datei, die Geheimnisse enthält. Unser Leitfaden „Was ist .env?“ behandelt genau das.
Das Wichtigste auf einen Blick: Fast jede YAML-Datei besteht aus Schlüssel-Wert-Paaren, Einrückungen zur Verschachtelung und Bindestrichen für Listen.
Hier ist eine kurze YAML-Datei für eine fiktive Web-App. Jeder Teil davon wird im Folgenden erklärt.
# Settings for a small web app
app_name: recipe-finder
port: 8080
debug: false
database:
host: localhost
name: recipes
features:
- search
- favorites
- shopping-list
welcome_message: |
Welcome to Recipe Finder.
Search by ingredient to get started.| Ausschnitt | Beispiel aus der Datei | Was es bedeutet |
|---|---|---|
| Kommentar | # Einstellungen für eine kleine Web-App | Ein Hinweis für die Leser. Alles nach dem # wird ignoriert. |
| Schlüssel und Wert | app_name: recipe-finder | Ein Einstellungsname, ein Doppelpunkt, ein Leerzeichen, dann der Wert. |
| Zahl | port: 8080 | YAML interpretiert Werte, die wie Zahlen aussehen, als Zahlen. |
| Wahr oder Falsch | debug: false | Werte wie „true“ und „false“ werden als Ein- und Ausschalter interpretiert. |
| Verschachtelte Gruppe | database: mit zwei eingerückten Zeilen darunter | Eingezogene Zeilen gehören zum darüber stehenden Schlüssel, daher sind „host“ und „name“ beide Teil von „database“. |
| Liste | – Suche | Jede Zeile, die mit einem Bindestrich und einem Leerzeichen beginnt, ist ein Eintrag in einer Liste. |
| Mehrzeiliger Text | welcome_message: | | Das Pipe-Zeichen bewahrt die Zeilenumbrüche im nachfolgenden Text. |
Text benötigt normalerweise keine Anführungszeichen, aber du kannst jeden Wert in einfache oder doppelte Anführungszeichen setzen. Mit Anführungszeichen teilst du YAML mit, etwas als Text zu behandeln, wenn es wie eine Zahl oder ein Schalter aussieht (siehe den Abschnitt „Fehler“ weiter unten).
Die Einrückung bestimmt die Struktur. Eine Zeile, die unter einem Schlüssel eingerückt ist, gehört zu diesem Schlüssel, und Zeilen mit derselben Einrückung sind gleichrangig. Die genaue Anzahl der Leerzeichen bleibt dir überlassen, solange jede Ebene einheitlich ist. Zwei Leerzeichen pro Ebene sind eine gängige Wahl.
Das Wichtigste auf einen Blick: YAML und JSON können dieselben Informationen enthalten. YAML ist für Menschen leichter zu lesen und zu bearbeiten, während JSON strenger ist und häufiger für den Datenaustausch zwischen Programmen verwendet wird.
JSON ist ein weiteres Textformat für strukturierte Daten, das vor allem von Websites und APIs intensiv genutzt wird. Hier ist dieselbe App-Konfiguration wie oben, geschrieben als JSON:
{
"app_name": "recipe-finder",
"port": 8080,
"debug": false,
"database": {
"host": "localhost",
"name": "recipes"
},
"features": ["search", "favorites", "shopping-list"],
"welcome_message": "Welcome to Recipe Finder.\nSearch by ingredient to get started.\n"
}| YAML | JSON | |
|---|---|---|
| Struktur dargestellt durch | Einrückung | Geschweifte und eckige Klammern |
| Kommentare | Erlaubt, mit # | Nicht erlaubt |
| Anführungszeichen um Text herum | Normalerweise optional | Immer erforderlich |
| Mehrzeiliger Text | Integriert, mit | | Erfordert \n für jeden Zeilenumbruch |
| Größter Nachteil | Kann durch ein versehentliches Leerzeichen leicht unterbrochen werden | Schwer von Hand zu lesen und zu bearbeiten |
| Typische Verwendung | Konfigurationsdateien, die man bearbeitet | Daten, die zwischen Programmen ausgetauscht werden |
Beides hängt eng zusammen. YAML 1.2, die aktuelle Version der YAML-Spezifikation, wurde so konzipiert, dass JSON gültiges YAML ist. Deshalb akzeptieren manche Tools für dieselbe Datei beide Formate.
Das Wichtigste auf einen Blick: Die meisten YAML-Probleme sind Einrückungs- oder Leerzeichenfehler, und die schlimmsten davon lösen überhaupt keinen Fehler aus. Die Datei wird geladen, bedeutet aber etwas anderes als das, was du geschrieben hast.
Es gibt zwei Arten von YAML-Fehlern. Manche verhindern das Laden der Datei und zeigen eine Fehlermeldung an – das ist zwar ärgerlich, aber leicht zu erkennen. Andere werden ohne Probleme geladen und ändern still und leise deine Einstellungen, sodass die App mit Werten läuft, die du gar nicht festlegen wolltest. Wo es hilfreich ist, wird bei jedem der folgenden Fehler zuerst die fehlerhafte Version gezeigt, dann die Korrektur.
YAML erlaubt keine Tabulatorzeichen zur Einrückung. Ein einziger Tabulator, der oft vom Editor hinzugefügt wird, ohne dass du es merkst, führt dazu, dass die gesamte Datei nicht geladen werden kann.
Lösung: Stelle deinen Editor so ein, dass beim Drücken der Tabulatortaste Leerzeichen eingefügt werden. Die meisten Code-Editoren verfügen über diese Einstellung, und viele wenden sie automatisch auf YAML-Dateien an.
Wenn eine Zeile eine Ebene zu weit links steht, gehört sie nicht mehr zur darüberliegenden Gruppe. YAML interpretiert sie als eigenständige Einstellung, ohne dass ein Fehler auftritt.
# Broken: name is no longer part of database
database:
host: localhost
name: recipes
# Fixed
database:
host: localhost
name: recipesEine Zeile, die um ein Leerzeichen zu weit eingerückt ist, führt in der Regel zu einem Fehler, der oft mit „Mapping-Werte sind hier nicht erlaubt“ formuliert wird. Wenn du diese Meldung siehst, überprüfe die Einrückung der Zeile, auf die sie sich bezieht, sowie der Zeile darüber.
YAML benötigt ein Leerzeichen nach dem Doppelpunkt bei „Schlüssel: Wert“ und nach dem Bindestrich in einem Listenelement. Ohne dieses Leerzeichen interpretiert YAML den Text als normalen Text.
# Broken: read as one line of text, not a list
features:
-search
-favorites
# Fixed
features:
- search
- favoritesEin Doppelpunkt, gefolgt von einem Leerzeichen innerhalb eines Werts, verwirrt YAML, da es wie der Beginn einer neuen Einstellung aussieht.
# Broken: fails to load
message: Note: restart the app after changes
# Fixed
message: "Note: restart the app after changes"YAML versucht zu erraten, welche Art von Wert du meinst, und manchmal liegt es dabei falsch. Das sind die klassischen Überraschungen:
| Du hast geschrieben | Du meintest | Was YAML möglicherweise liest |
|---|---|---|
| version: 1.10 | Version eins Komma zehn | Die Zahl 1,1 |
| Postleitzahl: 01234 | Eine Postleitzahl mit einer führenden Null | Eine Zahl, bei der die führende Null wegfällt oder der Wert komplett geändert wird |
| Land: NO | Norwegen | Der Wert „false“ in Tools, die den älteren YAML-1.1-Regeln folgen |
| Antwort: „yes“ | Das Wort „yes“ | Der Wert „true“ in denselben älteren Tools |
Lösung: Setze Anführungszeichen um jeden Wert, der als Text erhalten bleiben soll, z. B. version: „1.10“ oder country: „NO“. Lass die Anführungszeichen bei Werten weg, die ein Tool als reelle Zahlen oder als „true“- und „false“-Schalter erwartet, wie z. B. eine Portnummer.
Wenn derselbe Schlüssel zweimal auf derselben Ebene vorkommt, behalten viele Tools den letzten Wert bei und ignorieren den ersten, ohne dich darüber zu informieren. Strengere Tools brechen stattdessen mit einer Fehlermeldung ab.
port: 8080
# ...many lines later
port: 9090Die App läuft auf Port 9090, und die erste Zeile wird stillschweigend ignoriert. Suche in einer langen Datei nach dem Schlüssel, bevor du ihn hinzufügst.
Das Wichtigste: Lass deine YAML-Datei von einem Tool prüfen. Eine Editor-Erweiterung erkennt Fehler schon beim Tippen, und ein Validator überprüft die gesamte Datei, bevor du dich darauf verlässt.
Es gibt drei gängige Methoden, eine YAML-Datei zu überprüfen, von der einfachsten bis zur gründlichsten:
Online-YAML-Validatoren funktionieren ebenfalls, aber sei vorsichtig damit, was du dort einfügst. Konfigurationsdateien enthalten manchmal Passwörter oder interne Adressen, und diese sollten nicht auf einer Website landen, die du nicht kontrollierst.
Wenn ein KI-Assistent die Datei erstellt hat, überprüfe sie auf dieselbe Weise. Von KI generiertes YAML hat oft eine gültige Syntax, sodass es fehlerfrei geladen wird. Die Fehler liegen stattdessen meist im Inhalt: ein Einstellungsname, den das Tool nicht erkennt, eine Option aus einer älteren Version des Tools oder ein Wert auf der falschen Ebene. Der tool-eigene Checker (Option 3 oben) ist am ehesten in der Lage, diese Fehler zu erkennen.
Das Wichtigste auf einen Blick: Upsun Cloud beschreibt ein gesamtes Projekt in einer einzigen YAML-Datei, .upsun/config.yaml, und sein Befehlszeilentool kann diese Datei vor dem Deployment überprüfen.
Auf der Upsun Cloud befinden sich die von dir ausgeführten Apps, die von ihnen genutzten Dienste (wie z. B. eine Datenbank) und die Webadressen, über die sie erreichbar sind, alle in einer einzigen YAML-Datei. Diese befindet sich in einem Ordner namens .upsun ganz oben in deinem Projekt. Mit dem Befehl „upsun project:init“ wird eine Startversion erstellt, die auf dem gefundenen Code basiert.
Hier ist ein kleines Beispiel: eine Node.js-App, die mit einer PostgreSQL-Datenbank verbunden ist.
applications:
myapp:
type: "nodejs:26"
relationships:
database:
web:
commands:
start: "node index.js"
services:
database:
type: "postgresql:17"
routes:
"https://{default}/":
type: upstream
upstream: "myapp:http"Hier ist die Funktion der einzelnen Teile:
Die oben genannten häufigen Fehler gelten auch hier. Eine falsch gesetzte Einrückung kann dazu führen, dass Beziehungen aus dem Bereich unter „myapp“ verschoben werden. Die Anführungszeichen in diesem Beispiel sind optional, aber es ist eine sichere Vorgehensweise, Werte, die Doppelpunkte oder geschweifte Klammern enthalten, in Anführungszeichen zu setzen.
Um die Datei vor dem Push zu überprüfen, führe „upsun app:config-validate“ in deinem Projektordner aus. Damit werden die Konfigurationsdateien deines Projekts validiert, sodass Fehler bereits auf deinem Rechner sichtbar werden, bevor eine Bereitstellung erfolgt. Wenn ein Programmier-Agent diese Datei für dich bearbeitet, weise ihn an, nach jeder Änderung denselben Befehl auszuführen. Unser Leitfaden „Was ist eine AGENTS.md-Datei?“ zeigt, wie du diese Anweisung einmal festlegst, damit jeder Agent sie befolgt. Du kannst deinen Editor auch mit dem veröffentlichten Schema von Upsun Cloud verbinden, sodass er dir während der Eingabe gültige Einstellungen vorschlägt und Fehler markiert. Im Upsun Developer Center wird erklärt, wie du das einrichtest.
Was die Datei alles enthalten kann, erfährst du unter „YAML auf Upsun cloud“ in der Upsun-Dokumentation.
Auf der Upsun Cloud beschreibt diese eine Datei dein gesamtes Projekt, und jede Umgebung wird darauf aufbauend erstellt. Du kannst 15 Tage lang kostenlos auf der Upsun Cloud bereitstellen, ganz ohne Kreditkarte, oder dir ansehen, wie Git-gesteuerte Automatisierung Konfigurationsänderungen in Bereitstellungen umsetzt.
YAML steht für „YAML Ain’t Markup Language“. Der Name verdeutlicht, dass YAML dazu dient, Daten wie Einstellungen und Listen zu beschreiben, und nicht dazu, Dokumente zu formatieren.
Gar nichts. Beide Dateiendungen bezeichnen dasselbe Format. Manche Tools erwarten die eine oder die andere Endung – verwende also die, die in der Dokumentation des Tools angegeben ist.
Nein. YAML erlaubt nur Leerzeichen zur Einrückung. Stelle deinen Editor so ein, dass beim Drücken der Tabulatortaste Leerzeichen eingefügt werden.
Jede Anzahl ist in Ordnung, solange die Einrückung auf jeder Ebene einheitlich ist. Zwei Leerzeichen pro Ebene sind eine gängige Wahl.
Dieser Fehler bedeutet normalerweise, dass eine Zeile anders eingerückt ist als die benachbarten Zeilen oder dass ein Wert einen Doppelpunkt gefolgt von einem Leerzeichen enthält. Überprüfe die Einrückung der Zeile, auf die der Fehler hinweist, und setze alle Werte, die einen Doppelpunkt enthalten, in Anführungszeichen.
Keines von beiden ist generell besser. YAML ist für Menschen leichter zu lesen und zu bearbeiten, was sich gut für Konfigurationsdateien eignet. JSON ist strenger und für Programme einfacher zu erzeugen, was sich gut für Daten eignet, die zwischen Systemen ausgetauscht werden.
Jeder Texteditor kann sie öffnen, da eine YAML-Datei aus reinem Text besteht. Ein Editor zum Programmieren mit YAML-Unterstützung erleichtert das Lesen und das Erkennen von Fehlern.