Zuletzt aktualisiert am 04.12.2025 6 Minuten Lesezeit

YAML

YAML (YAML Ain't Markup Language) ist ein menschenlesbares Daten-Serialisierungsformat, das sich besonders für Konfigurationsdateien etabliert hat. Im Gegensatz zu XML und JSON setzt YAML auf eine minimalistische Syntax mit Einrückungen statt Klammern oder Tags. Das macht YAML-Dateien übersichtlich und leicht verständlich – sowohl für Menschen als auch für Maschinen.

Geschichte und Entwicklung von YAML

YAML wurde 2001 von Clark Evans vorgeschlagen, der gemeinsam mit Ingy döt Net und Oren Ben-Kiki an der Spezifikation arbeitete. Der ursprüngliche Name stand für "Yet Another Markup Language", wurde aber später in "YAML Ain't Markup Language" geändert – ein rekursives Akronym, das betont, dass YAML primär der Datenserialisierung dient und keine Auszeichnungssprache ist.

Wichtige Versionen

Die Entwicklung von YAML verlief über mehrere Versionen, die jeweils wichtige Verbesserungen brachten:

  • YAML 1.0 (Januar 2004): Erste offizielle Spezifikation nach drei Jahren Entwicklungsarbeit
  • YAML 1.1 (Januar 2005): Einführung von Tags zur expliziten Typisierung
  • YAML 1.2 (Oktober 2009): YAML wird zum strikten Superset von JSON – jedes valide JSON-Dokument ist auch valides YAML
  • YAML 1.2.2 (Oktober 2021): Aktuelle Version mit verbesserten Definitionen

Die Entscheidung, YAML zu einem JSON-Superset zu machen, war strategisch wichtig: Entwickler können JSON-Daten direkt in YAML-Dateien einbetten, ohne sie konvertieren zu müssen.

Syntax und Struktur

Die YAML-Syntax basiert auf Einrückungen mit Leerzeichen (keine Tabs!) und verzichtet weitgehend auf Klammern und Anführungszeichen. Das macht YAML-Dateien kompakt und gut lesbar. Die Einrückungstiefe definiert die Hierarchie der Daten – ähnlich wie in Python.

Schlüssel-Wert-Paare

Die grundlegendste Struktur in YAML sind Schlüssel-Wert-Paare, getrennt durch einen Doppelpunkt und ein Leerzeichen:

name: Max Mustermann
alter: 25
beruf: Fachinformatiker
aktiv: true

Listen und Arrays

Listen werden in YAML durch Bindestriche eingeleitet. Jeder Listeneintrag beginnt mit einem Bindestrich und einem Leerzeichen:

programmiersprachen:
  - Python
  - JavaScript
  - Java
  - PHP

Verschachtelte Strukturen

Durch Einrückung lassen sich beliebig tiefe Hierarchien abbilden. Das folgende Beispiel zeigt eine typische Konfiguration mit mehreren Ebenen:

datenbank:
  host: localhost
  port: 5432
  name: produktionsdb
  zugangsdaten:
    benutzer: admin
    passwort: ${DB_PASSWORD}

Mehrzeilige Texte

YAML bietet zwei Möglichkeiten für mehrzeilige Strings: Das Pipe-Zeichen (|) erhält Zeilenumbrüche, das Größer-als-Zeichen (>) fasst Text zu einer Zeile zusammen:

# Zeilenumbrüche werden erhalten
beschreibung: |
  Dies ist die erste Zeile.
  Dies ist die zweite Zeile.
  Und hier die dritte.

# Text wird zu einer Zeile zusammengefasst
kurzbeschreibung: >
  Diese Zeilen werden
  zu einer einzigen Zeile
  zusammengefügt.

Datentypen in YAML

YAML erkennt Datentypen automatisch anhand des Werts. Du kannst Strings, Zahlen, Booleans, Null-Werte und Datumsangaben verwenden, ohne sie explizit deklarieren zu müssen:

Datentyp Beispiel Beschreibung
String name: Hallo Welt Text, Anführungszeichen optional
Integer anzahl: 42 Ganzzahlen
Float preis: 19.99 Gleitkommazahlen
Boolean aktiv: true true/false, yes/no, on/off
Null wert: null Leerer Wert, auch ~ möglich
Datum datum: 2024-01-15 ISO 8601 Format

Bei Bedarf kannst du den Datentyp mit Tags explizit festlegen, etwa !!str 123 um die Zahl 123 als String zu behandeln.

YAML vs. JSON vs. XML

YAML, JSON und XML sind alle Formate zur Datenserialisierung, unterscheiden sich aber in Syntax und typischen Einsatzgebieten. Die folgende Tabelle zeigt die wichtigsten Unterschiede:

Aspekt YAML JSON XML
Lesbarkeit Sehr gut Gut Mäßig
Kommentare Ja (#) Nein Ja ()
Syntax Einrückung Klammern {} [] Tags <>
Datentypen Automatisch erkannt Begrenzt Schema-definiert
Dateigröße Kompakt Kompakt Verbose
Haupteinsatz Konfiguration API-Kommunikation Dokumentenaustausch

YAML eignet sich besonders dort, wo Menschen Dateien regelmäßig lesen und bearbeiten müssen. JSON ist Standard für APIs und Webkommunikation. XML findet man noch häufig in Enterprise-Anwendungen und bei komplexen Dokumentstrukturen mit Schema-Validierung.

Einsatzgebiete von YAML

YAML hat sich als Standardformat für Konfigurationsdateien in der modernen Softwareentwicklung etabliert. Die wichtigsten Anwendungsbereiche sind:

Docker Compose

Docker Compose nutzt YAML-Dateien zur Definition von Multi-Container-Anwendungen. In einer docker-compose.yml beschreibst du Services, Netzwerke und Volumes:

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - database

  database:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: geheim
      POSTGRES_DB: webapp
    volumes:
      - db-data:/var/lib/postgresql/data

volumes:
  db-data:

Kubernetes

Kubernetes verwendet YAML-Manifeste zur Beschreibung von Cluster-Ressourcen. Deployments, Services und ConfigMaps werden alle in YAML definiert:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: webserver
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25
        ports:
        - containerPort: 80

CI/CD-Pipelines

Continuous Integration und Continuous Deployment Systeme wie GitHub Actions, GitLab CI und Azure DevOps nutzen YAML zur Definition von Build- und Deployment-Pipelines:

# .github/workflows/ci.yml (GitHub Actions)
name: CI Pipeline

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
      - run: npm install
      - run: npm test

Ansible

Ansible verwendet YAML für Playbooks zur Automatisierung von IT-Infrastruktur. Die deklarative Syntax beschreibt den gewünschten Zustand von Systemen:

# playbook.yml
- name: Webserver konfigurieren
  hosts: webservers
  become: true
  tasks:
    - name: Nginx installieren
      apt:
        name: nginx
        state: present

    - name: Nginx starten
      service:
        name: nginx
        state: started
        enabled: true

Best Practices für YAML

Um lesbare und wartbare YAML-Dateien zu erstellen, solltest du einige bewährte Praktiken beachten:

  • Einheitliche Einrückung: Verwende immer 2 Leerzeichen pro Ebene (keine Tabs!)
  • Kommentare nutzen: Erkläre komplexe Konfigurationen mit #-Kommentaren
  • Strings quotieren bei Sonderzeichen: Nutze Anführungszeichen bei Strings mit Doppelpunkten oder anderen Sonderzeichen
  • Anker und Aliase: Verwende & und * für wiederverwendbare Konfigurationsblöcke
  • Validierung: Prüfe YAML-Dateien vor dem Deployment mit Linting-Tools

Anker und Aliase

Mit Ankern (&) und Aliasen (*) kannst du Konfigurationsblöcke wiederverwenden und Redundanz vermeiden:

# Definition eines Ankers
standard-logging: &logging
  level: info
  format: json
  output: /var/log/app.log

services:
  api:
    logging: *logging  # Referenziert den Anker
  worker:
    logging: *logging  # Gleiche Konfiguration

Häufige Fehler vermeiden

YAML ist syntaktisch streng – kleine Fehler können zu schwer nachvollziehbaren Problemen führen. Die häufigsten Stolperfallen sind:

Fehler Problem Lösung
Tabs statt Leerzeichen YAML erlaubt keine Tabs Editor auf Spaces konfigurieren
Inkonsistente Einrückung Parsing-Fehler Immer gleiche Anzahl Leerzeichen
Fehlende Anführungszeichen ja wird als Boolean true interpretiert "ja" für Strings verwenden
Doppelpunkt in Werten Wird als neues Key-Value-Paar interpretiert String in Anführungszeichen setzen

Ein häufiger Fehler bei deutschsprachigen Werten: Das Wort "ja" wird von YAML automatisch als Boolean true interpretiert. Um es als Text zu verwenden, musst du es in Anführungszeichen setzen: "ja".

YAML in der IT-Praxis

YAML-Kenntnisse gehören heute zum Standardrepertoire in der IT. Wer als Fachinformatiker für Anwendungsentwicklung oder Fachinformatiker für Systemintegration arbeitet, wird regelmäßig mit YAML-Konfigurationen in Kontakt kommen.

Im DevOps-Bereich ist YAML allgegenwärtig: Docker Compose, Kubernetes, CI/CD-Pipelines und Infrastructure-as-Code-Tools wie Ansible setzen alle auf YAML. Auch viele Frameworks und Anwendungen nutzen YAML für ihre Konfiguration – von Spring Boot bis Hugo.

Quellen und weiterführende Links