Famously an picture is worth a thousand words. That may or may not be true but a diagram can definitely help explain something. There’s plenty of software and online tools to help with this but, in my experience, making a diagram can still take a lot of time. It’s good to do but if you could do it faster your more likely to make one.
Mermaid is a diagramming tool that also supports scripts. It can be integrated into markdown and is available on github so you can see the diagrams in your documentation directly. Handily for me there is also a WordPress block, MerPress. I also like the idea of generating these automatically in, say, as part of documentation.
Different chart types can have different syntax depending on the needs of the chart. That’s useful but it looks like it leads to some inconsistencies. Here are a bunch of examples but there’s even more on the Mermaid site.
Boxes and lines
Graphs
Lets start with something basic: nodes, edges, arrows and labels:
```mermaid graph LR; A[Facing North]--->B A-->C B(Turn right)--->F[Facing East] C(Turn left)-->D D(Turn left)-->E E(Turn left)-->F ```
becomes:
graph LR; A[Facing North]--->B A-->C B(Turn right)--->F[Facing East] C(Turn left)-->D D(Turn left)-->E E(Turn left)-->F
Flowchart
Lets make it slightly more complicated:
```mermaid
flowchart LR
A[Facing North]-->B
B{Waste time}-->|No| C
B-->|Yes| D
C(Turn right)--->G[Facing East]
D(Turn left)-->E
E(Turn left)-->F
F(Turn left)-->G
```flowchart LR
A[Facing North]-->B
B{Waste time}-->|No| C
B-->|Yes| D
C(Turn right)--->G[Facing East]
D(Turn left)-->E
E(Turn left)-->F
F(Turn left)-->GState diagram
```mermaid stateDiagram-v2 direction LR [*] --> North North --> East : Right North --> West : Left West --> South : Left South --> East : Left East --> [*] ```
stateDiagram-v2 direction LR [*] --> North North --> East : Right North --> West : Left West --> South : Left South --> East : Left East --> [*]
Mathematical
Pie charts
These could be useful although they may be limited compared to a chart specific WordPress plugin.
```mermaid pie title Household pet ownership in UK "Dogs" : 31 "Cats" : 26 "Rabbits" : 2.8 "Birds" : 2.3 "Hamsters" : 2.1 "Guinea pigs" : 1.8 ```
pie title Household pet ownership in UK "Dogs" : 31 "Cats" : 26 "Rabbits" : 2.8 "Birds" : 2.3 "Hamsters" : 2.1 "Guinea pigs" : 1.8
Bar chart
```mermaid xychart-beta title "Historic pet ownership in UK" x-axis [2011-12, 2012-13, 2013-14, 2014-15, 2015-16, 2016-17, 2017-18, 2018-19, 2019-20] y-axis "Percentage pet ownership" 0 --> 100 bar [47, 48, 47, 46, 40, 44, 45, 40, 41] line [47, 48, 47, 46, 40, 44, 45, 40, 41] ```
xychart-beta title "Historic pet ownership in UK" x-axis [2011-12, 2012-13, 2013-14, 2014-15, 2015-16, 2016-17, 2017-18, 2018-19, 2019-20] y-axis "Percentage pet ownership" 0 --> 100 bar [47, 48, 47, 46, 40, 44, 45, 40, 41] line [47, 48, 47, 46, 40, 44, 45, 40, 41]
Quadrant chart
```mermaid quadrantChart title Which pet to get? x-axis Less work --> More work y-axis Less cute --> More cute quadrant-1 Maybe quadrant-2 Yes quadrant-3 Maybe quadrant-4 No Toad: [0.45, 0.23] Dog: [0.57, 0.69] Snake: [0.78, 0.34] Frog: [0.40, 0.34] Cat: [0.35, 0.78] ```
quadrantChart title Which pet to get? x-axis Less work --> More work y-axis Less cute --> More cute quadrant-1 Maybe quadrant-2 Yes quadrant-3 Maybe quadrant-4 No Toad: [0.45, 0.23] Dog: [0.57, 0.69] Snake: [0.78, 0.34] Frog: [0.40, 0.34] Cat: [0.35, 0.78]
Time based diagram
Sequence diagram
```mermaid
sequenceDiagram
User->>Browser: Enters login credentials
Browser->>WebServer: Sends login request
WebServer->>Database: Verifies credentials
alt Credentials valid
    Database-->>WebServer: Returns user data
    WebServer-->>Browser: Sends authentication token
    Browser-->>User: Displays successful login
else Credentials invalid
    Database-->>WebServer: Returns error
    WebServer-->>Browser: Sends authentication failure
    Browser-->>User: Displays error message
end
```sequenceDiagram
User->>Browser: Enters login credentials
Browser->>WebServer: Sends login request
WebServer->>Database: Verifies credentials
alt Credentials valid
    Database-->>WebServer: Returns user data
    WebServer-->>Browser: Sends authentication token
    Browser-->>User: Displays successful login
