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:
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.
```mermaid
flowchart TD
A[Inizio] --> B[Fine]
```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.
flowchart TD
A[Chiama addebita(ordine)] --> B[Fine]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.
flowchart TD
servizio di autenticazione --> base datiflowchart 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;.
flowchart TD
A[Ha detto "va bene"] --> B[Fine]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.
flowchart TD
A[Inizio] --> endflowchart 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.
stateDiagram-v2
[*] --> In attesa di pagamento
In attesa di pagamento --> ChiusostateDiagram-v2
state "In attesa di pagamento" as attesaPagamento
[*] --> attesaPagamento
attesaPagamento --> ChiusoCosa 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.
erDiagram
CLIENTE ||--o{ ORDINE : appartiene aerDiagram
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.
sequencediagram
Client->>API: CiaosequenceDiagram
Client->>API: CiaoCosa 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.
flowchart TD
A -->|sì (sempre)| Bflowchart TD
A -->|"sì (sempre)"| BCosa 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.
sequenceDiagram
Client->>API: Richiesta
alt Tutto a posto
API-->>Client: OKsequenceDiagram
Client->>API: Richiesta
alt Tutto a posto
API-->>Client: OK
endCosa 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.
flowchart XY
A --> Bflowchart TD
A --> BCosa 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.
infoVale 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?
Quale programma apre un file .mmd?
Un file .mmd è la stessa cosa di un .mermaid?
Perché il mio file .mmd non si disegna su GitHub?
Posso aprire un .mmd senza installare niente?
Le lettere accentate escono come simboli strani
L'apostrofo rompe qualcosa?
Qui funziona, sulla nostra wiki no. Perché?
Tipi di diagramma che puoi aprire qui
Scritto da Dominik Malsch · Ultimo aggiornamento: