StartRatgeber › Mermaid-Gantt-Diagramme: Syntax, Fallstricke und der Weg zurück in einen Editor

Mermaid-Gantt-Diagramme: Syntax, Fallstricke und der Weg zurück in einen Editor

Mermaid-Gantt-Blöcke werden in GitHub, GitLab, Notion und Obsidian direkt gerendert, das macht sie zum einfachsten Weg, einen Terminplan dorthin zu bringen, wo die Arbeit ohnehin stattfindet: ins Repository, prüfbar im Pull Request. Sie zu bearbeiten ist dagegen mühsam: Ein Datum verschieben heißt, jede after-Kette dahinter von Hand neu abzuleiten. Hier stehen die Syntax Feld für Feld, ein vollständiges Beispiel zum Einfügen, die Fallstricke, die tadellos rendern und trotzdem falsch sind, und der fehlende Schritt: visuell bearbeiten und den Text zurückbekommen.

Von Uttam RegmiAktualisiert 19. Juli 20269 Min. Lesezeit

Inhalt
  1. Die Syntax in einem Durchgang
  2. Ein Beispiel, das Sie in eine README einfügen können
  3. Referenz der Vorgangszeile
  4. Vier Dinge, über die Sie stolpern werden
  5. Die Grenzen eines Diagrammformats
  6. Visuell bearbeiten, dann den Text zurückkopieren
Derselbe Terminplan als Text und als Balken:
gantt section Phase Vorgang :a, 5d Vorgang :after a, 8dTextDiagramm

Die Syntax in einem Durchgang

Ein Gantt-Block beginnt mit dem Schlüsselwort gantt und einigen Kopfzeilen, danach folgen section-Überschriften mit Vorgangszeilen darunter. Die Einrückung ist Konvention und nicht Grammatik, Mermaid liest den Block auch ohne sie.

Eine Vorgangszeile besteht aus einem Namen, einem Doppelpunkt und dann kommagetrennten Feldern:

Name des Vorgangs :tag, id, start, dauer

Wissenswerte Kopfzeilen: dateFormat (wie die Daten in Ihrer Datei geschrieben sind), excludes weekends, title und axisFormat (wie die Achse beschriftet wird, in strftime-Codes). Die Felder werden nach ihrer Form erkannt und nicht streng nach ihrer Position, deshalb funktionieren :done, spec, 2026-03-02, 5d und :spec, done, 2026-03-02, 5d gleichermaßen.

Vorgang A:ID a1:2026-03-02:5dVorgangIDStartDauer
Jedes Feld einer Mermaid-Vorgangszeile, und welche davon optional sind.

Ein Beispiel, das Sie in eine README einfügen können

Ein vollständiger, gültiger Block für eine reale Aufgabe: die Ablösung der internen Zeiterfassungs-API eines mittelständischen Unternehmens, Version 1 auf Version 2. Er nutzt Abschnitte, absolute Daten, after-Ketten, alle Tags, einen Meilenstein sowie ausgeschlossene Wochenenden und Feiertage. Fügen Sie ihn in einen Codeblock mit der Sprache mermaid in einer beliebigen Markdown-Datei auf GitHub ein, und er wird gerendert.

gantt
    title Abloesung der Zeiterfassungs-API (v1 auf v2)
    dateFormat YYYY-MM-DD
    axisFormat %d.%m.
    excludes weekends 2026-04-03 2026-04-06 2026-05-01

    section Analyse
    Bestand v1 erheben        :done, best, 2026-03-02, 5d
    OpenAPI-Spezifikation     :done, spec, after best, 4d
    Spezifikation abstimmen   :active, abst, after spec, 2d

    section Datenschutz und Mitbestimmung
    Datenschutz-Folgenabschaetzung  :crit, dsfa, after abst, 8d
    Betriebsvereinbarung verhandeln :crit, bv, after dsfa, 15d
    Betriebsvereinbarung unterzeichnet :milestone, bvm, 2026-04-24, 0d

    section Umsetzung
    Authentifizierungsdienst  :auth, after bvm, 10d
    Fachendpunkte             :fach, after auth, 12d
    Client-SDK neu erzeugen   :sdk, after fach, 3d

    section Umstellung
    Testbetrieb               :test, after sdk, 5d
    Abschaltung v1            :ab, after test, 2w

