Diagrammes de Gantt Mermaid : syntaxe, pièges et aller-retour vers un vrai éditeur
Les blocs gantt de Mermaid s’affichent nativement dans GitHub, GitLab, Notion et Obsidian, ce qui en fait le moyen le plus simple de placer un planning là où le travail se trouve déjà : dans le dépôt, relisible en revue de code, versionné avec le reste. Ils sont en revanche pénibles à modifier : déplacez une seule date et vous recalculez à la main toute la chaîne de after en aval. Cet article passe la syntaxe en revue champ par champ, donne un exemple complet à coller dans un README, détaille les pièges qui s’affichent parfaitement tout en étant faux, et décrit l’étape qui manque partout ailleurs, modifier visuellement, puis récupérer le texte.
La syntaxe en une passe
Un bloc s’ouvre par le mot-clé gantt, suivi de quelques lignes d’en-tête, puis de titres section sous lesquels viennent les lignes de tâches. L’indentation est une convention de lisibilité, pas une règle de grammaire : Mermaid lit aussi bien un fichier aligné qu’un fichier collé de travers.
Une ligne de tâche, c’est un nom, deux-points, puis des champs séparés par des virgules :
Nom de la tâche :marqueur, id, début, durée
- Marqueurs, au choix
done,active,crit,milestone, dans n’importe quel ordre, et vous pouvez les cumuler. Facultatifs. - id, un mot simple, sans espace ni ponctuation, nécessaire seulement si une autre tâche s’y réfère.
- début, une date, ou
after unId, ou rien du tout pour enchaîner sur la tâche précédente. - durée,
5d,2w, ou une seconde date absolue qui tient lieu de fin.
Les lignes d’en-tête à connaître : dateFormat (comment sont écrites les dates dans votre fichier), excludes weekends, title, et axisFormat (le libellé de l’axe, en codes de type strftime). Les champs sont reconnus à leur forme plutôt qu’à leur position stricte, ce qui explique que :done, audit, 2026-03-02, 5d et :audit, done, 2026-03-02, 5d donnent le même résultat, commode à l’écriture, déroutant à la relecture.
Un exemple complet à coller dans un README
Voici un bloc valide et réaliste, tiré d’un cas courant : la migration de l’API publique d’une v1 vers une v2 chez Sogecom, éditeur logiciel installé à Villeurbanne. Claire Vasseur, tech lead de l’équipe plateforme, tient ce planning dans le README du dépôt api-gateway pour qu’il soit relu en revue de code comme le reste. L’exemple utilise des sections, des dates absolues, des chaînes de after, tous les marqueurs, un jalon et l’exclusion des week-ends.
gantt
title Migration API v2, Sogecom
dateFormat YYYY-MM-DD
axisFormat %d %b
excludes weekends
section Cadrage
Audit des endpoints v1 :done, audit, 2026-03-02, 5d
Contrat OpenAPI :done, spec, after audit, 4d
Revue de code du contrat :active, revue, after spec, 2d
section Développement
Service d’authentification :crit, auth, after revue, 10d
Endpoints ressources :endp, after auth, 12d
Régénération du SDK client :sdk, after endp, 3d
section Bascule
Recette sur préproduction :recette, after sdk, 5d
Bêta publique :milestone, beta, 2026-05-04, 0d
Arrêt de la v1 :arret, after beta, 2w
Ligne par ligne :
dateFormat YYYY-MM-DDindique à Mermaid comment lire les dates que vous avez tapées. C’est le format d’entrée, pas celui d’affichage : le modifier ne change rien à l’axe.axisFormat %d %best le côté sortie : l’axe affiche « 02 mars » plutôt qu’une date ISO complète. Sur un planning de plus d’un trimestre,%Vdonne des numéros de semaine, bien plus lisibles pour une équipe qui raisonne en S10, S11, S12.excludes weekendsfait enjamber samedi et dimanche à toutes les barres, pour l’ensemble du diagramme. Il n’existe aucune dérogation tâche par tâche.Audit des endpoints v1 :done, audit, 2026-03-02, 5d, un marqueur, un id, une date de début absolue (le lundi 2 mars 2026) et cinq jours. La durée inclut le jour de début : la tâche se termine donc le vendredi 6 mars, pas le lundi 9.after auditsignifie « démarrer quandauditest fini », les week-ends étant exclus, cela tombe le lundi 9 mars, et non le samedi 7.:crit, auth, …colore la barre aux couleurs du chemin critique. Notez bien le verbe : colorer. Voir les limites plus bas.Endpoints ressources :endp, after auth, 12dn’a aucun marqueur : le premier champ est directement un id. Une tâche sans marqueur est simplement du travail à venir.Bêta publique :milestone, beta, 2026-05-04, 0dest un repère de durée nulle posé à une date fixe, ici le lundi 4 mai 2026. Un jalon reçoit un id comme n’importe quelle tâche, si bien que leafter betade la dernière ligne est parfaitement légal.2wvaut deux semaines. Mermaid accepte aussihetm, rarement utiles sur un planning de projet.
Les lignes vides entre les sections sont purement décoratives : Mermaid les ignore, notre importateur aussi. Gardez-les quand même, car un bloc de quarante tâches sans respiration est illisible dans un diff, c’est Thibaut Marchand, qui relit les demandes de fusion, qui a imposé la règle.
Référence des champs d’une ligne de tâche
Tous les champs et marqueurs, ce qu’ils font, et à quoi ils ressemblent en pratique.
| Champ ou marqueur | Exemple | Ce qu’il fait |
|---|---|---|
id | audit | Un mot simple qui nomme la tâche pour qu’un after puisse s’y référer. Ni espace ni ponctuation. Facultatif tant que rien ne dépend de la tâche. |
after | after audit | Démarre à la fin de la tâche nommée. Fin-Début uniquement, sans décalage. Accepte plusieurs id, after a b attend le plus tardif des deux. |
done | :done, audit, … | Affiche la barre comme terminée. Sans pourcentage : 100 % et « pratiquement fini » se ressemblent trait pour trait. |
active | :active, revue, … | Affiche la barre comme en cours. Là encore sans aucun chiffre associé. |
crit | :crit, auth, … | Colore la barre comme critique. C’est une affirmation que vous tapez, pas un résultat que Mermaid déduit : rien ne la confronte au graphe des antériorités. |
milestone | :milestone, beta, … | Dessine un losange au lieu d’une barre. À associer à 0d. |
| Unités de durée | 5d · 2w · 8h | Jours, semaines, heures (et m). Le jour de début est inclus : 5d à partir du lundi finit le vendredi. |
| Date de fin | 2026-03-02, 2026-03-06 | Une seconde date au lieu d’une durée, pour une fin imposée de l’extérieur. |
dateFormat | dateFormat YYYY-MM-DD | Comment les dates du fichier sont interprétées. Ligne d’en-tête, une seule fois par diagramme. |
axisFormat | axisFormat %d %b | Le libellé de l’axe, en codes strftime. Purement cosmétique. |
excludes | excludes weekends | Les jours non travaillés. Accepte aussi des dates précises (excludes 2026-05-08, pour le 8 mai) et des noms de jours. Portée : tout le diagramme. |
Une remarque sur excludes et le calendrier français : les jours fériés se déclarent un par un, et les ponts n’existent pas pour Mermaid. Si l’équipe ferme le vendredi de l’Ascension ou lève le pied en août, écrivez-le, sans quoi le diagramme promet du travail des jours où personne ne travaille.
Quatre choses qui vous piégeront
1. Les durées incluent le jour de début. 5d à partir du lundi 5 court jusqu’au vendredi 9, pas jusqu’au 10. Une erreur d’un jour ici décale toutes les tâches du fichier et s’affiche pourtant parfaitement, ce qui est le pire mode de défaillance possible : rien n’a l’air cassé, la revue de code passe, et le planning est faux d’un jour par tâche.
2. after combiné à excludes weekends, c’est là que sont les vrais bugs. Si un prédécesseur finit un vendredi, son successeur démarre le lundi, pas le samedi. Tout outil qui résout after en ajoutant un jour calendaire placera discrètement des tâches le week-end dans un fichier qui l’interdit explicitement, et toutes les dates en aval dérivent à partir de là. Le nôtre l’a fait, brièvement. Le correctif fait passer le calcul par le calendrier ouvré, pour que l’import concorde avec ce que Mermaid dessine ; et le test qui garde ce comportement vérifie une propriété plutôt que des dates précises : aucune date calculée, de début comme de fin, ne doit tomber un jour exclu. Les dates que vous avez tapées à la main, elles, restent exactement où vous les avez posées, week-end ou pas, déplacer en silence la date explicite d’un auteur, c’est la mauvaise façon de rendre service.
3. Il n’y a aucun échappement. Les deux-points ouvrent la liste des champs et la virgule les sépare : une tâche nommée Phase 2 : conception, revue devient une tâche « Phase 2 » suivie de champs incompréhensibles. Bannissez deux-points, virgules et points-virgules des noms de tâches. À l’export, nous remplaçons ces caractères par des espaces plutôt que d’écrire une ligne qui refusera de s’analyser chez le lecteur.
4. Une durée illisible devient zéro, en silence. Écrivez 3dd et vous obtenez une barre de longueur nulle plutôt qu’une erreur. Après une modification en masse, un chercher-remplacer sur trente lignes, typiquement, relisez le rendu à la recherche de tâches devenues invisibles.
Les limites d’un format de diagramme
Mermaid gantt est un langage de rendu, pas un moteur de planification, et la différence saute aux yeux dès que vous attendez du diagramme qu’il réponde à une question plutôt qu’illustrer une réponse déjà connue.
- Pas de ressources. Aucun champ pour dire qui fait le travail, aucun coût, aucune charge, aucune unité. Vous ne pouvez pas sur-affecter quelqu’un dans Mermaid, pour la bonne raison que Mermaid ignore que quelqu’un existe.
- Ni marge, ni chemin critique calculé.
critest une couleur que vous appliquez à la main. Rien ne parcourt le graphe des antériorités, ne calcule les dates au plus tôt et au plus tard, ne vous dit quelle chaîne pilote la date de fin. Un diagramme où toutes les barres portentcritest aussi valide qu’un diagramme où aucune ne le porte. - Pas de référence. Nulle part où consigner ce que le plan annonçait le mois dernier : donc aucun écart à montrer, aucune dérive à mesurer.
- Uniquement du Fin-Début.
afterest un lien FD sans décalage. Le Début-Début, le Fin-Fin, le Début-Fin et tout décalage, positif ou négatif, n’ont nulle part où aller. Les vrais plannings sont pleins de « la recette démarre trois jours après le début du développement » ; en Mermaid, cela devient une date en dur, et le lien a disparu. - Pas de pourcentage d’avancement. Une tâche à 40 % et une tâche à 90 % sont toutes deux simplement
active. - Sections à plat. Aucun groupe imbriqué : une décomposition à plus d’un niveau s’aplatit à l’import.
Rien de tout cela n’en fait un mauvais format. Cela en fait un format de publication : excellent pour montrer un planning, inutilisable pour en déduire un. C’est précisément pourquoi l’aller-retour compte.
Modifier visuellement, puis recoller le texte
Beaucoup d’outils affichent du Mermaid. Ce qui manquait, c’est l’autre sens : déplacer des barres et récupérer la syntaxe. Voici la manipulation complète, avec les libellés réels de l’application.
- Ouvrez l’éditeur et cliquez sur ✨ Coller vers Gantt. Collez-y votre bloc, qu’il vienne d’un fichier
.mmdou d’un.mdcontenant un bloc délimité : la détection se fait sur le contenu, pas sur l’extension. - Validez. Le message Tâches importées depuis Mermaid : {n} vous confirme le nombre de lignes reprises, comparez-le au nombre de tâches de votre fichier avant d’aller plus loin.
- Vérifiez le calendrier. Si le fichier déclarait
excludes weekends, ouvrez Calendrier et confirmez que les jours ouvrés correspondent ; ajoutez-y les jours fériés que Mermaid ne connaît pas. - Déplacez, reliez et redatez comme sur n’importe quel autre planning. Le champ Après (prédécesseurs) du panneau de tâche reprend ce que les
afteront produit ; c’est là que vous ajoutez les liens Début-Début ou les décalages que le format ne savait pas écrire. - Activez Chemin critique : la légende « hachuré = chemin critique » vous montre la chaîne réellement calculée. Utilisez Replanifier si vous voulez compacter les tâches sur leurs dates au plus tôt.
- Enfin ⬇ Exporter › 🧜 Mermaid gantt (texte). La fenêtre Mermaid gantt propose Copier dans le presse-papiers ou Télécharger le .mmd. Recollez dans le README, ouvrez la revue de code, commitez le diff.
L’aller-retour perd de l’information, mais de façon connue et sans surprise. À l’export, un avancement de 100 % devient done et toute valeur de 1 à 99 % devient active ; à l’import, active revient à 50 %, une estimation qu’un avertissement vous signale plutôt que de vous la laisser découvrir dans un rapport d’avancement. Les liens qui ne peuvent pas s’écrire en after, tout ce qui comporte un décalage, toute relation Début-Début, Fin-Fin ou Début-Fin, retombent sur des dates absolues, qui restent justes même si elles cessent d’être maintenables.
Une asymétrie assumée, parce que ce n’est pas un défaut : crit est écrit à l’export mais jamais lu à l’import. À la sortie, le marqueur est dérivé, l’éditeur a calculé le chemin critique à partir du graphe des antériorités, la mention est donc vraie au moment où elle est écrite. À l’entrée, ce n’est plus qu’un mot tapé par quelqu’un dans un fichier peut-être vieux de plusieurs semaines, et lui faire confiance reviendrait à colorer en rouge une chaîne qui n’est pas critique. Il est donc écrit puis ignoré : marquer une tâche crit dans votre fichier et l’importer ne la rend pas critique, et un simple aller-retour recalculera la criticité à partir des liens. Le chemin critique que vous voyez après un import a été recalculé, jamais recopié, le même principe que dans le calcul du chemin critique.
Effet de bord appréciable pour qui rédige ses plannings avec un LLM : demandez de la syntaxe Mermaid gantt, collez la réponse dans ✨ Coller vers Gantt, et vous obtenez un planning modifiable dont le chemin critique est calculé, sans clé d’API, sans serveur, et sans que le fichier quitte votre machine.
Questions fréquentes
Comment écrire un diagramme de Gantt en Mermaid ?
Ouvrez le bloc par gantt, ajoutez dateFormat YYYY-MM-DD, puis des titres section avec des lignes de tâches de la forme « Nom :marqueur, id, début, durée », par exemple « Audit des endpoints :done, audit, 2026-03-02, 5d ».
Le 5d de Mermaid inclut-il le jour de début ?
Oui. Une tâche de 5d commençant le lundi 5 se termine le vendredi 9. Ce décompte inclusif est la première cause d’erreurs d’un jour, et il produit un diagramme qui s’affiche parfaitement alors que chaque date est décalée.
Comment fonctionnent les antériorités en Mermaid ?
Avec « after unId » comme champ de début. C’est toujours un lien Fin-Début sans décalage : le Début-Début, le Fin-Fin et les décalages ne peuvent pas être exprimés. Vous pouvez nommer plusieurs prédécesseurs, comme dans « after a b », et la tâche attend le plus tardif.
Le after saute-t-il les week-ends ?
Oui, dès lors que le diagramme déclare « excludes weekends ». Le successeur d’une tâche finissant un vendredi démarre le lundi, et sa durée se compte en jours ouvrés. Les outils qui résolvent after en ajoutant un jour calendaire posent des tâches le samedi dans un fichier qui l’interdit.
Mermaid peut-il calculer le chemin critique ?
Non. Le marqueur crit est une couleur que vous appliquez à la main ; rien dans Mermaid ne parcourt le graphe des antériorités ni ne calcule les marges. C’est pourquoi gantts.app écrit crit à l’export mais l’ignore à l’import : la criticité est recalculée à partir des liens plutôt que reprise d’un fichier peut-être périmé.
Peut-on convertir un diagramme Mermaid en planning modifiable ?
Oui. Collez le contenu du fichier .mmd ou du fichier Markdown via ✨ Coller vers Gantt, modifiez-le visuellement, puis utilisez ⬇ Exporter › 🧜 Mermaid gantt (texte) pour récupérer la syntaxe mise à jour.
Modèles qui utilisent ceci
À lire aussi
Cet article est également disponible en anglais.