Mermaid Diagrams Guide

September 16, 2025 ยท View on GitHub

Create interactive charts and diagrams in Markdown using Mermaid syntax.

Supported Diagram Types

  • Flowcharts: graph, flowchart
  • Sequence Diagrams: sequenceDiagram
  • Class Diagrams: classDiagram
  • State Diagrams: stateDiagram
  • Gantt Charts: gantt
  • Pie Charts: pie
  • Entity Relationship: erDiagram
  • User Journey: journey
  • Git Graph: gitGraph

Basic Usage

```mermaid
graph TD
    A[Start] --> B{Is it ready?}
    B -->|Yes| C[Deploy]
    B -->|No| D[Fix Issues]
    D --> B
    C --> E[Done]
```

HTML Rendering

let markdown = """
```mermaid
pie title Pet Distribution
    "Dogs" : 386
    "Cats" : 85  
    "Rats" : 15

"""

let parser = SwiftMarkdownParser() let html = try await parser.parseToHTML(markdown)


## SwiftUI Integration

```swift
import SwiftUI
import SwiftMarkdownParser

struct ContentView: View {
    let markdown = """
    # Document with Diagram
    
    ```mermaid
    graph LR
        A[Input] --> B[Process]
        B --> C[Output]
    ```
    """
    
    @State private var content: AnyView?
    
    var body: some View {
        Group {
            if let content = content {
                ScrollView {
                    content.padding()
                }
            } else {
                ProgressView("Loading...")
            }
        }
        .task {
            await loadContent()
        }
    }
    
    private func loadContent() async {
        do {
            let parser = SwiftMarkdownParser()
            let ast = try await parser.parseToAST(markdown)
            let renderer = SwiftUIRenderer()
            self.content = try await renderer.render(document: ast)
        } catch {
            await MainActor.run {
                self.content = AnyView(Text("Error loading content"))
            }
        }
    }
}

Configuration

// Custom Mermaid themes and settings
let config = MermaidConfiguration(
    theme: .dark,
    securityLevel: .strict
)

let context = RenderContext(mermaidConfiguration: config)
let html = try await parser.parseToHTML(markdown, context: context)