Zeile für Zeile gelesen:

  • dateFormat YYYY-MM-DD sagt Mermaid, wie es die von Ihnen getippten Daten lesen soll. Das ist das Eingabeformat, nicht das Ausgabeformat, es zu ändern ändert die Achse nicht.
  • axisFormat %d.%m. ist die Ausgabeseite: Die Achse liest sich als „02.03.“ statt als ISO-Datum, also so, wie ein deutscher Leser Termine erwartet. Für alles, was länger als ein Quartal läuft, ist %V mit Kalenderwochen die bessere Wahl.
  • excludes weekends 2026-04-03 2026-04-06 2026-05-01 lässt jeden Balken über Samstag und Sonntag springen und zusätzlich über Karfreitag, Ostermontag und den 1. Mai. Das gilt für das gesamte Diagramm; es gibt keine Ausnahme je Vorgang. Wer bundeslandspezifische Feiertage braucht, Fronleichnam etwa, , hängt sie einfach an dieselbe Zeile an.
  • Bestand v1 erheben :done, best, 2026-03-02, 5d, Tag, id, ein absoluter Beginn (ein Montag), fünf Tage. Dauern schließen den Starttag ein, dieser Vorgang endet also am Freitag, dem 6. März.
  • after best heißt „beginne, wenn best fertig ist“, bei ausgeschlossenen Wochenenden also am Montag, dem 9. März, und nicht am Samstag, dem 7.
  • :crit, dsfa, ... färbt den Balken in der Farbe des kritischen Pfads. Beachten Sie: färbt, mehr dazu weiter unten.
  • Fachendpunkte :fach, after auth, 12d trägt überhaupt kein Tag; das erste Feld ist nur eine id. Ohne Tag gilt der Vorgang als anstehende Arbeit.
  • Betriebsvereinbarung unterzeichnet :milestone, bvm, 2026-04-24, 0d ist eine Marke ohne Länge auf einem festen Datum. Meilensteine bekommen wie alles andere eine id, deshalb ist after bvm in der nächsten Zeile zulässig. Dass die Umsetzung erst nach der Unterschrift beginnt, ist hier kein Zieren: Ein System, das Arbeitszeit erfasst, unterliegt der Mitbestimmung, und ohne Betriebsvereinbarung darf es nicht in Betrieb gehen.
  • 2w sind zwei Wochen. Mermaid akzeptiert auch h und m, was hier selten hilft.

Die Leerzeilen zwischen den Abschnitten sind Dekoration, Mermaid ignoriert sie, und unser Import tut es ebenso. Lassen Sie sie trotzdem stehen; ein Block mit vierzig Vorgängen ist ohne sie in einem Diff nicht lesbar.

Referenz der Vorgangszeile

Jedes Feld, was es bewirkt und wie es in der Praxis aussieht.

Feld oder ZusatzBeispielWirkung
idbestEin einzelnes Wort, das den Vorgang benennt, damit after sich darauf beziehen kann. Keine Leerzeichen, keine Satzzeichen. Optional, solange nichts von dem Vorgang abhängt.
afterafter bestBeginnt, wenn der genannte Vorgang endet. Nur Ende-Anfang, ohne Zeitabstand. Mehrere ids sind erlaubt, after a b wartet auf den späteren der beiden.
done:done, best, …Zeichnet den Balken als abgeschlossen. Ohne Prozentwert, 100 Prozent und „im Grunde fertig“ sehen identisch aus.
active:active, abst, …Zeichnet den Balken als laufend. Ebenfalls ohne jede Zahl daran.
crit:crit, dsfa, …Färbt den Balken als kritisch. Eine Behauptung, die Sie tippen, und nichts, was Mermaid ableitet, nichts prüft sie gegen das Abhängigkeitsnetz.
milestone:milestone, bvm, …Zeichnet eine Raute statt eines Balkens. Sinnvoll nur zusammen mit 0d.
Dauereinheiten5d · 2w · 8hTage, Wochen, Stunden (auch m). Einschließlich des Starttags: 5d ab Montag endet am Freitag.
Enddatum2026-03-02, 2026-03-06Ein zweites Datum statt einer Dauer, für ein von außen festgelegtes Ende.
dateFormatdateFormat YYYY-MM-DDWie die Daten in der Datei gelesen werden. Kopfzeile, einmal je Diagramm.
axisFormataxisFormat %d.%m.Wie die Achse beschriftet wird, in strftime-Codes. Rein kosmetisch.
excludesexcludes weekendsArbeitsfreie Tage. Nimmt auch einzelne Daten (excludes 2026-04-06) und Wochentagsnamen. Gilt für das ganze Diagramm.

Vier Dinge, über die Sie stolpern werden

1. Dauern schließen den Starttag ein. 5d ab Montag, dem 5., läuft bis Freitag, den 9., nicht bis zum 10. Ein Fehler um eins verschiebt hier jeden Vorgang der Datei und wird trotzdem tadellos gerendert, das ist die schlimmste denkbare Fehlerart, weil nichts kaputt aussieht.

2. after zusammen mit excludes weekends ist die eigentliche Fehlerquelle. Endet ein Vorgänger an einem Freitag, beginnt sein Nachfolger am Montag, nicht am Samstag. Jedes Werkzeug, das after durch Addition eines einzelnen Kalendertages auflöst, legt Vorgänge klammheimlich auf Wochenenden in einer Datei, die genau das verbietet, und ab dort läuft jedes weitere Datum weg. Unseres tat das kurzzeitig. Die Korrektur führt die Rechnung über den Arbeitskalender, damit der Import mit dem übereinstimmt, was Mermaid zeichnet; der absichernde Test prüft die Eigenschaft statt bestimmter Daten: Kein abgeleitetes Anfangs- oder Enddatum darf auf einen ausgeschlossenen Tag fallen. Daten, die Sie selbst getippt haben, bleiben dagegen stehen, wo Sie sie hingeschrieben haben, Wochenende hin oder her, das ausdrückliche Datum einer Autorin stillschweigend zu verschieben ist die falsche Art von Hilfsbereitschaft.

3. Es gibt keine Maskierung. Ein Doppelpunkt beginnt die Feldliste und ein Komma trennt die Felder, aus Phase 2: Entwurf, Prüfung wird also ein Vorgang namens „Phase 2“ mit unsinnigen Feldern. Halten Sie Doppelpunkte, Kommas und Semikolons aus Vorgangsnamen heraus; beim Export ersetzen wir sie durch Leerzeichen, statt eine Zeile auszugeben, die sich nicht lesen lässt.

4. Eine unlesbare Dauer wird stillschweigend null. Schreiben Sie 3dd, erhalten Sie einen Balken der Länge null statt einer Fehlermeldung. Suchen Sie nach jeder größeren Änderung gezielt nach unsichtbaren Vorgängen.

Ende → AnfangABB wartet auf AAnfang → AnfangABB wartet auf AEnde → EndeABB wartet auf AAnfang → EndeABB wartet auf A
„after“ ist eine Ende-Anfang-Verknüpfung ohne Zeitabstand, die einzige Verknüpfungsart, die das Format kennt.

Die Grenzen eines Diagrammformats

Mermaid gantt ist eine Darstellungssprache und keine Terminplanungsmaschine. Der Unterschied fällt in dem Moment auf, in dem das Diagramm eine Frage beantworten statt eine Antwort bebildern soll.

Nichts davon macht Mermaid zu einem schlechten Format. Es macht es zu einem Veröffentlichungsformat, gut darin, einen Terminplan zu zeigen, ungeeignet, einen herzuleiten. Genau deshalb zählt der Rückweg.

Visuell bearbeiten, dann den Text zurückkopieren

Mermaid rendern können viele Werkzeuge. Gefehlt hat die Gegenrichtung, Balken ziehen und die Syntax wieder herausbekommen.

  1. Fügen Sie Ihr Diagramm über ✨ In Gantt einfügen ein oder öffnen Sie die Datei über 📂 Öffnen, eine .mmd-Datei oder eine .md-Datei mit eingebettetem Block, beides funktioniert. Ein Gantt-Block wird an seinem Inhalt erkannt, nicht an der Dateiendung.
  2. Ziehen, verknüpfen und umdatieren Sie wie in jedem anderen Diagramm. excludes weekends schaltet den Arbeitskalender ein, sodass die erzeugten Termine zu der Datei passen, aus der sie stammen; unter Kalender ergänzen Sie die Feiertage Ihres Bundeslandes.
  3. Setzen Sie den Haken bei Kritischer Pfad. Die schraffierten Balken sind das berechnete Ergebnis, und nicht das, was in der Datei behauptet wurde.
  4. Über ⬇ Export🧜 Mermaid-Gantt (Text) erhalten Sie den aktualisierten Text, entweder über In die Zwischenablage kopieren oder als .mmd herunterladen. Zurück in die README einfügen, Diff einchecken, fertig.

Der Hin- und Rückweg verliert etwas, aber auf bekannte, langweilige Weise. Der Fortschritt wird beim Export als 100 Prozent auf done und alles zwischen 1 und 99 Prozent auf active abgebildet; beim Import kommt active als 50 Prozent zurück, eine Schätzung, auf die Sie hingewiesen werden, statt sie später in einem Statusbericht zu entdecken. Verknüpfungen, die sich nicht als after schreiben lassen, alles mit Zeitabstand und jede AA-, EE- oder AE-Beziehung, , fallen auf feste Termine zurück. Die bleiben korrekt, hören aber auf, pflegbar zu sein.

