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:

deploy.mmd — um arquivo inteiro, seis linhas
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.

Quebrado
```mermaid
flowchart TD
    A[Início] --> B[Fim]
```
Corrigido
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.

Quebrado
flowchart TD
    A[Chamar cobrar(pedido)] --> B[Fim]
Corrigido
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.

Quebrado
flowchart TD
    servidor de auth --> base de dados
Corrigido
flowchart 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;.

Quebrado
flowchart TD
    A[Ele disse "olá"] --> B[Fim]
Corrigido
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.

Quebrado
flowchart TD
    A[Início] --> end
Corrigido
flowchart 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.

Quebrado
stateDiagram-v2
    [*] --> Aguardando pagamento
    Aguardando pagamento --> Fechado
Corrigido
stateDiagram-v2
    state "Aguardando pagamento" as aguardando
    [*] --> aguardando
    aguardando --> Fechado

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

Quebrado
erDiagram
    CLIENTE ||--o{ PEDIDO : pertence a
Corrigido
erDiagram
    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.

Quebrado
sequencediagram
    Cliente->>API: Olá
Corrigido
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.

Quebrado
flowchart TD
    A -->|sim (sempre)| B
Corrigido
flowchart TD
    A -->|"sim (sempre)"| B

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

Quebrado
sequenceDiagram
    Cliente->>API: Requisição
    alt Tudo certo
        API-->>Cliente: OK
Corrigido
sequenceDiagram
    Cliente->>API: Requisição
    alt Tudo certo
        API-->>Cliente: OK
    end

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

Quebrado
flowchart XY
    A --> B
Corrigido
flowchart TD
    A --> B

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

Corrigido
info

Vale 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?
Solte-o na caixa no topo desta página. Ele é desenhado no seu navegador, sem upload e sem conta. Você também pode abrir o editor e arrastar o arquivo para o painel de pré-visualização.
Qual programa abre um arquivo .mmd?
Qualquer editor de texto mostra o conteúdo, porque o arquivo é texto puro. Para ver o diagrama você precisa de algo que desenhe Mermaid: esta página, o editor deste site, ou a ferramenta de linha de comando mermaid-cli. Não existe aplicativo de desktop dono da extensão .mmd.
Um arquivo .mmd é a mesma coisa que um .mermaid?
Sim. As duas extensões guardam conteúdo idêntico e são intercambiáveis. .mmd é a mais comum e é a que a ferramenta oficial de linha de comando usa por padrão.
Por que meu arquivo .mmd não desenha no GitHub?
O GitHub só desenha Mermaid dentro de blocos de código ```mermaid em arquivos Markdown, issues, Discussions, pull requests e wikis. Um arquivo .mmd sozinho aparece como texto-fonte. Para que apareça no GitHub, ponha o mesmo diagrama dentro de um bloco cercado num arquivo .md.
Dá para abrir um .mmd sem instalar nada?
Dá, é para isso que esta página existe. A renderização roda como JavaScript no seu navegador, então não há nada a instalar e o arquivo nunca sai da sua máquina.
Os acentos aparecem como símbolos estranhos
O arquivo não está em UTF-8. Esta página lê os arquivos como UTF-8 e lida bem com a marca BOM, mas um arquivo salvo em ISO-8859-1 ou Windows-1252 chega com os caracteres acentuados corrompidos. Salve-o de novo como UTF-8 no seu editor.
Funciona aqui mas não no nosso wiki. Por quê?
Quase sempre é diferença de versão. Este visualizador roda Mermaid 11.12.2 e muitos wikis rodam algo mais antigo — o GitLab.com documenta a versão 10. Escreva a palavra info num diagrama no outro sistema para ele imprimir a versão que está rodando.

Tipos de diagrama que você pode abrir aqui

Escrito por Dominik Malsch · Última atualização:

Abrir o editor →