title: Diagramas e visualização em Markdown description: Como usar Mermaid no Markdown para criar fluxogramas, sequências e outros gráficos que tornam a documentação mais expressiva.
Diagramas
O Markdown permite criar diagramas com Mermaid, trazendo visualizações ricas para os teus documentos.
Introdução ao Mermaid
Mermaid é um gerador de gráficos baseado em texto, com vários tipos:
- Fluxograma (Flowchart)
- Diagrama de sequência (Sequence Diagram)
- Diagrama de Gantt (Gantt Chart)
- Diagrama de classes (Class Diagram)
- Diagrama de estados (State Diagram)
- Gráfico de setores (Pie Chart)
- Jornada do utilizador (User Journey)
- Gráfico Git (Git Graph)
Sintaxe básica
Fluxograma (Flowchart)
markdown
```mermaid
flowchart TD
A[Início] --> B{Está autenticado?}
B -->|Sim| C[Mostrar página inicial]
B -->|Não| D[Mostrar página de login]
C --> E[Fim]
D --> F[Utilizador faz login]
F --> G{Login bem-sucedido?}
G -->|Sim| C
G -->|Não| H[Mostrar mensagem de erro]
H --> D
**Resultado**:
```mermaid
flowchart TD
A[Início] --> B{Está autenticado?}
B -->|Sim| C[Mostrar página inicial]
B -->|Não| D[Mostrar página de login]
C --> E[Fim]
D --> F[Utilizador faz login]
F --> G{Login bem-sucedido?}
G -->|Sim| C
G -->|Não| H[Mostrar mensagem de erro]
H --> DDiagrama de sequência (Sequence Diagram)
markdown
```mermaid
sequenceDiagram
participant U as Utilizador
participant F as Frontend
participant B as Backend
participant D as Base de dados
U->>F: Pedido de login
F->>B: Verificar informações do utilizador
B->>D: Consultar dados do utilizador
D-->>B: Retornar informações do utilizador
B-->>F: Resultado da verificação
F-->>U: Resposta de login
**Resultado**:
```mermaid
sequenceDiagram
participant U as Utilizador
participant F as Frontend
participant B as Backend
participant D as Base de dados
U->>F: Pedido de login
F->>B: Verificar informações do utilizador
B->>D: Consultar dados do utilizador
D-->>B: Retornar informações do utilizador
B-->>F: Resultado da verificação
F-->>U: Resposta de loginFluxogramas — detalhes
Tipos de nós
markdown
```mermaid
flowchart LR
A[Nó retangular]
B(Nó com cantos arredondados)
C((Nó circular))
D{Nó losangular}
E[[Sub-rotina]]
F[(Base de dados)]
G>Nó de etiqueta]
**Resultado**:
```mermaid
flowchart LR
A[Nó retangular]
B(Nó com cantos arredondados)
C((Nó circular))
D{Nó losangular}
E[[Sub-rotina]]
F[(Base de dados)]
G>Nó de etiqueta]Tipos de ligações
markdown
```mermaid
flowchart TD
A --> B
C --- D
E -.-> F
G ==> H
I --o J
K --x L
**Resultado**:
```mermaid
flowchart TD
A --> B
C --- D
E -.-> F
G ==> H
I --o J
K --x LDireções
markdown
<!-- Top‑Down -->
```mermaid
flowchart TD
A --> Bmermaid
flowchart BT
A --> Bmermaid
flowchart LR
A --> Bmermaid
flowchart RL
A --> B
### Exemplo completo
```markdown
```mermaid
flowchart TD
Start([Início]) --> Analysis[Análise]
Analysis --> Design[Design]
Design --> Dev{Desenvolvimento}
Dev --> Frontend[Frontend]
Dev --> Backend[Backend]
Dev --> Database[Base de dados]
Frontend --> FrontTest[Teste FE]
Backend --> BackTest[Teste BE]
Database --> DataTest[Teste dados]
FrontTest --> Integration[Testes de integração]
BackTest --> Integration
DataTest --> Integration
Integration --> Deploy{Preparação de deploy}
Deploy -->|ok| Production[Produção]
Deploy -->|falha| Bug[Correções]
Bug --> Integration
Production --> Monitor[Monitorização]
Monitor --> End([Concluído])
style Start fill:#e1f5fe
style End fill:#e8f5e8
style Bug fill:#ffebee
**Resultado**:
```mermaid
flowchart TD
Start([Início do projeto]) --> Analysis[Análise de requisitos]
Analysis --> Design[Design do sistema]
Design --> Dev{Desenvolvimento}
Dev --> Frontend[Frontend]
Dev --> Backend[Backend]
Dev --> Database[Base de dados]
Frontend --> FrontTest[Teste FE]
Backend --> BackTest[Teste BE]
Database --> DataTest[Teste de dados]
FrontTest --> Integration[Testes de integração]
BackTest --> Integration
DataTest --> Integration
Integration --> Deploy{Preparação de deploy}
Deploy -->|ok| Production[Produção]
Deploy -->|falha| Bug[Correções]
Bug --> Integration
Production --> Monitor[Monitorização]
Monitor --> End([Projeto concluído])
style Start fill:#e1f5fe
style End fill:#e8f5e8
style Bug fill:#ffebeeSequências — detalhes
Sintaxe básica
markdown
```mermaid
sequenceDiagram
Alice->>Bob: Olá Bob, tudo bem?
Bob-->>Alice: Tudo ótimo, obrigado!
Alice-)Bob: Até já!
**Resultado**:
```mermaid
sequenceDiagram
Alice->>Bob: Olá Bob, tudo bem?
Bob-->>Alice: Tudo ótimo, obrigado!
Alice-)Bob: Até já!Ativações e lifelines
markdown
```mermaid
sequenceDiagram
participant A as Cliente
participant B as Servidor
A->>+B: Pedido de dados
Note right of B: Processar pedido
B-->>-A: Resposta
A->>+B: Novo pedido
B->>+B: Processamento interno
B-->>-B: Terminado
B-->>-A: Resultado
**Resultado**:
```mermaid
sequenceDiagram
participant A as Cliente
participant B as Servidor
A->>+B: Pedido de dados
Note right of B: Processar pedido
B-->>-A: Resposta
A->>+B: Novo pedido
B->>+B: Processamento interno
B-->>-B: Terminado
B-->>-A: ResultadoLoops e condições
markdown
```mermaid
sequenceDiagram
participant U as Utilizador
participant S as Sistema
U->>S: Login
alt utilizador existe
S->>S: Validar password
alt correta
S-->>U: Sucesso
else incorreta
S-->>U: Erro
end
else não existe
S-->>U: Utilizador não encontrado
end
opt lembrar sessão
S->>S: Guardar estado
end
**Resultado**:
```mermaid
sequenceDiagram
participant U as Utilizador
participant S as Sistema
U->>S: Login
alt utilizador existe
S->>S: Validar password
alt correta
S-->>U: Sucesso
else incorreta
S-->>U: Erro
end
else não existe
S-->>U: Utilizador não encontrado
end
opt lembrar sessão
S->>S: Guardar estado
endDiagrama de classes (Class Diagram)
markdown
```mermaid
classDiagram
class Animal {
+String name
+int age
+eat()
+sleep()
}
class Dog {
+String breed
+bark()
+wagTail()
}
class Cat {
+String color
+meow()
+purr()
}
Animal <|-- Dog
Animal <|-- Cat
class Owner {
+String name
+feedPet()
}
Owner --> Animal : owns
**Resultado**:
```mermaid
classDiagram
class Animal {
+String name
+int age
+eat()
+sleep()
}
class Dog {
+String breed
+bark()
+wagTail()
}
class Cat {
+String color
+meow()
+purr()
}
Animal <|-- Dog
Animal <|-- Cat
class Owner {
+String name
+feedPet()
}
Owner --> Animal : ownsDiagrama de estados (State Diagram)
markdown
```mermaid
stateDiagram-v2
[*] --> Idle
Idle --> Run : Start
Run --> Pause : Pause
Run --> Done : Finish
Pause --> Run : Resume
Pause --> Stop : Stop
Stop --> Idle : Reset
Done --> Idle : Reset
Done --> [*]
state Run {
[*] --> Init
Init --> Processing
Processing --> Verify
Verify --> [*]
}
**Resultado**:
```mermaid
stateDiagram-v2
[*] --> Idle
Idle --> Run : Start
Run --> Pause : Pause
Run --> Done : Finish
Pause --> Run : Resume
Pause --> Stop : Stop
Stop --> Idle : Reset
Done --> Idle : Reset
Done --> [*]
state Run {
[*] --> Init
Init --> Processing
Processing --> Verify
Verify --> [*]
}Gantt (Gantt Chart)
markdown
```mermaid
gantt
title Cronograma de desenvolvimento
dateFormat YYYY-MM-DD
section Análise
Levantamento :done, des1, 2024-01-01,2024-01-05
Análise :done, des2, after des1, 5d
Revisão :done, des3, after des2, 2d
section Design
Design do sistema :active, design1, 2024-01-12, 7d
UI : design2, after design1, 5d
Base de dados : design3, after design1, 3d
section Desenvolvimento
Frontend : dev1, after design2, 10d
Backend : dev2, after design3, 12d
Testes : test1, after dev1, 5d
**Resultado**:
```mermaid
gantt
title Cronograma de desenvolvimento
dateFormat YYYY-MM-DD
section Análise
Levantamento :done, des1, 2024-01-01,2024-01-05
Análise :done, des2, after des1, 5d
Revisão :done, des3, after des2, 2d
section Design
Design do sistema :active, design1, 2024-01-12, 7d
UI : design2, after design1, 5d
Base de dados : design3, after design1, 3d
section Desenvolvimento
Frontend : dev1, after design2, 10d
Backend : dev2, after design3, 12d
Testes : test1, after dev1, 5dGráfico de setores (Pie)
markdown
```mermaid
pie title Fontes de tráfego
"Pesquisa" : 45
"Social" : 25
"Direto" : 20
"Email" : 7
"Outros" : 3
**Resultado**:
```mermaid
pie title Fontes de tráfego
"Pesquisa" : 45
"Social" : 25
"Direto" : 20
"Email" : 7
"Outros" : 3Jornada do utilizador (User Journey)
markdown
```mermaid
journey
title Jornada de compra
section Descoberta
Home: 3: User
Explorar produtos: 4: User
Pesquisa: 4: User
section Consideração
Ver detalhes: 4: User
Comparar preços: 3: User
Ler avaliações: 5: User
section Compra
Adicionar ao carrinho: 4: User
Checkout: 3: User
Pagamento: 2: User
section Uso
Receber produto: 5: User
Usar produto: 4: User
Escrever avaliação: 4: User
**Resultado**:
```mermaid
journey
title Jornada de compra
section Descoberta
Home: 3: User
Explorar produtos: 4: User
Pesquisa: 4: User
section Consideração
Ver detalhes: 4: User
Comparar preços: 3: User
Ler avaliações: 5: User
section Compra
Adicionar ao carrinho: 4: User
Checkout: 3: User
Pagamento: 2: User
section Uso
Receber produto: 5: User
Usar produto: 4: User
Escrever avaliação: 4: UserGráfico Git (Git Graph)
markdown
```mermaid
gitgraph
commit id: "Commit inicial"
commit id: "Módulo de utilizadores"
branch feature/auth
commit id: "Login"
commit id: "Registo"
checkout main
commit id: "Correção homepage"
merge feature/auth
commit id: "Versão v1.0"
branch hotfix
commit id: "Hotfix"
checkout main
merge hotfix
commit id: "Versão v1.0.1"
**Resultado**:
```mermaid
gitgraph
commit id: "Commit inicial"
commit id: "Módulo de utilizadores"
branch feature/auth
commit id: "Login"
commit id: "Registo"
checkout main
commit id: "Correção homepage"
merge feature/auth
commit id: "Versão v1.0"
branch hotfix
commit id: "Hotfix"
checkout main
merge hotfix
commit id: "Versão v1.0.1"Casos práticos
Arquitetura de sistema
markdown
```mermaid
flowchart TB
subgraph "Camada de utilizador"
Web[Navegador]
Mobile[App]
API[Cliente API]
end
subgraph "Gateway"
Gateway[API Gateway]
Auth[Autenticação]
end
subgraph "Serviços"
UserService[Utilizadores]
OrderService[Encomendas]
PaymentService[Pagamentos]
NotificationService[Notificações]
end
subgraph "Dados"
UserDB[(BD Utilizadores)]
OrderDB[(BD Encomendas)]
Cache[(Redis)]
Queue[Fila]
end
Web --> Gateway
Mobile --> Gateway
API --> Gateway
Gateway --> Auth
Gateway --> UserService
Gateway --> OrderService
Gateway --> PaymentService
UserService --> UserDB
OrderService --> OrderDB
PaymentService --> Queue
NotificationService --> Queue
UserService --> Cache
OrderService --> Cache
style Gateway fill:#e1f5fe
style Auth fill:#fff3e0
style Cache fill:#f3e5f5
### Fluxo de chamada de API
```markdown
```mermaid
sequenceDiagram
participant C as Cliente
participant G as API Gateway
participant A as Autenticação
participant U as Utilizadores
participant D as Base de dados
participant R as Redis
C->>G: Pedir dados de utilizador
G->>A: Verificar token
A->>R: Consultar cache de token
R-->>A: Token válido
A-->>G: Autenticado
G->>U: Obter utilizador
U->>R: Consultar cache
alt em cache
R-->>U: Dados em cache
else sem cache
U->>D: Consultar BD
D-->>U: Dados
U->>R: Atualizar cache
end
U-->>G: Dados do utilizador
G-->>C: Resposta com dados
### Fluxo de negócio
```markdown
```mermaid
flowchart TD
Start([Pedido]) --> Check{Stock}
Check -->|ok| Reserve[Reservar]
Check -->|sem| OutOfStock[Sem stock]
OutOfStock --> Notify[Notificar]
Notify --> End1([Fim])
Reserve --> Payment{Pagamento}
Payment -->|ok| ConfirmOrder[Confirmar]
Payment -->|falha| ReleaseStock[Liberar]
ReleaseStock --> PaymentFailed[Falha]
PaymentFailed --> End2([Fim])
ConfirmOrder --> UpdateInventory[Atualizar stock]
UpdateInventory --> SendNotification[Notificar]
SendNotification --> Logistics[Logística]
Logistics --> End3([Concluído])
style Start fill:#e8f5e8
style End1 fill:#ffebee
style End2 fill:#ffebee
style End3 fill:#e8f5e8
style OutOfStock fill:#ffebee
style PaymentFailed fill:#ffebee
## Estilos e temas
### Estilos de nós
```markdown
```mermaid
flowchart LR
A[Estilo padrão] --> B[Estilo 1]
A --> C[Estilo 2]
A --> D[Estilo 3]
style B fill:#f9f,stroke:#333,stroke-width:4px
style C fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5
style D fill:#f96,stroke:#333,stroke-width:4px,color:#fff
### Estilos por classe
```markdown
```mermaid
flowchart LR
A[Nó A]:::classA --> B[Nó B]:::classB
A --> C[Nó C]:::classC
classDef classA fill:#e1f5fe,stroke:#01579b,stroke-width:2px
classDef classB fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
classDef classC fill:#e8f5e8,stroke:#1b5e20,stroke-width:2px
## Configuração e compatibilidade
### VitePress
```javascript
// .vitepress/config.js
export default {
markdown: {
mermaid: true
}
}GitHub
O GitHub suporta Mermaid nativamente:
markdown
```mermaid
graph LR
A --> B
### Outras plataformas
| Plataforma | Suporte | Config |
|------------|--------|-------|
| **GitHub** | ✅ Nativo | — |
| **GitLab** | ✅ Nativo | — |
| **VitePress** | ✅ Plugin | Requer config |
| **Jekyll** | ✅ Plugin | Instalar |
| **Hugo** | ✅ Tema | Depende do tema |
## Boas práticas
### Design
```markdown
✅ Recomenda-se:
1. **Manter simplicidade**:
- Evitar gráficos excessivamente complexos
- Usar etiquetas e ligações claras
2. **Layout adequado**:
- Escolher a direção apropriada do gráfico
- Manter o fluxo lógico claro
3. **Estilo consistente**:
- Usar um tema de cores consistente
- Manter o estilo dos gráficos uniforme
4. **Adicionar descrições**:
- Adicionar títulos a gráficos complexos
- Fornecer descrições de texto necessárias
❌ Evitar:
1. Gráficos demasiado complexos para entender
2. Demasiadas intersecções de linhas de ligação
3. Etiquetas pouco claras
4. Falta de legenda necessáriaPerformance
markdown
- **Otimização de gráficos grandes**:
- Considerar dividir gráficos complexos
- Usar subgráficos para organizar a estrutura
- **Performance de carregamento**:
- Evitar usar demasiados gráficos numa única página
- Considerar implementação de carregamento lazy
- **Adaptação móvel**:
- Garantir que os gráficos são legíveis em ecrãs pequenos
- Considerar design com rolagem horizontalSintaxe relacionada
Ferramentas e recursos
Editores online
- Mermaid Live Editor: Editor online oficial
- Draw.io: Ferramenta universal de desenho de gráficos
- Lucidchart: Plataforma profissional de criação de gráficos
- Excalidraw: Ferramenta de gráficos com estilo de desenho à mão
Desenvolvimento
- Mermaid CLI: Ferramenta de linha de comandos
- VS Code Mermaid: Extensão do Visual Studio Code
- Atom Mermaid: Extensão do editor Atom
- IntelliJ Mermaid: Extensão da IDE JetBrains
Referências
- Documentação oficial do Mermaid: Referência completa de sintaxe
- Biblioteca de exemplos do Mermaid: Vários exemplos de gráficos
- GitHub Mermaid: Como usar no GitHub
- Awesome Mermaid: Coleção de recursos relacionados
Domina a sintaxe e cria gráficos profissionais que melhoram a clareza e o impacto dos teus documentos.