Eine Asymmetrie ist Absicht und kein Fehler: crit wird exportiert, aber niemals importiert. Auf dem Weg hinaus ist der Wert abgeleitet, der Editor hat den kritischen Pfad aus dem Abhängigkeitsnetz berechnet, das Tag ist im Moment des Schreibens also wahr. Auf dem Weg hinein ist es ein Wort, das jemand in eine womöglich wochenalte Datei getippt hat; ihm zu vertrauen hieße, eine unkritische Kette rot einzufärben. Also wird es geschrieben und danach ignoriert: Der kritische Pfad, den Sie nach einem Import sehen, ist neu berechnet und nicht behauptet.

Für alle, die Terminpläne mit einem Sprachmodell entwerfen, gibt es einen angenehmen Nebeneffekt: Lassen Sie sich Mermaid-Gantt-Syntax ausgeben, fügen Sie die Antwort ein, und Sie haben ein echtes, bearbeitbares Diagramm mit berechnetem kritischem Pfad, ohne API-Schlüssel und ohne Server.

Mermaid ist ein Veröffentlichungsformat, kein Planungswerkzeug. Der Terminplan darf im Repository leben, aber alles, was gerechnet werden muss, kritischer Pfad, Puffer, Abweichung gegen einen Basisplan, , entsteht außerhalb der Datei und wird dann hineingeschrieben. Wer die Reihenfolge umdreht, pflegt am Ende Daten von Hand, die eine Maschine ableiten könnte.

Häufige Fragen

Wie schreibt man ein Gantt-Diagramm in Mermaid?

Beginnen Sie den Block mit gantt, ergänzen Sie dateFormat YYYY-MM-DD und darunter section-Überschriften mit Vorgangszeilen der Form „Name :tag, id, start, dauer“, zum Beispiel „Recherche :done, rec, 2026-01-05, 5d“.

Schließt 5d in Mermaid den Starttag ein?

Ja. Ein Vorgang mit 5d ab Montag, dem 5., endet am Freitag, dem 9. Diese einschließende Zählweise ist die häufigste Ursache für Fehler um einen Tag, und sie erzeugt ein Diagramm, das einwandfrei rendert, während jedes Datum um einen Tag danebenliegt.

Wie funktionieren Abhängigkeiten in Mermaid gantt?

Über „after eineId“ im Startfeld. Es ist immer eine Ende-Anfang-Verknüpfung ohne Zeitabstand; Anfang-Anfang, Ende-Ende und Abstände lassen sich nicht ausdrücken. Mehrere Vorgänger sind möglich, etwa „after a b“, der Vorgang wartet dann auf den späteren der beiden.

Überspringt after die Wochenenden?

Ja, sofern das Diagramm „excludes weekends“ enthält. Der Nachfolger eines Vorgangs, der freitags endet, beginnt dann am Montag, und die Dauer zählt in Arbeitstagen. Werkzeuge, die after durch Addition eines Kalendertages auflösen, legen Vorgänge auf Samstage in einer Datei, die das ausdrücklich verbietet.

Kann Mermaid den kritischen Pfad berechnen?

Nein. Das Tag crit ist eine Farbe, die Sie von Hand vergeben; nichts in Mermaid läuft das Abhängigkeitsnetz ab oder rechnet Puffer aus. Genau deshalb exportiert gantts.app crit, ignoriert es beim Import aber: Die Kritikalität wird aus den Abhängigkeiten neu berechnet, statt einer möglicherweise veralteten Datei geglaubt zu werden.

Kann ich ein Mermaid-Gantt-Diagramm bearbeitbar machen?

Ja. Öffnen Sie die .mmd- oder die Markdown-Datei in gantts.app, bearbeiten Sie sie visuell und holen Sie sich die aktualisierte Syntax über ⬇ Export ▸ 🧜 Mermaid-Gantt (Text) wieder heraus.

Passende Vorlagen

Geschrieben von Uttam Regmi. Gründer von Synth88 Labs, entwickelt datenschutzorientierte Web- und Mobil-Apps aus Dubai. Vollständiges Profil · LinkedIn · Medium · GitHub

Dieser Artikel ist auch auf Englisch verfügbar.

Erstellen Sie Ihr Gantt-Diagramm, kostenlos

Im Browser, ohne Anmeldung. Ihre Daten bleiben auf Ihrem Gerät.

Planer öffnen