Como abrir um arquivo .mmd
Um arquivo .mmd é um arquivo de texto puro com um diagrama Mermaid dentro. Não é imagem nem formato binário: dá para abrir em qualquer editor de texto e ler. Para vê-lo como diagrama, solte-o na caixa abaixo. Ele é desenhado no seu navegador e nada é enviado para servidor nenhum.
Solte aqui um arquivo .mmd
Também aceita .mermaid, .md e .txt. O arquivo é lido no seu navegador — nunca é enviado.
O que é um arquivo .mmd
Mermaid é uma sintaxe de texto para diagramas. Você descreve o diagrama com palavras e o motor o desenha, do mesmo jeito que o Markdown descreve formatação e o motor produz a página. Um arquivo .mmd guarda esse texto e nada mais: sem estilos, sem dados de imagem, sem metadados.
É essa a razão de existir do formato. Por ser texto, um diagrama pode viver num repositório Git ao lado do código que ele descreve, e uma alteração aparece como um diff legível em vez de um binário substituído. Este é um arquivo .mmd completo e válido:
flowchart LR
Commit[Push na main] --> Build[Rodar os testes]
Build -->|passou| Deploy[Publicar em produção]
Build -->|falhou| Aviso[Avisar o autor]
Deploy --> Fumaca[Teste de fumaça]
Fumaca --> Fim[Release concluída]O que abre um arquivo .mmd
A versão curta: quase nada abre um .mmd com um duplo clique, porque a extensão não está associada a aplicativo nenhum. O que você precisa mesmo é de algo que desenhe Mermaid. Abaixo está o que eu verifiquei, e onde não funciona.
Esta páginaFunciona
Desenha o arquivo direto
Solte o arquivo na caixa acima e você tem o diagrama. Não há etapa de upload: o arquivo é lido no seu navegador com a File API e desenhado localmente, o que também serve para diagramas que você não pode enviar a terceiros.
Se quiser alterar o diagrama em vez de só olhar, use o link abaixo da pré-visualização para abri-lo no editor.
Qualquer editor de textoFunciona
Mostra o código-fonte, não o diagrama
Bloco de Notas, TextEdit, vim, tanto faz. Um arquivo .mmd é texto UTF-8, então você vê o conteúdo na hora. Não vê um diagrama, e não há nada quebrado nisso: simplesmente não existe imagem dentro do arquivo para mostrar.
É a forma mais rápida de conferir se um arquivo que te mandaram é mesmo Mermaid: abra e veja se a primeira linha não vazia é uma palavra-chave de diagrama como flowchart, sequenceDiagram, classDiagram, stateDiagram-v2, erDiagram ou gantt.
GitHubNão funciona
Desenha blocos ```mermaid dentro de Markdown — não arquivos .mmd soltos
O GitHub desenha Mermaid dentro de blocos de código cercados. A documentação diz exatamente onde: issues, Discussions, pull requests, wikis e arquivos Markdown. Um arquivo .mmd sozinho não está nessa lista, e abri-lo no navegador de arquivos do repositório mostra o texto-fonte.
Então, se você quer um diagrama visível no GitHub, ele precisa estar dentro de um bloco ```mermaid num arquivo .md, e não num .mmd próprio. Manter um .mmd como fonte e repetir o mesmo conteúdo no README é uma duplicação comum e razoável.
GitLabNão funciona
Desenha blocos ```mermaid — não .mmd soltos, e num Mermaid mais antigo
Mesmo formato do GitHub: Mermaid desenha dentro de blocos cercados em Markdown, issues, merge requests e wikis, mas não há documentação de que um arquivo .mmd sozinho seja desenhado.
Há uma segunda coisa que vale saber, porque causa confusão de verdade. O GitLab.com informa que suporta a versão 10 do Mermaid. Este site roda 11.12.2. Sintaxe adicionada depois da versão 10 desenha aqui e falha lá, e essa é a explicação de sempre para «funciona no visualizador mas não no nosso GitLab». Em GitLab autogerenciado há uma terceira armadilha: se o cabeçalho Cross-Origin-Resource-Policy estiver em same-site ou same-origin, os diagramas Mermaid falham em silêncio — sem erro e sem diagrama.
.mmd, .mermaid e .md
.mmd e .mermaid são a mesma coisa. Os dois contêm apenas código Mermaid, e todas as ferramentas que conheço que aceitam um aceitam o outro. .mmd é a mais curta e mais comum das duas; a ferramenta oficial de linha de comando usa ela por padrão. Escolha uma e seja consistente dentro de um projeto — a escolha não tem consequência técnica.
.md é diferente por natureza. Um arquivo Markdown é um documento que pode conter um diagrama Mermaid, embrulhado num bloco que começa com três crases seguidas da palavra mermaid. O diagrama é um trecho dentro de um texto maior.
Essa diferença é de longe a razão mais comum de um arquivo não desenhar, e vale nos dois sentidos. Cole o conteúdo de um .md num visualizador Mermaid e falha, porque a linha de cerca não é sintaxe Mermaid. Salve um diagrama Mermaid puro num .md sem a cerca e o GitHub mostra como um parágrafo de texto. A regra é simples: um .mmd precisa começar com uma palavra-chave de diagrama, e um .md precisa ter o diagrama dentro de um bloco cercado.
Este visualizador aceita .mmd, .mermaid, .md e .txt, mas trata tudo o que lê como Mermaid puro. Se você soltar um Markdown com texto em volta do diagrama, tire antes tudo o que não for o diagrama.
Não desenha — o que está errado de verdade
As mensagens de erro do Mermaid são precisas, mas nada amigáveis. O truque útil é ler o finalzinho da mensagem: depois de «got», o Mermaid nomeia o token em que engasgou, e esse token identifica o problema muito melhor que o número da linha. Reproduzi cada caso abaixo no mermaid 11.12.2: a versão quebrada falha mesmo e a corrigida desenha mesmo.
O que você vê
No diagram type detected matching given configuration for text: ```mermaid
Por quê
Você copiou o diagrama de um arquivo Markdown ou de uma conversa e trouxe a cerca junto. As três crases são Markdown, não Mermaid, então o analisador nunca chega ao diagrama.
Solução
Apague a linha de abertura ```mermaid e a de fechamento ```. O arquivo precisa começar com a palavra-chave do diagrama.
```mermaid
flowchart TD
A[Início] --> B[Fim]
```flowchart TD
A[Início] --> B[Fim]O que você vê
Parse error, a mensagem termina em: got 'PS'
O erro termina em: got 'PS'
Por quê
Um parêntese de abertura dentro do rótulo de um nó. No Mermaid os parênteses são sintaxe de forma — A(texto) é um nó arredondado —, então um parêntese solto entre colchetes é lido como o início de uma forma.
Solução
Coloque o rótulo entre aspas. Tudo dentro de aspas duplas vira texto, colchetes inclusive.
flowchart TD
A[Chamar cobrar(pedido)] --> B[Fim]flowchart TD
A["Chamar cobrar(pedido)"] --> B[Fim]O que você vê
Parse error na linha em que você nomeou um nó
Por quê
O identificador de um nó tem espaços. Em português é o erro mais fácil de cometer, porque os nomes naturais são locuções: «serviço de autenticação», «base de dados». O identificador é o token antes da seta e o espaço o encerra, deixando uma palavra solta que não encaixa em lugar nenhum.
Solução
Dê ao nó um identificador de uma palavra e ponha o texto legível no rótulo. Acentos, til e cedilha valem dentro do identificador; só o espaço quebra.
flowchart TD
servidor de auth --> base de dadosflowchart TD
auth[Servidor de autenticação] --> db[Base de dados]O que você vê
Parse error, a mensagem termina em: got 'STR'
O erro termina em: got 'STR'
Por quê
Aspas duplas dentro do rótulo de um nó. O analisador as toma como o começo de uma string e depois encontra o colchete do rótulo onde esperava a aspa de fechamento.
Solução
Envolva o rótulo inteiro em aspas duplas e use aspas simples por dentro, ou escreva a aspa como a entidade HTML #quot;.
flowchart TD
A[Ele disse "olá"] --> B[Fim]flowchart TD
A["Ele disse 'olá'"] --> B[Fim]O que você vê
Parse error, a mensagem termina em: got 'end'
O erro termina em: got 'end'
Por quê
Você usou end como identificador de nó. Em minúsculas, end fecha um subgrafo, então o analisador vê um fim de bloco onde esperava um nó. Acontece bastante: seguindo exemplos em inglês, o último nó acaba se chamando end mesmo com o resto em português.
Solução
Use maiúscula ou dê outro identificador ao nó e leve a palavra para o rótulo. `Fim` não dá problema.
flowchart TD
A[Início] --> endflowchart TD
A[Início] --> Fim[Concluído]O que você vê
Desenha, mas num diagrama de estados um estado se partiu em dois
Por quê
Um espaço dentro do identificador de um estado. Diferente do fluxograma, o diagrama de estados não reclama: ele cria uma caixa separada para cada palavra. Medido — `[*] --> Aguardando pagamento` produz dois estados, `Aguardando` e `pagamento`, e só o primeiro fica na ponta da seta. Em português quase nenhum estado cabe numa palavra, então o erro acontece o tempo todo, e não há sinal nenhum de que aconteceu.
Solução
Declare o estado com `state "Rótulo" as id` e refira-se a ele só pelo identificador.
stateDiagram-v2
[*] --> Aguardando pagamento
Aguardando pagamento --> FechadostateDiagram-v2
state "Aguardando pagamento" as aguardando
[*] --> aguardando
aguardando --> FechadoO que você vê
Desenha, mas um diagrama ER tem entidades que você não escreveu
Por quê
Um rótulo de relacionamento com espaço e sem aspas. É a armadilha que mais castiga o português, porque nossos verbos de relação pedem preposição: «pertence a», «aparece em». O Mermaid não dá erro: corta o rótulo no primeiro espaço e transforma cada palavra restante numa entidade vazia.
Solução
Ponha entre aspas todo rótulo de relacionamento que tiver espaço. Em português, praticamente todos.
erDiagram
CLIENTE ||--o{ PEDIDO : pertence aerDiagram
CLIENTE ||--o{ PEDIDO : "pertence a"O que você vê
No diagram type detected matching given configuration for text: sequencediagram
Por quê
A palavra-chave do diagrama está escrita errado, ou com as maiúsculas trocadas. As palavras-chave do Mermaid diferenciam maiúsculas: sequenceDiagram funciona, sequencediagram não. O mesmo vale para stateDiagram-v2 e erDiagram.
Solução
Corrija as maiúsculas. Repare que graph continua aceito como apelido antigo de flowchart, então essa sintaxe velha não é o seu problema.
sequencediagram
Cliente->>API: OlásequenceDiagram
Cliente->>API: OláO que você vê
Parse error num rótulo de aresta entre barras
Por quê
Parênteses dentro do rótulo de uma aresta. O rótulo |...| tem a mesma restrição do rótulo de um nó: ali colchetes e parênteses são sintaxe, não texto.
Solução
Coloque o rótulo da aresta entre aspas.
flowchart TD
A -->|sim (sempre)| Bflowchart TD
A -->|"sim (sempre)"| BO que você vê
Parse error apontando para a última linha do diagrama
Por quê
Um bloco aberto e nunca fechado: alt, opt, loop, par e subgraph todos precisam do end deles. O Mermaid informa a falha no ponto em que a entrada acaba, então o número da linha aponta para o fim do arquivo e não para o bloco aberto.
Solução
Conte os blocos que abriu e os end que escreveu. Quando o erro é na última linha, quase sempre é isso.
sequenceDiagram
Cliente->>API: Requisição
alt Tudo certo
API-->>Cliente: OKsequenceDiagram
Cliente->>API: Requisição
alt Tudo certo
API-->>Cliente: OK
endO que você vê
Lexical error on line 1. Unrecognized text.
Por quê
Uma direção inválida depois da palavra-chave do diagrama. Fluxogramas aceitam TB, TD, BT, LR e RL, e nada mais; um erro de digitação aqui falha no analisador léxico, antes de ler qualquer nó.
Solução
Use uma das cinco direções válidas. TD e LR cobrem quase todos os casos.
flowchart XY
A --> Bflowchart TD
A --> BO que você vê
Desenha aqui mas não no GitLab, no Confluence ou numa ferramenta antiga
Por quê
Uma diferença de versão. Este visualizador roda Mermaid 11.12.2; o GitLab.com documenta a versão 10, e wikis auto-hospedados costumam estar anos atrás. Sintaxe introduzida depois da versão da outra ferramenta é analisada aqui e falha lá.
Solução
Pergunte à outra ferramenta qual versão ela usa. Escrever a palavra info sozinha num diagrama faz o Mermaid desenhar o próprio número de versão, o que é mais rápido que ler notas de lançamento.
infoVale mencionar a codificação, porque ainda aparece. Esta página e o editor leem o arquivo como UTF-8 e removem a marca BOM se houver, então um arquivo salvo no Bloco de Notas do Windows como «UTF-8 com BOM» abre normalmente. Já um arquivo salvo em ISO-8859-1 ou Windows-1252, o que algumas ferramentas antigas ainda produzem, chega com os acentos e os cedilhas corrompidos. Se os rótulos aparecerem com símbolos estranhos no lugar dos acentos, salve o arquivo de novo como UTF-8 no seu editor.
E uma última coisa que não produz erro nenhum: em GitLab autogerenciado, um cabeçalho Cross-Origin-Resource-Policy em same-site ou same-origin faz os diagramas Mermaid falharem em silêncio. Sem mensagem, sem diagrama, nada na página. Se um diagrama desenha em todo lugar menos numa instância auto-hospedada, é ali que se deve olhar.
Converter para PNG, SVG ou PDF
Abra o arquivo no editor e use os botões de exportação. O SVG mantém o diagrama como texto vetorial, então ele continua nítido em qualquer tamanho e os rótulos seguem selecionáveis e pesquisáveis — é a escolha certa para documentação e para qualquer coisa que possa ser reexportada depois. O PNG é bitmap, exportado aqui em duas a três vezes o tamanho de exibição para aguentar telas de alta densidade; use onde SVG não é aceito, o que na prática significa a maioria dos aplicativos de mensagem e alguns wikis.
Não existe botão de PDF, e prefiro dizer isso a fingir o contrário. O caminho prático é exportar SVG e ou colocá-lo no documento que você já está escrevendo, ou imprimir essa página em PDF pelo navegador. Um SVG vetorial colocado num PDF continua vetorial.
Para qualquer coisa repetível — um passo de build, um lote de arquivos, um hook de pre-commit — existe o renderizador oficial de linha de comando, @mermaid-js/mermaid-cli, que pega o mesmo arquivo .mmd e escreve a imagem direto, sem navegador.
Perguntas frequentes
Como abrir um arquivo .mmd online?
Qual programa abre um arquivo .mmd?
Um arquivo .mmd é a mesma coisa que um .mermaid?
Por que meu arquivo .mmd não desenha no GitHub?
Dá para abrir um .mmd sem instalar nada?
Os acentos aparecem como símbolos estranhos
Funciona aqui mas não no nosso wiki. Por quê?
Tipos de diagrama que você pode abrir aqui
Escrito por Dominik Malsch · Última atualização: