Skip to content
MikroTik RouterOS Docs

Diagram Tool Comparison

This page compares 5 different diagramming tools across 4 diagram types commonly used in our documentation.

Tools Evaluated:

ToolTypeBuild StepNotes
D2Text β†’ SVGYes (CLI)Beautiful defaults, modern
D2 SketchText β†’ SVGYes (CLI)Hand-drawn aesthetic
MermaidMarkdownNoAlready integrated
Hand-crafted SVGXMLNoFull design control
PlantUMLText β†’ ImageYes (Kroki API)Mature, UML-focused

Multi-AS topology showing eBGP/iBGP relationships between routers.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ AS 65001 β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Router A │────│ Router B │────│ Router C β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ eBGP eBGP β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ AS 65002 β”‚ β”‚ AS 65003 β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Router D β”‚ β”‚ β”‚ β”‚ Router E β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

D2 Clean

D2 Sketch

Hand-crafted

flowchart TB
    subgraph AS65001["AS 65001"]
        direction LR
        A[Router A] --- B[Router B] --- C[Router C]
    end
    subgraph AS65002["AS 65002"]
        D[Router D]
    end
    subgraph AS65003["AS 65003"]
        E[Router E]
    end
    A -.->|eBGP| D
    C -.->|eBGP| E
    style AS65001 fill:#e3f2fd,stroke:#1976d2
    style AS65002 fill:#fff3e0,stroke:#f57c00
    style AS65003 fill:#f3e5f5,stroke:#7b1fa2

PlantUML


Router redundancy with Master/Backup and Virtual IP failover.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ PC1 β”‚ β”‚ PC2 β”‚ β”‚ PC3 β”‚
β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”Œβ”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”
β”‚ Switch β”‚
β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”Œβ”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”
β”‚ Router A β”‚ β”‚ Router B β”‚
β”‚ MASTER β”‚ β”‚ BACKUP β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
└────── VIP: 10.0.10.1 β”€β”€β”€β”€β”€β”€β”˜

D2 Clean

D2 Sketch

Hand-crafted

flowchart TD
    subgraph clients["Clients"]
        PC1["PC1<br/>.10.100"]
        PC2["PC2<br/>.10.101"]
        PC3["PC3<br/>.10.102"]
    end
    SW[Switch]
    subgraph vrrp["VRRP Group"]
        VIP(("Virtual IP<br/>10.0.10.1"))
        RA["Router A<br/>MASTER<br/>Priority 150"]
        RB["Router B<br/>BACKUP<br/>Priority 100"]
    end
    Internet((Internet))
    PC1 & PC2 & PC3 --> SW
    SW --> RA & RB
    RA -.->|owns| VIP
    RB -.->|standby| VIP
    RA & RB --> Internet
    style RA fill:#c8e6c9,stroke:#388e3c,stroke-width:3px
    style RB fill:#fff,stroke:#9e9e9e
    style VIP fill:#ffeb3b,stroke:#f57c00

PlantUML


Protocol message exchange showing neighbor establishment phases.

Router A Router B
β”‚ β”‚
β”‚ 1. Hello (multicast 224.0.0.5) β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β†’β”‚
β”‚ 2. Hello (with A's Router-ID) β”‚
│←───────────────────────────────────────
β”‚ 3. Database Description (DD) β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β†’β”‚
β”‚ 4. Link State Request (LSR) β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β†’β”‚

D2 Clean

D2 Sketch

Hand-crafted

sequenceDiagram
    participant A as Router A<br/>10.0.0.1
    participant B as Router B<br/>10.0.0.2
    rect rgb(227, 242, 253)
        Note over A,B: Phase 1: Hello Exchange
        A->>B: Hello (224.0.0.5)
        B->>A: Hello (I see you)
    end
    rect rgb(255, 243, 224)
        Note over A,B: Phase 2: Database Sync
        A->>B: DBD (LSA summary)
        B->>A: DBD (my LSAs)
        A->>B: LSR (request details)
        B->>A: LSU (full LSA data)
        A->>B: LSAck
    end
    Note over A,B: Full Adjacency Established

PlantUML


Packet processing pipeline through RouterOS filter chains.

Packet Arrives
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ PREROUTING │───▢│ ROUTING │───▢│ FILTER │───▢│ POSTROUTING β”‚
β”‚ (Raw/Mangle)β”‚ β”‚ DECISION β”‚ β”‚ CHAINS β”‚ β”‚ (Mangle/NAT)β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

D2 Clean

D2 Sketch

Hand-crafted

flowchart LR
    A([Packet In]) --> B[PREROUTING]
    B --> C{Routing<br/>Decision}
    C -->|To Router| D[INPUT]
    C -->|Forward| E[FORWARD]
    D --> F[(Local<br/>Process)]
    F --> G[OUTPUT]
    E --> H[POSTROUTING]
    G --> H
    H --> I([Packet Out])
    style A fill:#bbdefb
    style I fill:#c8e6c9
    style B fill:#fff3e0,stroke:#f57c00
    style H fill:#fff3e0,stroke:#f57c00
    style D fill:#c8e6c9,stroke:#388e3c
    style E fill:#c8e6c9,stroke:#388e3c
    style G fill:#c8e6c9,stroke:#388e3c

PlantUML


Diagram TypeBest ToolRunner-upNotes
Network TopologyD2Hand-crafted SVGD2 handles grouping well
VRRP/HAD2 SketchHand-crafted SVGSketch mode adds personality
SequenceMermaidD2Mermaid’s sweet spot
FlowchartD2MermaidD2 has better shapes
ToolProsConsBest For
D2Beautiful, simple syntax, themesRequires build stepNetwork diagrams, flowcharts
D2 SketchUnique look, same syntaxLarge file sizesInformal docs, standout diagrams
MermaidNo build, inline markdownLimited stylingSequence diagrams, quick diagrams
Hand-crafted SVGPixel-perfect controlTime-consuming, hard to maintainHero diagrams, branding
PlantUMLMature, many diagram typesVerbose syntax, external APIUML, complex sequences

Use D2 as the primary tool with these guidelines:

  1. D2 (Clean) - Default for all network topology and flowchart diagrams
  2. D2 Sketch - For conceptual diagrams where hand-drawn feel adds value
  3. Mermaid - Keep for simple sequence diagrams (no build step needed)
  4. Hand-crafted SVG - Reserve for landing page / hero graphics only
Terminal window
# Edit D2 source files in /diagrams/*.d2
# Render to SVG:
d2 diagram.d2 diagram.svg # Clean
d2 --sketch diagram.d2 diagram.svg # Hand-drawn
d2 --theme 1 diagram.d2 diagram.svg # Dark theme

Pick your favorite and let me know!