else Credentials invalid
    Database-->>WebServer: Returns error
    WebServer-->>Browser: Sends authentication failure
    Browser-->>User: Displays error message
endGantt chart
```mermaid gantt title Website Redesign Project dateFormat YYYY-MM-DD section Planning Requirements Gathering :a1, 2024-06-01, 5d Project Plan :a2, after a1, 3d section Design Wireframe Design :b1, 2024-06-07, 4d Prototype Design :b2, after b1, 5d section Development Frontend Development :c1, 2024-06-16, 7d Backend Development :c2, after c1, 7d section Testing Testing and Fixes :d1, 2024-06-30, 5d section Deployment Deployment :e1, 2024-07-06, 2d ```
gantt title Website Redesign Project dateFormat YYYY-MM-DD section Planning Requirements Gathering :a1, 2024-06-01, 5d Project Plan :a2, after a1, 3d section Design Wireframe Design :b1, 2024-06-07, 4d Prototype Design :b2, after b1, 5d section Development Frontend Development :c1, 2024-06-16, 7d Backend Development :c2, after c1, 7d section Testing Testing and Fixes :d1, 2024-06-30, 5d section Deployment Deployment :e1, 2024-07-06, 2d
Timeline
```mermaid
timeline
2002 : LinkedIn
2004 : Facebook
     : Google
2005 : Youtube
2006 : Twitter
```timeline
2002 : LinkedIn
2004 : Facebook
     : Google
2005 : Youtube
2006 : TwitterGit graph
```mermaid gitGraph commit id: "Initial commit" commit id: "Added basic structure" branch develop checkout develop commit id: "Implemented feature" commit id: "Fixed bug in feature" checkout main merge develop commit id: "Refactored codebase" commit id: "Released v2.0.0" ```
gitGraph commit id: "Initial commit" commit id: "Added basic structure" branch develop checkout develop commit id: "Implemented feature" commit id: "Fixed bug in feature" checkout main merge develop commit id: "Refactored codebase" commit id: "Released v2.0.0"
Relationship diagram
Class diagram
```mermaid
classDiagram
direction LR
class Car {
    - make: string
    - model: string
    - year: int
    + accelerate(): void
    + brake(): void
}
class Person {
    - name: string
    - age: int
    + walk(): void
    + talk(message: string): void
}
class Engine {
    - cylinders: int
    - horsepower: int
    + start(): void
    + stop(): void
}
Car "1" -- "1" Engine : has
Person <-- Car : drives
```classDiagram
direction LR
class Car {
    - make: string
    - model: string
    - year: int
    + accelerate(): void
    + brake(): void
}
class Person {
    - name: string
    - age: int
    + walk(): void
    + talk(message: string): void
}
class Engine {
    - cylinders: int
    - horsepower: int
    + start(): void
    + stop(): void
}
Car "1" -- "1" Engine : has
Person <-- Car : drivesEntity-relationship diagram
```mermaid
erDiagram
CUSTOMER }|..|{ DELIVERY-ADDRESS : has
CUSTOMER ||--o{ ORDER : places
CUSTOMER ||--o{ INVOICE : "liable for"
DELIVERY-ADDRESS ||--o{ ORDER : receives
INVOICE ||--|{ ORDER : covers
ORDER ||--|{ ORDER-ITEM : includes
PRODUCT-CATEGORY ||--|{ PRODUCT : contains
PRODUCT ||--o{ ORDER-ITEM : "ordered in"
```erDiagram
CUSTOMER }|..|{ DELIVERY-ADDRESS : has
CUSTOMER ||--o{ ORDER : places
CUSTOMER ||--o{ INVOICE : "liable for"
DELIVERY-ADDRESS ||--o{ ORDER : receives
INVOICE ||--|{ ORDER : covers
ORDER ||--|{ ORDER-ITEM : includes
PRODUCT-CATEGORY ||--|{ PRODUCT : contains
PRODUCT ||--o{ ORDER-ITEM : "ordered in"Mindmap
```mermaid
mindmap
  Overview
    Project Goals
      Improve User Interface
      Enhance Performance
    Timeline
      Q1 2024
      Q2 2024
    Development
      Frontend
        UI Design
        Client-side Logic
      Backend
        Server Setup
        Database Integration
    Testing
      Unit Testing
      Integration Testing
    Deployment
      Server Deployment
      Database Migration
```mindmap
  Overview
    Project Goals
      Improve User Interface
      Enhance Performance
    Timeline
      Q1 2024
      Q2 2024
    Development
      Frontend
        UI Design
        Client-side Logic
      Backend
        Server Setup
        Database Integration
    Testing
      Unit Testing
      Integration Testing
    Deployment
      Server Deployment
      Database MigrationIn the end
I haven’t had a chance to use this in anger. It definitely has a few rough edges. There are some visual glitches and more consistency across types would be nice. However this was really quick which makes it easier to throw something in. It’s definitely got some possibilities and I’ll try to use it in the blog.
Leave a Reply