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 :

deploiement.mmd — un fichier entier, six lignes
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.

Cassé
```mermaid
flowchart TD
    A[Début] --> B[Fin]
```
Corrigé
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.

Cassé
flowchart TD
    A[Appeler encaisser(commande)] --> B[Fin]
Corrigé
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.

Cassé
flowchart TD
    serveur auth --> base[Base de données]
Corrigé
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;.

Cassé
flowchart TD
    A[Il a dit "bonjour"] --> B[Fin]
Corrigé
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.

Cassé
flowchart TD
    A[Début] --> end
Corrigé
flowchart 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.

Cassé
stateDiagram-v2
    [*] --> En attente
    En attente --> Clos
Corrigé
stateDiagram-v2
    state "En attente" as attente
    [*] --> attente
    attente --> Clos

Ce 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.

Cassé
erDiagram
    CLIENT ||--o{ COMMANDE : appartient à
Corrigé
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.

Cassé
sequencediagram
    Client->>API: Bonjour
Corrigé
sequenceDiagram
    Client->>API: Bonjour

Ce 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.

Cassé
flowchart TD
    A -->|oui (toujours)| B
Corrigé
flowchart TD
    A -->|"oui (toujours)"| B

Ce 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.

Cassé
sequenceDiagram
    Client->>API: Requête
    alt Tout va bien
        API-->>Client: OK
Corrigé
sequenceDiagram
    Client->>API: Requête
    alt Tout va bien
        API-->>Client: OK
    end

Ce 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.

Cassé
flowchart XY
    A --> B
Corrigé
flowchart TD
    A --> B

Ce 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.

Corrigé
info

Un 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 ?
Déposez-le sur le cadre en haut de cette page. Il se dessine dans votre navigateur, sans envoi et sans compte. Vous pouvez aussi ouvrir l'éditeur et faire glisser le fichier sur le panneau d'aperçu.
Quel programme ouvre un fichier .mmd ?
N'importe quel éditeur de texte vous en montrera la source, puisque le fichier est du texte brut. Pour voir le diagramme, il vous faut quelque chose qui dessine du Mermaid : cette page, l'éditeur de ce site, ou l'outil en ligne de commande mermaid-cli. Aucune application de bureau ne possède l'extension .mmd.
Un fichier .mmd est-il identique à un fichier .mermaid ?
Oui. Les deux extensions contiennent exactement le même type de contenu et sont interchangeables. .mmd est la plus répandue et c'est celle qu'utilise par défaut l'outil officiel en ligne de commande.
Pourquoi mon fichier .mmd ne se dessine-t-il pas sur GitHub ?
GitHub ne dessine du Mermaid qu'à l'intérieur de blocs de code ```mermaid, dans les fichiers Markdown, les tickets, les Discussions, les pull requests et les wikis. Un fichier .mmd isolé s'affiche comme du texte source. Pour le rendre visible sur GitHub, placez le même diagramme dans un bloc délimité d'un fichier .md.
Puis-je ouvrir un .mmd sans rien installer ?
Oui, c'est à cela que sert cette page. Le rendu s'exécute en JavaScript dans votre navigateur : il n'y a rien à installer et le fichier ne quitte jamais votre machine.
Les accents s'affichent comme des symboles étranges
Le fichier n'est pas en UTF-8. Cette page lit les fichiers en UTF-8 et gère la marque BOM sans problème, mais un fichier enregistré en ISO-8859-1 ou Windows-1252 arrivera avec les caractères accentués corrompus. Réenregistrez-le en UTF-8 depuis votre éditeur.
Ça marche ici mais pas dans notre wiki. Pourquoi ?
Presque toujours une différence de version. Cette visionneuse tourne en Mermaid 11.12.2 et beaucoup de wikis utilisent quelque chose de plus ancien — GitLab.com documente la version 10. Écrivez le mot info dans un diagramme sur l'autre système pour lui faire afficher la version qu'il exécute.

Types de diagrammes que vous pouvez ouvrir ici

Écrit par Dominik Malsch · Dernière mise à jour:

Ouvrir l'éditeur →