Comment ouvrir un fichier .mmd
Un fichier .mmd est un fichier texte contenant un diagramme Mermaid. Ce n'est ni une image ni un format binaire : vous pouvez l'ouvrir dans n'importe quel éditeur de texte et le lire. Pour le voir sous forme de diagramme, déposez-le sur le cadre ci-dessous. Il se dessine dans votre navigateur et rien n'est envoyé à un serveur.
Déposez ici un fichier .mmd
Accepte aussi .mermaid, .md et .txt. Le fichier est lu dans votre navigateur ; il n'est jamais envoyé.
Qu'est-ce qu'un fichier .mmd ?
Mermaid est une syntaxe textuelle pour les diagrammes. Vous décrivez le diagramme avec des mots et le moteur le dessine, exactement comme Markdown décrit une mise en forme et le moteur produit la page. Un fichier .mmd contient ce texte et rien d'autre : ni style, ni données d'image, ni métadonnées.
C'est toute la raison d'être du format. Parce qu'il est en texte, un diagramme peut vivre dans un dépôt Git à côté du code qu'il décrit, et une modification apparaît comme un diff lisible plutôt que comme un binaire remplacé. Voici un fichier .mmd complet et valide :
flowchart LR
Commit[Push sur main] --> Build[Lancer les tests]
Build -->|succès| Deploy[Déployer en production]
Build -->|échec| Alerte[Prévenir l'auteur]
Deploy --> Fumee[Test de fumée]
Fumee --> Fin[Livraison terminée]Ce qui ouvre un fichier .mmd
La version courte : presque rien n'ouvre un .mmd par un double-clic, parce que l'extension n'est associée à aucune application. Ce qu'il vous faut, c'est quelque chose qui sache dessiner du Mermaid. Voici ce que j'ai vérifié, et là où cela ne marche pas.
Cette pageFonctionne
Dessine le fichier directement
Déposez le fichier sur le cadre ci-dessus et vous obtenez le diagramme. Il n'y a pas d'étape d'envoi : le fichier est lu dans votre navigateur avec l'API File puis dessiné localement, ce qui fonctionne donc aussi pour des diagrammes que vous n'avez pas le droit de transmettre à un tiers.
Si vous voulez modifier le diagramme et pas seulement le regarder, utilisez le lien sous l'aperçu pour l'ouvrir dans l'éditeur.
N'importe quel éditeur de texteFonctionne
Montre la source, pas le diagramme
Bloc-notes, TextEdit, vim, peu importe. Un fichier .mmd est du texte UTF-8 : vous en verrez la source immédiatement. Vous ne verrez pas de diagramme, et rien n'est cassé — il n'y a simplement aucune image dans le fichier à afficher.
C'est le moyen le plus rapide de vérifier si un fichier qu'on vous a envoyé est bien du Mermaid : ouvrez-le et regardez si la première ligne non vide est un mot-clé de diagramme comme flowchart, sequenceDiagram, classDiagram, stateDiagram-v2, erDiagram ou gantt.
GitHubNe fonctionne pas
Dessine les blocs ```mermaid dans du Markdown — pas les fichiers .mmd isolés
GitHub dessine le Mermaid à l'intérieur de blocs de code délimités. Sa documentation précise exactement où : tickets, Discussions, pull requests, wikis et fichiers Markdown. Un fichier .mmd isolé n'y figure pas, et l'ouvrir dans l'explorateur de fichiers du dépôt affiche le texte source.
Donc si vous voulez un diagramme visible sur GitHub, il doit se trouver dans un bloc ```mermaid d'un fichier .md, et non dans un .mmd à lui. Garder un .mmd pour la source et reprendre le même contenu dans le README est une duplication courante et raisonnable.
GitLabNe fonctionne pas
Dessine les blocs ```mermaid — pas les .mmd isolés, et sur un Mermaid plus ancien
Même schéma que GitHub : le Mermaid se dessine dans des blocs délimités au sein du Markdown, des tickets, des merge requests et des wikis, mais rien ne documente le rendu d'un fichier .mmd isolé.
Il y a un second point à connaître, parce qu'il crée de vraies confusions. GitLab.com indique prendre en charge la version 10 de Mermaid. Ce site tourne en 11.12.2. La syntaxe ajoutée après la version 10 se dessine ici et échoue là-bas, ce qui explique d'ordinaire le « ça marche dans la visionneuse mais pas dans notre GitLab ». Sur un GitLab auto-hébergé il existe un troisième piège : si l'en-tête Cross-Origin-Resource-Policy vaut same-site ou same-origin, les diagrammes Mermaid échouent en silence — pas d'erreur, pas de diagramme.
.mmd, .mermaid et .md
.mmd et .mermaid sont la même chose. Les deux ne contiennent que de la source Mermaid, et tous les outils que je connais qui acceptent l'un acceptent l'autre. .mmd est la plus courte et la plus répandue ; l'outil officiel en ligne de commande l'utilise par défaut. Choisissez-en une et tenez-vous-y dans un projet : le choix n'a aucune conséquence technique.
.md est d'une autre nature. Un fichier Markdown est un document qui peut contenir un diagramme Mermaid, enveloppé dans un bloc commençant par trois accents graves suivis du mot mermaid. Le diagramme est un passage à l'intérieur d'un texte plus large.
Cette différence est de loin la raison la plus fréquente pour laquelle un fichier ne se dessine pas, et elle joue dans les deux sens. Collez le contenu d'un .md dans une visionneuse Mermaid et cela échoue, parce que la ligne de délimitation n'est pas de la syntaxe Mermaid. Enregistrez un diagramme Mermaid nu dans un .md sans délimiteurs et GitHub l'affichera comme un paragraphe de texte. La règle est simple : un .mmd doit commencer par un mot-clé de diagramme, et un .md doit contenir le diagramme dans un bloc délimité.
Cette visionneuse accepte .mmd, .mermaid, .md et .txt, mais elle traite tout ce qu'elle lit comme du Mermaid brut. Si vous déposez un Markdown comportant du texte autour du diagramme, retirez d'abord tout ce qui n'est pas le diagramme.
Ça ne se dessine pas — ce qui cloche vraiment
Les messages d'erreur de Mermaid sont précis mais peu aimables. L'astuce utile est d'en lire la toute fin : après « got », Mermaid nomme le jeton sur lequel il a buté, et ce jeton identifie le problème bien mieux que le numéro de ligne. J'ai reproduit chacun des cas ci-dessous avec mermaid 11.12.2 : la version cassée échoue vraiment et la version corrigée se dessine vraiment.
Ce que vous voyez
No diagram type detected matching given configuration for text: ```mermaid
Pourquoi
Vous avez copié le diagramme depuis un fichier Markdown ou une conversation et emporté les délimiteurs avec. Les trois accents graves sont du Markdown, pas du Mermaid : l'analyseur n'atteint jamais le diagramme.
Correction
Supprimez la ligne d'ouverture ```mermaid et la ligne de fermeture ```. Le fichier doit commencer par le mot-clé du diagramme.
```mermaid
flowchart TD
A[Début] --> B[Fin]
```flowchart TD
A[Début] --> B[Fin]Ce que vous voyez
Parse error, le message se termine par : got 'PS'
L'erreur se termine par: got 'PS'
Pourquoi
Une parenthèse ouvrante dans l'étiquette d'un nœud. Dans Mermaid les parenthèses sont de la syntaxe de forme — A(texte) est un nœud arrondi — donc une parenthèse nue entre crochets est lue comme le début d'une forme.
Correction
Mettez l'étiquette entre guillemets droits. Tout ce qui est entre guillemets est traité comme du texte, crochets compris.
flowchart TD
A[Appeler encaisser(commande)] --> B[Fin]flowchart TD
A["Appeler encaisser(commande)"] --> B[Fin]Ce que vous voyez
Parse error, le message se termine par : got 'NODE_STRING'
L'erreur se termine par: got 'NODE_STRING'
Pourquoi
Une espace dans l'identifiant d'un nœud. L'identifiant est le jeton qui précède la flèche, et l'espace le termine. Le cas proprement français est l'espace insécable, ordinaire ou fine, que la typographie réclame avant `: ; ! ?` et que les traitements de texte insèrent d'eux-mêmes. Vérifié : elle échoue exactement comme une espace ordinaire, avec le même jeton — le message ne laisse donc rien deviner du caractère invisible.
Correction
Un identifiant en un seul mot, sans espace d'aucune sorte, et le texte lisible dans l'étiquette. Les accents, la cédille et l'apostrophe passent sans problème dans un identifiant.
flowchart TD
serveur auth --> base[Base de données]flowchart TD
auth[Serveur d'authentification] --> base[Base de données]Ce que vous voyez
Parse error, le message se termine par : got 'STR'
L'erreur se termine par: got 'STR'
Pourquoi
Un guillemet droit dans l'étiquette d'un nœud. L'analyseur y voit le début d'une chaîne entre guillemets, puis tombe sur le crochet de l'étiquette là où il attendait le guillemet fermant.
Correction
Encadrez toute l'étiquette de guillemets droits et utilisez des guillemets français à l'intérieur, ou écrivez le guillemet sous forme d'entité HTML #quot;.
flowchart TD
A[Il a dit "bonjour"] --> B[Fin]flowchart TD
A["Il a dit « bonjour »"] --> B[Fin]Ce que vous voyez
Parse error, le message se termine par : got 'end'
L'erreur se termine par: got 'end'
Pourquoi
Vous avez utilisé end comme identifiant de nœud. En minuscules, end ferme un sous-graphe : l'analyseur voit une fin de bloc là où il attendait un nœud. Cela arrive souvent, parce qu'en suivant des exemples anglais on finit par appeler end le dernier nœud même si le reste est en français.
Correction
Mettez une majuscule, ou donnez un autre identifiant au nœud et mettez le mot dans l'étiquette. `Fin` ne pose aucun problème.
flowchart TD
A[Début] --> endflowchart TD
A[Début] --> Fin[Terminé]Ce que vous voyez
Ça se dessine, mais un état s'est scindé en deux dans un diagramme d'états
Pourquoi
Une espace dans l'identifiant d'un état — et c'est ici que l'insécable devient réellement dangereuse. Contrairement à l'organigramme, le diagramme d'états ne proteste pas : il crée une boîte par mot. Mesuré — `[*] --> En attente` donne deux états, `En` et `attente`, dont seul le premier est au bout de la flèche. Comme la typographie française insère ces espaces sans qu'on les demande et qu'elles sont invisibles à l'écran, le diagramme est faux sans le moindre signe.
Correction
Déclarez l'état avec `state "Libellé" as id` et ne le désignez plus que par son identifiant.
stateDiagram-v2
[*] --> En attente
En attente --> ClosstateDiagram-v2
state "En attente" as attente
[*] --> attente
attente --> ClosCe que vous voyez
Ça se dessine, mais un diagramme ER contient des entités que vous n'avez pas écrites
Pourquoi
Un libellé d'association contenant une espace et dépourvu de guillemets. C'est le piège qui gêne le plus en français, parce que nos verbes relationnels appellent une préposition : « appartient à », « figure dans ». Mermaid ne renvoie aucune erreur : il coupe le libellé à la première espace et transforme chaque mot restant en entité vide.
Correction
Mettez entre guillemets tout libellé d'association contenant une espace. En français, cela revient à presque tous.
erDiagram
CLIENT ||--o{ COMMANDE : appartient àerDiagram
CLIENT ||--o{ COMMANDE : "appartient à"Ce que vous voyez
No diagram type detected matching given configuration for text: sequencediagram
Pourquoi
Le mot-clé du diagramme est mal orthographié, ou la casse est fausse. Les mots-clés de Mermaid sont sensibles à la casse : sequenceDiagram fonctionne, sequencediagram non. Il en va de même pour stateDiagram-v2 et erDiagram.
Correction
Corrigez la casse. Notez que graph reste accepté comme ancien alias de flowchart : cette vieille syntaxe n'est donc pas votre problème.
sequencediagram
Client->>API: BonjoursequenceDiagram
Client->>API: BonjourCe que vous voyez
Parse error sur une étiquette d'arête entre barres
Pourquoi
Des parenthèses dans l'étiquette d'une arête. L'étiquette |...| subit la même contrainte qu'une étiquette de nœud : les parenthèses y sont de la syntaxe, pas du texte.
Correction
Mettez l'étiquette d'arête entre guillemets.
flowchart TD
A -->|oui (toujours)| Bflowchart TD
A -->|"oui (toujours)"| BCe que vous voyez
Parse error signalée à la dernière ligne du diagramme
Pourquoi
Un bloc ouvert et jamais fermé : alt, opt, loop, par et subgraph réclament tous leur end. Mermaid signale l'échec au moment où il arrive au bout de l'entrée, si bien que le numéro de ligne désigne la fin du fichier et non le bloc resté ouvert.
Correction
Comptez les blocs ouverts et les end écrits. Quand l'erreur porte sur la dernière ligne, c'est presque toujours cela.
sequenceDiagram
Client->>API: Requête
alt Tout va bien
API-->>Client: OKsequenceDiagram
Client->>API: Requête
alt Tout va bien
API-->>Client: OK
endCe que vous voyez
Lexical error on line 1. Unrecognized text.
Pourquoi
Une direction invalide après le mot-clé du diagramme. Les organigrammes acceptent TB, TD, BT, LR et RL, et rien d'autre ; une faute de frappe ici échoue à l'analyse lexicale, avant la lecture du moindre nœud.
Correction
Utilisez l'une des cinq directions valides. TD et LR couvrent presque tous les cas.
flowchart XY
A --> Bflowchart TD
A --> BCe que vous voyez
Ça se dessine ici mais pas dans GitLab, Confluence ou un outil ancien
Pourquoi
Une différence de version. Cette visionneuse tourne en Mermaid 11.12.2 ; GitLab.com documente la version 10, et les wikis auto-hébergés ont souvent des années de retard. La syntaxe introduite après la version de l'autre outil s'analyse ici et échoue là-bas.
Correction
Demandez à l'autre moteur quelle version il utilise. Écrire le seul mot info dans un diagramme fait afficher à Mermaid son propre numéro de version, ce qui va plus vite que de lire les notes de publication.
infoUn dernier point qui ne produit aucune erreur : sur un GitLab auto-hébergé, un en-tête Cross-Origin-Resource-Policy réglé sur same-site ou same-origin fait échouer les diagrammes Mermaid en silence. Aucun message, aucun diagramme, rien dans la page. Si un diagramme se dessine partout sauf sur une instance auto-hébergée, c'est là qu'il faut regarder.
Et si les accents apparaissent comme des symboles bizarres, le problème est l'encodage. Cette page et l'éditeur lisent le fichier en UTF-8 et retirent la marque BOM si elle est présente : un fichier enregistré depuis le Bloc-notes de Windows en « UTF-8 avec BOM » s'ouvre donc sans souci. En revanche, un fichier enregistré en ISO-8859-1 ou Windows-1252, ce que produisent encore certains outils anciens, arrivera avec les accents et les cédilles corrompus. Réenregistrez-le en UTF-8 depuis votre éditeur.
Convertir en PNG, SVG ou PDF
Ouvrez le fichier dans l'éditeur et servez-vous des boutons d'export. Le SVG conserve le diagramme sous forme de texte vectoriel : il reste net à toute taille et les étiquettes restent sélectionnables et cherchables, ce qui en fait le bon choix pour la documentation et pour tout ce qui pourrait être réexporté plus tard. Le PNG est une image matricielle, exportée ici à deux ou trois fois la taille d'affichage pour tenir sur un écran à haute densité ; utilisez-le là où le SVG n'est pas accepté, c'est-à-dire en pratique la plupart des messageries et certains wikis.
Il n'y a pas de bouton PDF, et je préfère le dire que faire semblant. La voie pratique consiste à exporter en SVG puis soit à le placer dans le document que vous êtes déjà en train de rédiger, soit à imprimer cette page en PDF depuis le navigateur. Un SVG vectoriel placé dans un PDF reste vectoriel.
Pour tout ce qui doit être reproductible — une étape de build, un lot de fichiers, un hook de pré-commit — le moteur officiel en ligne de commande, @mermaid-js/mermaid-cli, prend le même fichier .mmd et écrit l'image directement, sans navigateur.
Questions fréquentes
Comment ouvrir un fichier .mmd en ligne ?
Quel programme ouvre un fichier .mmd ?
Un fichier .mmd est-il identique à un fichier .mermaid ?
Pourquoi mon fichier .mmd ne se dessine-t-il pas sur GitHub ?
Puis-je ouvrir un .mmd sans rien installer ?
Les accents s'affichent comme des symboles étranges
Ça marche ici mais pas dans notre wiki. Pourquoi ?
Types de diagrammes que vous pouvez ouvrir ici
Écrit par Dominik Malsch · Dernière mise à jour: