Come aprire un file .mmd

Un file .mmd è un normale file di testo che contiene un diagramma Mermaid. Non è un'immagine né un formato binario — puoi aprirlo con qualunque editor di testo e leggerlo. Per vederlo come diagramma, trascinalo sul riquadro qui sotto. Viene disegnato nel tuo browser e non finisce nulla su alcun server.

Trascina qui il tuo file .mmd

Accetta anche .mermaid, .md e .txt. Il file viene letto nel browser e non viene mai inviato.

Che cos'è un file .mmd

Mermaid è una sintassi testuale per i diagrammi. Descrivi il diagramma a parole e il motore lo disegna — allo stesso modo in cui Markdown descrive la formattazione e il motore produce la pagina. Un file .mmd contiene quel testo e nient'altro: nessuno stile, nessun dato d'immagine, nessun metadato.

È tutta qui la ragione d'essere del formato. Essendo testo, il diagramma può stare in un repository Git accanto al codice che descrive, e una modifica compare come un diff leggibile invece che come un file binario sostituito. Ecco un file .mmd completo e valido:

rilascio.mmd — il file intero, sei righe
flowchart LR
    Commit[Push su main] --> Build[Esegui i test]
    Build -->|riuscito| Deploy[Rilascia in produzione]
    Build -->|fallito| Avviso[Avvisa l'autore]
    Deploy --> Fumo[Test di fumo]
    Fumo --> Fine[Rilascio completato]

Con cosa si apre un file .mmd

In breve: quasi nulla apre un file .mmd con un doppio clic, perché l'estensione non è associata ad alcuna applicazione. Quello che serve davvero è qualcosa che sappia disegnare Mermaid. Qui sotto ciò che ho verificato e i punti in cui non funziona.

Questo sitoApre

Disegna il file subito

Trascina il file sul riquadro qui sopra e ottieni il diagramma. Non c'è un passaggio di caricamento: il file viene letto nel browser tramite la File API e disegnato in locale, il che funziona anche per i diagrammi che non ti è consentito far uscire.

Se vuoi modificare il diagramma e non solo guardarlo, usa il collegamento sotto l'anteprima per aprirlo nell'editor.

Qualunque editor di testoApre

Mostra il sorgente, non il diagramma

Blocco note, Notepad++, vim — uno qualsiasi. Un file .mmd è testo UTF-8, quindi il sorgente lo vedi subito. Il diagramma non lo vedi, e non c'è niente di rotto: semplicemente nel file non c'è alcuna immagine da mostrare.

È il modo più rapido di controllare se un file che ti hanno mandato è davvero Mermaid: aprilo e guarda se la prima riga non vuota è una parola chiave di diagramma come flowchart, sequenceDiagram, classDiagram, stateDiagram-v2, erDiagram o gantt.

GitHubNon apre

Disegna i blocchi ```mermaid nel Markdown, ma non i file .mmd

GitHub disegna Mermaid dentro i blocchi di codice delimitati. La documentazione elenca esattamente dove: issue, Discussions, pull request, wiki e file Markdown. Un file .mmd a sé stante non è in quell'elenco, e aprirlo nel navigatore dei file del repository mostra il testo sorgente.

Quindi se vuoi che il diagramma sia visibile su GitHub, deve stare in un blocco ```mermaid dentro un file .md, non in un .mmd suo. Tenere il .mmd come sorgente e ripetere lo stesso contenuto nel README è una duplicazione comune e ragionevole.

GitLabNon apre

Disegna i blocchi ```mermaid, ma non i file .mmd, e per giunta su un Mermaid più vecchio

Lo stesso schema di GitHub: Mermaid si disegna nei blocchi delimitati dentro Markdown, issue, merge request e wiki, ma da nessuna parte è scritto che si disegni un file .mmd a sé stante.

C'è poi una seconda cosa da sapere, perché genera confusione reale. GitLab.com dichiara di supportare la versione 10 di Mermaid. Questo sito gira sulla 11.12.2. La sintassi aggiunta dopo la 10 si disegna qui e cade là — ed è di solito questo a spiegare il «nel browser funziona, sul nostro GitLab no». Su un GitLab installato in proprio c'è una terza trappola: quando l'intestazione Cross-Origin-Resource-Policy è impostata su same-site o same-origin, i diagrammi Mermaid cadono in silenzio — nessun errore e nessun diagramma.

.mmd, .mermaid e .md

.mmd e .mermaid sono la stessa cosa. Entrambi contengono solo sorgente Mermaid e tutti gli strumenti che conosco che accettano l'uno accettano anche l'altro. .mmd è più corto e più diffuso; lo strumento ufficiale da riga di comando lo usa in modo predefinito. Scegline uno e restaci fedele dentro un progetto — la scelta non ha alcuna conseguenza tecnica.

.md è diverso di genere. Un file Markdown è un documento che può contenere un diagramma Mermaid, avvolto in un blocco che inizia con tre apici inversi e la parola mermaid. Il diagramma è un frammento dentro un testo più ampio.

Questa differenza è di gran lunga la causa più frequente per cui un file non si disegna, e agisce in entrambe le direzioni. Incolla il contenuto di un file .md in un visualizzatore Mermaid e cade, perché la riga di delimitazione non è sintassi Mermaid. Salva un diagramma Mermaid nudo in un file .md senza delimitatori e GitHub lo mostra come un paragrafo di testo. La regola è semplice: un file .mmd deve iniziare con una parola chiave di diagramma, e un file .md deve avere il diagramma dentro un blocco delimitato.

Questo visualizzatore accetta .mmd, .mermaid, .md e .txt, ma tratta come Mermaid grezzo tutto ciò che legge. Se stai trascinando un Markdown con del testo attorno al diagramma, togli prima tutto ciò che non è il diagramma.

Non si disegna — qual è davvero il problema

I messaggi d'errore di Mermaid sono precisi ma poco amichevoli. Un trucco che funziona è leggere solo la fine del messaggio: dopo `got` Mermaid nomina il token su cui si è fermato, e quel token indica il problema molto meglio del numero di riga. Ho riprodotto ogni caso qui sotto su mermaid 11.12.2: la versione sbagliata cade davvero, quella corretta si disegna davvero.

Cosa vedi

No diagram type detected matching given configuration for text: ```mermaid

Perché

Hai copiato il diagramma da un file Markdown o da una chat e ti sei portato dietro i delimitatori. I tre apici inversi sono Markdown, non Mermaid, quindi il parser non arriva mai al diagramma.

Soluzione

Togli la riga di apertura ```mermaid e quella di chiusura ```. Il file deve iniziare con una parola chiave di diagramma.

Sbagliato
```mermaid
flowchart TD
    A[Inizio] --> B[Fine]
```
Corretto
flowchart TD
    A[Inizio] --> B[Fine]

Cosa vedi

Parse error, il messaggio finisce con: got 'PS'

L'errore finisce con: got 'PS'

Perché

Una parentesi tonda aperta dentro l'etichetta di un nodo. In Mermaid le tonde sono sintassi di forma — A(testo) è un nodo arrotondato — quindi una tonda nuda dentro le quadre viene letta come l'inizio di una forma.

Soluzione

Metti l'etichetta fra virgolette. Tutto ciò che sta fra virgolette è trattato come testo, parentesi comprese.

Sbagliato
flowchart TD
    A[Chiama addebita(ordine)] --> B[Fine]
Corretto
flowchart TD
    A["Chiama addebita(ordine)"] --> B[Fine]

Cosa vedi

Parse error sulla riga in cui hai dato un nome al nodo

Perché

L'identificatore del nodo contiene uno spazio. In italiano è l'errore più facile da fare, perché i nomi naturali sono formati da più parole: «servizio di autenticazione», «base dati». L'identificatore è il token che precede la freccia, e lo spazio lo tronca lasciando una parola che non ha dove stare.

Soluzione

Dai al nodo un identificatore di una parola sola e metti il testo leggibile nell'etichetta. Verificato: accenti e apostrofo funzionano in un identificatore — `L'ordine` e `Città` si disegnano senza problemi. Rompe solo lo spazio.

Sbagliato
flowchart TD
    servizio di autenticazione --> base dati
Corretto
flowchart TD
    auth[Servizio di autenticazione] --> db[Base dati]

Cosa vedi

Parse error, il messaggio finisce con: got 'STR'

L'errore finisce con: got 'STR'

Perché

Una virgoletta doppia dritta dentro l'etichetta di un nodo. Il parser la prende per l'inizio di una stringa e poi incontra la quadra dell'etichetta dove si aspettava la virgoletta di chiusura.

Soluzione

Racchiudi l'intera etichetta fra virgolette dritte e usa dentro le caporali, oppure scrivi il carattere come entità HTML #quot;.

Sbagliato
flowchart TD
    A[Ha detto "va bene"] --> B[Fine]
Corretto
flowchart TD
    A["Ha detto «va bene»"] --> B[Fine]

Cosa vedi

Parse error, il messaggio finisce con: got 'end'

L'errore finisce con: got 'end'

Perché

Hai usato end come identificatore di nodo. In minuscolo end chiude un sottografo, quindi il parser vede la fine di un blocco dove si aspettava un nodo. Capita spesso: seguendo esempi in inglese, l'ultimo nodo finisce per chiamarsi end anche se il resto è in italiano.

Soluzione

Scrivilo con la maiuscola oppure dai al nodo un altro identificatore e sposta la parola nell'etichetta. `Fine` non crea problemi.

Sbagliato
flowchart TD
    A[Inizio] --> end
Corretto
flowchart TD
    A[Inizio] --> Fine[Completato]

Cosa vedi

Si disegna, ma in un diagramma di stato uno stato è diventato più caselle

Perché

Uno spazio nell'identificatore di uno stato. A differenza del diagramma di flusso, il diagramma di stato non protesta: crea una casella separata per ogni parola e la disegna senza batter ciglio. Misurato — `[*] --> In attesa di pagamento` produce quattro stati, `In`, `attesa`, `di` e `pagamento`, e solo il primo è in fondo alla freccia. In italiano quasi nessun nome di stato sta in una parola sola, quindi l'errore capita di continuo e non dà alcun segnale.

Soluzione

Dichiara lo stato con `state "Etichetta" as id` e riferisciti a esso solo con l'identificatore.

Sbagliato
stateDiagram-v2
    [*] --> In attesa di pagamento
    In attesa di pagamento --> Chiuso
Corretto
stateDiagram-v2
    state "In attesa di pagamento" as attesaPagamento
    [*] --> attesaPagamento
    attesaPagamento --> Chiuso

Cosa vedi

Si disegna, ma il diagramma ER ha entità che non hai scritto

Perché

L'etichetta della relazione contiene uno spazio e non ha le virgolette. È la trappola che in italiano dà più fastidio, perché le nostre espressioni relazionali reggono una preposizione: «appartiene a», «compare in». Mermaid non segnala errori: tronca l'etichetta al primo spazio e trasforma ogni parola rimasta in un'entità vuota.

Soluzione

Metti fra virgolette ogni etichetta di relazione che contenga uno spazio. In italiano praticamente tutte.

Sbagliato
erDiagram
    CLIENTE ||--o{ ORDINE : appartiene a
Corretto
erDiagram
    CLIENTE ||--o{ ORDINE : "appartiene a"

Cosa vedi

No diagram type detected matching given configuration for text: sequencediagram

Perché

La parola chiave del diagramma è scritta male o con le maiuscole sbagliate. Le parole chiave di Mermaid distinguono maiuscole e minuscole: sequenceDiagram funziona, sequencediagram no. Lo stesso vale per stateDiagram-v2 ed erDiagram.

Soluzione

Correggi le maiuscole. Nota che graph è ancora accettato come vecchio alias di flowchart, quindi quella sintassi datata non è un tuo problema.

Sbagliato
sequencediagram
    Client->>API: Ciao
Corretto
sequenceDiagram
    Client->>API: Ciao

Cosa vedi

Parse error nell'etichetta dell'arco fra le barre

Perché

Parentesi dentro l'etichetta di un arco. L'etichetta |...| ha lo stesso vincolo di quella di un nodo: anche lì le parentesi sono sintassi, non testo.

Soluzione

Metti fra virgolette l'etichetta dell'arco.

Sbagliato
flowchart TD
    A -->|sì (sempre)| B
Corretto
flowchart TD
    A -->|"sì (sempre)"| B

Cosa vedi

Parse error che indica l'ultima riga del diagramma

Perché

Un blocco aperto e mai chiuso: alt, opt, loop, par e subgraph vogliono il loro end. Mermaid segnala l'errore dove gli finisce l'input, quindi il numero di riga indica la fine del file e non il blocco aperto.

Soluzione

Conta i blocchi aperti e gli end che hai scritto. Se l'errore indica l'ultima riga, è quasi sempre questo.

Sbagliato
sequenceDiagram
    Client->>API: Richiesta
    alt Tutto a posto
        API-->>Client: OK
Corretto
sequenceDiagram
    Client->>API: Richiesta
    alt Tutto a posto
        API-->>Client: OK
    end

Cosa vedi

Lexical error on line 1. Unrecognized text.

Perché

Direzione non valida dopo la parola chiave del diagramma. I diagrammi di flusso accettano TB, TD, BT, LR e RL, e nient'altro; un refuso cade nell'analisi lessicale prima che venga letto anche un solo nodo.

Soluzione

Usa una delle cinque direzioni valide. TD e LR coprono quasi tutti i casi.

Sbagliato
flowchart XY
    A --> B
Corretto
flowchart TD
    A --> B

Cosa vedi

Qui si disegna, su GitLab, Confluence o su un vecchio strumento no

Perché

Differenza di versione. Questo visualizzatore gira su Mermaid 11.12.2; GitLab.com documenta la versione 10, e le wiki installate in proprio possono essere indietro di anni. La sintassi introdotta dopo la versione dell'altro strumento si analizza qui e cade là.

Soluzione

Chiedi all'altro motore la sua versione. Scrivere la sola parola info in un diagramma fa disegnare a Mermaid il proprio numero di versione, il che è più rapido che leggere il registro delle modifiche.

Corretto
info

Vale la pena spendere due parole sulla codifica dei caratteri, perché nei file italiani sa ancora sorprendere. Questo sito e l'editor leggono il file come UTF-8 e rimuovono il marcatore BOM se c'è, quindi un file salvato dal Blocco note di Windows come «UTF-8 con BOM» si apre senza problemi. Ma un file salvato in ISO-8859-1 o Windows-1252, cosa che alcuni strumenti più vecchi producono ancora, arriva con le vocali accentate rovinate. Se al posto di à, è, ì, ò e ù vedi simboli strani, risalva il file in UTF-8 dal tuo editor.

E poi c'è una cosa che non dà alcun errore: su un GitLab installato in proprio, l'intestazione Cross-Origin-Resource-Policy impostata su same-site o same-origin fa cadere i diagrammi Mermaid in silenzio. Nessun messaggio, nessun diagramma, niente sulla pagina. Se un diagramma si disegna ovunque tranne che su una singola installazione, è esattamente lì che bisogna guardare.

Conversione in PNG, SVG o PDF

Apri il file nell'editor e usa i pulsanti di esportazione. L'SVG conserva il diagramma come testo vettoriale, quindi resta nitido a qualunque dimensione e le etichette si possono selezionare e cercare — è la scelta giusta per la documentazione e per tutto ciò che potrebbe essere riesportato in seguito. Il PNG è una mappa di bit, esportata qui a due o tre volte la dimensione di visualizzazione perché regga su schermi ad alta densità; usalo dove l'SVG non viene accettato, il che in pratica significa la maggior parte delle chat e qualche wiki.

Un pulsante PDF non c'è, e preferisco scriverlo piuttosto che fingere. La strada praticabile è esportare l'SVG e o inserirlo nel documento che stai già scrivendo, oppure stampare questa pagina in PDF dal browser. Un SVG vettoriale inserito in un PDF resta vettoriale.

Per tutto ciò che è ripetibile — un passo di build, un lotto di file, un hook pre-commit — c'è il motore ufficiale da riga di comando @mermaid-js/mermaid-cli: prende lo stesso file .mmd e scrive l'immagine direttamente, senza browser.

Domande frequenti

Come si apre un file .mmd online?
Trascinalo sul riquadro in cima a questa pagina. Viene disegnato nel tuo browser, senza caricamento e senza account. In alternativa puoi aprire l'editor e trascinare il file sul pannello di anteprima.
Quale programma apre un file .mmd?
Il sorgente te lo mostra qualunque editor di testo, perché il file è testo semplice. Per vedere il diagramma serve qualcosa che disegni Mermaid: questo sito, l'editor qui presente o lo strumento da riga di comando mermaid-cli. Non esiste un'applicazione desktop a cui appartenga l'estensione .mmd.
Un file .mmd è la stessa cosa di un .mermaid?
Sì. Le due estensioni contengono contenuto identico e sono intercambiabili. .mmd è più diffuso ed è quello che lo strumento ufficiale da riga di comando usa in modo predefinito.
Perché il mio file .mmd non si disegna su GitHub?
GitHub disegna Mermaid solo dentro blocchi delimitati ```mermaid in file Markdown, issue, Discussions, pull request e wiki. Un file .mmd a sé stante viene mostrato come testo sorgente. Per renderlo visibile su GitHub, metti lo stesso diagramma in un blocco delimitato dentro un file .md.
Posso aprire un .mmd senza installare niente?
Sì — è a questo che serve questo sito. Il disegno avviene come JavaScript nel tuo browser, quindi non c'è nulla da installare e il file non lascia mai il tuo computer.
Le lettere accentate escono come simboli strani
Il file non è in UTF-8. Questo sito legge i file come UTF-8 e gestisce il marcatore BOM senza problemi, ma un file salvato in ISO-8859-1 o Windows-1252 arriva con à, è, ì, ò e ù rovinate. Risalvalo in UTF-8 dal tuo editor.
L'apostrofo rompe qualcosa?
No, e in italiano è la prima cosa che si teme. Verificato: l'apostrofo funziona sia dentro le etichette sia dentro gli identificatori — `L'ordine --> Spedizione` si disegna senza obiezioni. L'unico carattere che tronca davvero un identificatore è lo spazio.
Qui funziona, sulla nostra wiki no. Perché?
Quasi sempre è una differenza di versione. Questo visualizzatore gira su Mermaid 11.12.2, mentre molte wiki sono su qualcosa di più vecchio — GitLab.com documenta la versione 10. Scrivi la parola info in un diagramma sull'altro sistema per fargli stampare la versione su cui gira.

Tipi di diagramma che puoi aprire qui

Scritto da Dominik Malsch · Ultimo aggiornamento:

Apri l'editor →