What Is It All About
I was designing a new project, and I wanted to document my system design on this site. I know about Mermaid as a text and code based diagramming tool, so I thought why not just use that on my site.
At first I found a plugin called jekyll-mermaid
that allows me to use the mermaid
tag and it will automatically
render the diagrams. I tried it but it didn’t work, because the plugin uses <script src>
directly to inject the
mermaid.js
source, but apparently there’s no single-file mermaid.js
source available on the CDN.
So, again, I had to think of an alternative solution. At first I just created a _includes/mermaid.html
file that just
imports the mermaid.js
source like this:
After that, I can include it in the _layouts/default.html
:
And when I need to render Mermaid diagrams, I just write the code:
It’s all good. But what if, I can reuse this piece of code in other Jekyll sites? So I turned it into a plugin, it’s a deviation from original goal, again. (laughs)
Oh, but I added a twist. Instead of just using the default theme, I added a configuration option to change some theme variables for a particular diagram.
Mermaid diagrams with Coffee Brew Apps theme.
Examples
Here’re some examples taken directly from Mermaid documentation, and they look beautiful (I’m referring to the diagram, not the color scheme).
Flowchart
%%{ init: { 'theme': 'base', 'themeVariables': { "primaryColor": "#f4e3d7", "primaryTextColor": "#502d16", "primaryBorderColor": "#784421", "lineColor": "#784421", "secondaryColor": "#a05a2c", "tertiaryColor": "#c87137" } } }%% graph TD; A-->B; A-->C; B-->D; C-->D;
Sequence Diagram
%%{ init: { 'theme': 'base', 'themeVariables': { "primaryColor": "#f4e3d7", "primaryTextColor": "#502d16", "primaryBorderColor": "#784421", "lineColor": "#784421", "secondaryColor": "#a05a2c", "tertiaryColor": "#c87137" } } }%% sequenceDiagram participant Alice participant Bob Alice->>John: Hello John, how are you? loop Healthcheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts
prevail! John-->>Alice: Great! John->>Bob: How about you? Bob-->>John: Jolly good!
Gantt Diagram
%%{ init: { 'theme': 'base', 'themeVariables': { "primaryColor": "#f4e3d7", "primaryTextColor": "#502d16", "primaryBorderColor": "#784421", "lineColor": "#784421", "secondaryColor": "#a05a2c", "tertiaryColor": "#c87137" } } }%% gantt dateFormat YYYY-MM-DD title Adding GANTT diagram to mermaid excludes weekdays 2014-01-10 section A section Completed task :done, des1, 2014-01-06,2014-01-08 Active task :active, des2, 2014-01-09, 3d Future task : des3, after des2, 5d Future task2 : des4, after des3, 5d
Class Diagram
%%{ init: { 'theme': 'base', 'themeVariables': { "primaryColor": "#f4e3d7", "primaryTextColor": "#502d16", "primaryBorderColor": "#784421", "lineColor": "#784421", "secondaryColor": "#a05a2c", "tertiaryColor": "#c87137" } } }%% classDiagram Class01 <|-- AveryLongClass : Cool Class03 *-- Class04 Class05 o-- Class06 Class07 .. Class08 Class09 --> C2 : Where am i? Class09 --* C3 Class09 --|> Class07 Class07 : equals() Class07 : Object[] elementData Class01 : size() Class01 : int chimp Class01 : int gorilla Class08 <--> C2: Cool label
Git Graph
%%{ init: { 'theme': 'base', 'themeVariables': { "primaryColor": "#f4e3d7", "primaryTextColor": "#fff", "primaryBorderColor": "#784421", "lineColor": "#784421", "secondaryColor": "#a05a2c", "tertiaryColor": "#c87137", "secondaryTextColor": "#fff" } } }%% gitGraph commit commit branch develop commit commit commit checkout main commit commit
ERD
%%{ init: { 'theme': 'base', 'themeVariables': { "primaryColor": "#f4e3d7", "primaryTextColor": "#502d16", "primaryBorderColor": "#784421", "lineColor": "#784421", "secondaryColor": "#a05a2c", "tertiaryColor": "#deaa87" } } }%% erDiagram CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains CUSTOMER }|..|{ DELIVERY-ADDRESS : uses
User Journey Diagram
%%{ init: { 'theme': 'base', 'themeVariables': { "primaryColor": "#f4e3d7", "primaryTextColor": "#502d16", "primaryBorderColor": "#784421", "lineColor": "#784421", "secondaryColor": "#deaa87", "tertiaryColor": "#c87137" } } }%% journey title My working day section Go to work Make tea: 5: Me Go upstairs: 3: Me Do work: 1: Me, Cat section Go home Go downstairs: 5: Me Sit down: 5: Me
More About The Plugin
You can find out more about the plugin at the project page. Link is included in the references. Hope it will be helpful for you!