# Mermaid Diagram Examples for Technical Documentation
This file contains practical examples of how to use Mermaid diagrams to document various aspects of software systems.
---
## Example 1: API Request Flow Documentation
**Use Case:** Documenting how an API request flows through your system
```mermaid
sequenceDiagram
autonumber
participant Client as Client App
participant Gateway as API Gateway
participant Auth as Auth Service
participant API as REST API
participant Cache as Redis Cache
participant DB as PostgreSQL
Client->>Gateway: POST /api/orders
Gateway->>Auth: Validate JWT Token
alt Token Valid
Auth-->>Gateway: Token Valid + User Context
Gateway->>API: Forward Request + User Context
API->>Cache: Check product availability
alt Cache Hit
Cache-->>API: Product data (cached)
else Cache Miss
API->>DB: SELECT products
DB-->>API: Product data
API->>Cache: SET product data (TTL: 5min)
end
API->>DB: INSERT order
DB-->>API: Order created
API-->>Gateway: 201 Created + Order ID
Gateway-->>Client: 201 Created + Order Response
else Token Invalid/Expired
Auth-->>Gateway: 401 Unauthorized
Gateway-->>Client: 401 Unauthorized
end
```
**Documentation Text:**
> The order creation flow involves authentication validation, cache lookup for product data, and database writes. The API Gateway handles all external requests and delegates authentication to the Auth Service before forwarding valid requests to the REST API.
---
## Example 2: System Architecture Overview
**Use Case:** High-level architecture documentation for README or onboarding
```mermaid
flowchart TB
subgraph Clients["Client Applications"]
Web[Web App
React]
Mobile[Mobile App
React Native]
CLI[CLI Tool
Node.js]
end
subgraph Gateway["API Layer"]
LB[Load Balancer
nginx]
API[API Gateway
Kong]
end
subgraph Services["Microservices"]
direction TB
UserSvc[User Service
Go]
OrderSvc[Order Service
Java]
PaymentSvc[Payment Service
Python]
NotifSvc[Notification Service
Node.js]
end
subgraph Data["Data Layer"]
PG[(PostgreSQL
Primary DB)]
Redis[(Redis
Cache)]
Kafka[Kafka
Events]
S3[(S3
File Storage)]
end
subgraph External["External Services"]
Stripe[Stripe
Payments]
SendGrid[SendGrid
Email]
Twilio[Twilio
SMS]
end
Web --> LB
Mobile --> LB
CLI --> LB
LB --> API
API --> UserSvc
API --> OrderSvc
API --> PaymentSvc
UserSvc --> PG
UserSvc --> Redis
OrderSvc --> PG
OrderSvc --> Kafka
PaymentSvc --> Stripe
PaymentSvc --> Kafka
Kafka --> NotifSvc
NotifSvc --> SendGrid
NotifSvc --> Twilio
NotifSvc --> S3
```
---
## Example 3: Database Schema Documentation
**Use Case:** Documenting database relationships for backend developers
```mermaid
erDiagram
users {
uuid id PK
varchar email UK
varchar password_hash
varchar full_name
enum role
timestamp created_at
timestamp updated_at
boolean is_active
}
organizations {
uuid id PK
varchar name
varchar slug UK
jsonb settings
timestamp created_at
}
organization_members {
uuid id PK
uuid organization_id FK
uuid user_id FK
enum role
timestamp joined_at
}
projects {
uuid id PK
uuid organization_id FK
varchar name
text description
enum status
timestamp created_at
uuid created_by FK
}
tasks {
uuid id PK
uuid project_id FK
varchar title
text description
enum priority
enum status
uuid assignee_id FK
timestamp due_date
timestamp created_at
}
comments {
uuid id PK
uuid task_id FK
uuid author_id FK
text content
timestamp created_at
timestamp updated_at
}
users ||--o{ organization_members : "belongs to"
organizations ||--o{ organization_members : "has"
organizations ||--o{ projects : "contains"
users ||--o{ projects : "creates"
projects ||--o{ tasks : "has"
users ||--o{ tasks : "assigned to"
tasks ||--o{ comments : "has"
users ||--o{ comments : "writes"
```
---
## Example 4: State Machine Documentation
**Use Case:** Documenting order lifecycle or workflow states
```mermaid
stateDiagram-v2
[*] --> Draft: Create Order
Draft --> Pending: Submit Order
Draft --> Cancelled: Cancel
state Pending {
[*] --> AwaitingPayment
AwaitingPayment --> PaymentReceived: Payment Success
AwaitingPayment --> PaymentFailed: Payment Failed
PaymentFailed --> AwaitingPayment: Retry Payment
}
Pending --> Processing: Payment Confirmed
Pending --> Cancelled: Cancel / Timeout
state Processing {
[*] --> Picking
Picking --> Packing: Items Picked
Packing --> ReadyToShip: Packed
}
Processing --> Shipped: Dispatch
state Shipped {
[*] --> InTransit
InTransit --> OutForDelivery: Arrived at Local Hub
OutForDelivery --> Delivered: Delivery Confirmed
InTransit --> DeliveryFailed: Delivery Exception
OutForDelivery --> DeliveryFailed: Delivery Exception
DeliveryFailed --> InTransit: Retry Delivery
}
Shipped --> Delivered: Complete
Delivered --> [*]
Cancelled --> [*]
note right of Draft: Customer can edit order
note right of Processing: Warehouse operations
note right of Shipped: Carrier tracking active
```
---
## Example 5: Authentication Flow
**Use Case:** Documenting OAuth2/OIDC authentication flow
```mermaid
sequenceDiagram
participant User as User Browser
participant App as Web Application
participant Auth as Auth Server
participant API as Resource API
User->>App: Click "Login"
App->>App: Generate state & code_verifier
App->>Auth: Redirect to /authorize
(client_id, redirect_uri, state, code_challenge)
Auth->>User: Show Login Page
User->>Auth: Enter Credentials
Auth->>Auth: Validate Credentials
alt Credentials Valid
Auth->>User: Redirect to redirect_uri
(code, state)
User->>App: Follow Redirect
App->>App: Verify state
App->>Auth: POST /token
(code, code_verifier, client_secret)
Auth->>Auth: Verify code_verifier
Auth-->>App: access_token, refresh_token, id_token
App->>App: Store tokens securely
App-->>User: Login Success - Show Dashboard
User->>App: Request Protected Resource
App->>API: GET /resource
(Authorization: Bearer token)
API->>API: Validate JWT
API-->>App: Protected Data
App-->>User: Display Data
else Credentials Invalid
Auth-->>User: Error: Invalid Credentials
end
```
---
## Example 6: CI/CD Pipeline Documentation
**Use Case:** Documenting deployment pipeline stages
```mermaid
flowchart LR
subgraph Trigger["Trigger"]
Push[Git Push]
PR[Pull Request]
Manual[Manual]
end
subgraph Build["Build Stage"]
Checkout[Checkout Code]
Install[Install Dependencies]
Lint[Run Linters]
TypeCheck[Type Check]
Compile[Compile/Build]
end
subgraph Test["Test Stage"]
Unit[Unit Tests]
Integration[Integration Tests]
E2E[E2E Tests]
Coverage[Coverage Report]
end
subgraph Security["Security Stage"]
SAST[SAST Scan]
Deps[Dependency Audit]
Secrets[Secret Scanning]
end
subgraph Deploy["Deploy Stage"]
DockerBuild[Build Docker Image]
Push2Registry[Push to Registry]
DeployStaging[Deploy Staging]
SmokeTest[Smoke Tests]
DeployProd[Deploy Production]
end
subgraph Notify["Notifications"]
Slack[Slack Alert]
Email[Email Report]
end
Push --> Checkout
PR --> Checkout
Manual --> Checkout
Checkout --> Install --> Lint --> TypeCheck --> Compile
Compile --> Unit
Compile --> Integration
Unit --> Coverage
Integration --> E2E
Compile --> SAST
Install --> Deps
Checkout --> Secrets
E2E --> DockerBuild
SAST --> DockerBuild
Deps --> DockerBuild
Secrets --> DockerBuild
DockerBuild --> Push2Registry --> DeployStaging --> SmokeTest
SmokeTest -->|Pass| DeployProd
SmokeTest -->|Fail| Slack
DeployProd --> Slack
DeployProd --> Email
```
---
## Example 7: Class Diagram for Domain Model
**Use Case:** Documenting domain entities and their relationships
```mermaid
classDiagram
class User {
-UUID id
-String email
-String passwordHash
-UserRole role
-DateTime createdAt
+authenticate(password: String) bool
+changePassword(old: String, new: String) void
+hasPermission(permission: Permission) bool
}
class Organization {
-UUID id
-String name
-String slug
-OrganizationSettings settings
+addMember(user: User, role: MemberRole) void
+removeMember(user: User) void
+updateSettings(settings: OrganizationSettings) void
}
class Project {
-UUID id
-String name
-String description
-ProjectStatus status
-DateTime createdAt
+addTask(task: Task) void
+getActiveTasks() Task[]
+archive() void
}
class Task {
-UUID id
-String title
-String description
-TaskPriority priority
-TaskStatus status
-DateTime dueDate
+assign(user: User) void
+updateStatus(status: TaskStatus) void
+addComment(comment: Comment) void
}
class Comment {
-UUID id
-String content
-DateTime createdAt
+edit(content: String) void
+delete() void
}
class OrganizationMember {
-MemberRole role
-DateTime joinedAt
}
class UserRole {
<>
ADMIN
USER
GUEST
}
class MemberRole {
<>
OWNER
ADMIN
MEMBER
VIEWER
}
class TaskStatus {
<>
TODO
IN_PROGRESS
IN_REVIEW
DONE
CANCELLED
}
User "1" --> "*" OrganizationMember
Organization "1" --> "*" OrganizationMember
Organization "1" --> "*" Project
User "1" --> "*" Project : creates
Project "1" --> "*" Task
User "1" --> "*" Task : assigned
Task "1" --> "*" Comment
User "1" --> "*" Comment : authors
```
---
## Example 8: Microservices Communication
**Use Case:** Documenting service-to-service communication patterns
```mermaid
flowchart TB
subgraph sync["Synchronous Communication"]
direction LR
A1[Service A] -->|REST/gRPC| B1[Service B]
B1 -->|Response| A1
end
subgraph async["Asynchronous Communication"]
direction LR
A2[Service A] -->|Publish Event| MQ[Message Queue]
MQ -->|Subscribe| B2[Service B]
MQ -->|Subscribe| C2[Service C]
end
subgraph saga["Saga Pattern"]
direction LR
Order[Order Service] -->|1. Create Order| OS[(Order DB)]
Order -->|2. Reserve Items| Inventory[Inventory Service]
Inventory -->|3. Reserve Stock| IS[(Inventory DB)]
Inventory -->|4. Stock Reserved| Order
Order -->|5. Process Payment| Payment[Payment Service]
Payment -->|6. Charge| PS[(Payment DB)]
Payment -->|7a. Success| Order
Payment -.->|7b. Failure| Order
Order -.->|8. Compensate| Inventory
end
subgraph cqrs["CQRS Pattern"]
direction TB
Commands[Commands] --> WriteModel[Write Model]
WriteModel --> EventStore[(Event Store)]
EventStore --> Projector[Event Projector]
Projector --> ReadModel[(Read Model)]
ReadModel --> Queries[Queries]
end
```
---
## Example 9: User Journey Documentation
**Use Case:** Documenting user experience for product teams
```mermaid
journey
title E-Commerce Checkout Journey
section Discovery
Visit homepage: 5: Customer
Browse categories: 4: Customer
Search for product: 4: Customer
View product details: 5: Customer
Read reviews: 4: Customer
section Selection
Add to cart: 5: Customer
View cart: 4: Customer
Apply coupon code: 3: Customer
Update quantities: 3: Customer
section Checkout
Click checkout: 4: Customer
Enter shipping info: 3: Customer
Select shipping method: 3: Customer
Enter payment info: 2: Customer
Review order: 4: Customer
Place order: 5: Customer
section Post-Purchase
View confirmation: 5: Customer
Receive email: 4: Customer, System
Track order: 4: Customer
Receive delivery: 5: Customer, Carrier
Leave review: 3: Customer
```
---
## Example 10: Feature Prioritization Matrix
**Use Case:** Documenting feature priority for planning
```mermaid
quadrantChart
title Feature Priority Matrix - Q1 Planning
x-axis Low Complexity --> High Complexity
y-axis Low Business Value --> High Business Value
quadrant-1 Do Now
quadrant-2 Plan Carefully
quadrant-3 Consider Dropping
quadrant-4 Quick Wins
SSO Integration: [0.75, 0.9]
Mobile App: [0.85, 0.85]
Dark Mode: [0.15, 0.25]
Export to PDF: [0.25, 0.45]
Search Improvements: [0.35, 0.75]
Email Notifications: [0.30, 0.65]
API Rate Limiting: [0.45, 0.55]
Dashboard Widgets: [0.55, 0.60]
Bulk Import: [0.65, 0.70]
Audit Logging: [0.40, 0.80]
```
---
## Example 11: Project Timeline
**Use Case:** Documenting project milestones and phases
```mermaid
gantt
title Product Development Roadmap
dateFormat YYYY-MM-DD
section Phase 1: Foundation
Project Setup & Planning :done, p1_1, 2024-01-01, 14d
Core Infrastructure :done, p1_2, after p1_1, 21d
Authentication System :done, p1_3, after p1_2, 14d
Basic API Endpoints :active, p1_4, after p1_3, 21d
section Phase 2: Core Features
User Management :p2_1, after p1_4, 14d
Organization Features :p2_2, after p2_1, 14d
Project Management :p2_3, after p2_2, 21d
Task System :p2_4, after p2_3, 21d
section Phase 3: Advanced Features
Real-time Collaboration :p3_1, after p2_4, 28d
Reporting & Analytics :p3_2, after p3_1, 21d
Integrations :p3_3, after p3_2, 21d
section Milestones
Alpha Release :milestone, m1, after p1_4, 0d
Beta Release :milestone, m2, after p2_4, 0d
Public Launch :milestone, m3, after p3_3, 0d
```
---
## Example 12: Component Hierarchy
**Use Case:** Documenting React/Vue component structure
```mermaid
flowchart TB
subgraph App["App.tsx"]
Router[Router]
end
subgraph Layout["Layout Components"]
MainLayout[MainLayout]
AuthLayout[AuthLayout]
Header[Header]
Sidebar[Sidebar]
Footer[Footer]
end
subgraph Pages["Page Components"]
Dashboard[Dashboard]
Projects[Projects]
Settings[Settings]
Login[Login]
Register[Register]
end
subgraph Features["Feature Components"]
ProjectList[ProjectList]
ProjectCard[ProjectCard]
TaskBoard[TaskBoard]
TaskColumn[TaskColumn]
TaskCard[TaskCard]
end
subgraph Shared["Shared Components"]
Button[Button]
Input[Input]
Modal[Modal]
Avatar[Avatar]
Badge[Badge]
Spinner[Spinner]
end
Router --> MainLayout
Router --> AuthLayout
MainLayout --> Header
MainLayout --> Sidebar
MainLayout --> Footer
MainLayout --> Dashboard
MainLayout --> Projects
MainLayout --> Settings
AuthLayout --> Login
AuthLayout --> Register
Dashboard --> ProjectList
Projects --> ProjectList
ProjectList --> ProjectCard
ProjectCard --> Badge
ProjectCard --> Avatar
Projects --> TaskBoard
TaskBoard --> TaskColumn
TaskColumn --> TaskCard
TaskCard --> Avatar
TaskCard --> Badge
Login --> Input
Login --> Button
Register --> Input
Register --> Button
Settings --> Input
Settings --> Button
Settings --> Modal
```
---
## Example 13: Error Handling Flow
**Use Case:** Documenting error handling strategy
```mermaid
flowchart TB
Start([Request Received]) --> Validate{Validate Input}
Validate -->|Invalid| ValidationError[ValidationError
400 Bad Request]
Validate -->|Valid| Authenticate{Authenticate}
Authenticate -->|No Token| AuthError[AuthenticationError
401 Unauthorized]
Authenticate -->|Invalid Token| AuthError
Authenticate -->|Valid| Authorize{Authorize}
Authorize -->|Forbidden| ForbiddenError[ForbiddenError
403 Forbidden]
Authorize -->|Allowed| Process{Process Request}
Process -->|Not Found| NotFoundError[NotFoundError
404 Not Found]
Process -->|Conflict| ConflictError[ConflictError
409 Conflict]
Process -->|Success| Success[Success Response
2xx]
Process -->|Internal Error| ServerError[ServerError
500 Internal Error]
ValidationError --> ErrorHandler
AuthError --> ErrorHandler
ForbiddenError --> ErrorHandler
NotFoundError --> ErrorHandler
ConflictError --> ErrorHandler
ServerError --> ErrorHandler
ErrorHandler[Error Handler] --> Log[Log Error]
Log --> Format[Format Response]
Format --> Respond([Send Response])
Success --> Respond
style ValidationError fill:#ffcccc
style AuthError fill:#ffcccc
style ForbiddenError fill:#ffcccc
style NotFoundError fill:#ffcccc
style ConflictError fill:#ffcccc
style ServerError fill:#ff9999
style Success fill:#ccffcc
```
---
## Example 14: Git Branching Strategy
**Use Case:** Documenting team Git workflow
```mermaid
gitGraph
commit id: "Initial"
branch develop
checkout develop
commit id: "Setup CI/CD"
branch feature/user-auth
commit id: "Add login"
commit id: "Add registration"
commit id: "Add password reset"
checkout develop
branch feature/api
commit id: "Setup API routes"
commit id: "Add validation"
checkout develop
merge feature/user-auth id: "Merge auth" tag: "auth-complete"
checkout feature/api
commit id: "Add error handling"
checkout develop
merge feature/api id: "Merge API"
branch release/1.0
commit id: "Version bump"
commit id: "Update docs"
checkout main
merge release/1.0 id: "Release 1.0" tag: "v1.0.0"
checkout develop
merge release/1.0 id: "Sync release"
branch hotfix/security
commit id: "Fix vulnerability"
checkout main
merge hotfix/security id: "Hotfix" tag: "v1.0.1"
checkout develop
merge hotfix/security id: "Sync hotfix"
```
---
## Example 15: Mindmap for Technical Decisions
**Use Case:** Documenting architecture decision records (ADR)
```mermaid
mindmap
root((API Design
Decisions))
Protocol
REST
Familiar to team
Good tooling
Stateless
GraphQL
Flexible queries
Single endpoint
Learning curve
gRPC
High performance
Strong typing
Limited browser support
**Decision: REST**
Authentication
JWT
Stateless
Self-contained
Can be large
Session
Server state
Easy revocation
Scaling issues
OAuth2
Standard
Third-party auth
Complex setup
**Decision: JWT + OAuth2**
Database
PostgreSQL
ACID compliant
JSON support
Mature
MongoDB
Flexible schema
Horizontal scale
Eventual consistency
**Decision: PostgreSQL**
Caching
Redis
Fast
Data structures
Pub/Sub
Memcached
Simple
Multi-threaded
Limited features
**Decision: Redis**
```
---
*These examples demonstrate how Mermaid diagrams can enhance technical documentation across different use cases. Mix and match these patterns to create comprehensive documentation for your projects.*