Install via npm:
npm install @kevingimbel/eleventy-plugin-mermaidInclude it in your .eleventy.js config file:
import pluginMermaid from "@kevingimbel/eleventy-plugin-mermaid";
export default function(eleventyConfig) {
eleventyConfig.addPlugin(pluginMermaid);
};Add the JavaScript code to your page (before the closing body tag!)
{% mermaid_js %}
</body>
</html>The {% mermaid_js %} code will render the following:
<script type="module">import mermaid from "${src}";mermaid.initialize({startOnLoad:true});</script>${src}contains the script source as configured (see below). You can also skip this step and provide Mermaid as part of your JS bundle.
Global config options, set in eleventy.js.
| Option | Type | Default | Description |
|---|---|---|---|
mermaid_js_src |
String | https://unpkg.com/mermaid@10/dist/mermaid.esm.min.mjs |
source from where Mermaid will be loaded |
html_tag |
String | pre |
The wrapping HTML tag which the graph is rendered inside |
extra_classes |
String | "" |
Extra CSS classes assigned to the wrapping element |
mermaid_config |
String | {startOnLoad: true} |
Define custom settings to be passed to mermaid.initialize |
import pluginMermaid from "@kevingimbel/eleventy-plugin-mermaid";
export default function(eleventyConfig) {
eleventyConfig.addPlugin(pluginMermaid, {
// load mermaid from local assets directory
mermaid_js_src: '/assets/mermaid.min.mjs',
html_tag: 'div',
extra_classes: 'graph',
mermaid_config: {
'startOnLoad': true,
'theme': 'dark'
}
});
};It's possible to configure each graph using mermaid's Inline configuration:
```mermaid
%%{init: {'theme':'forest'}}%%
graph TD
A[Public web] -->|HTTP request| B(Firewall)
B --> C{Is port open}
C -->|Yes| D[App]
C -->|No| E[Return error]
```
The plugin extends the 11ty markdown highlighter so mermaid diagrams can be written inline via code blocks marked with mermaid:
```mermaid
graph TD;
A[Want graphs in 11ty] -->|Search Plugin| B(Found plugin);
B --> C{Use plugin?};
C -->|Yes| D[NICE GRAPHS];
C -->|No| E[NO GRAPHS];
```The code is mainly taken from https://cornishweb.com/index.php/2019/05/25/using-mermaid-js-with-eleventy-io/.
- generate SVG server-side during build
- chore: Update default Mermaid Version to 11.11.0 by @khill-fbmc
- chore: bump 11ty to 3.2.1
- chore: Changed module syntax to ESM
- chore: Replace older
htmlencodewith newerhelibrary
- feat: allow setting all configurations via mermaid_config when initializing the plugin
- fix: use
options?.instead ofoptionsin caseoptionsisn't defined
- Fix closing pre tag in fallback output #5 by @BigBlueHat
- Add
document.addEventListener('DOMContentLoaded')around mermaidJS code - Add
asynctag to script - Pin mermaidJS version to
10to avoid compatibility issues in the future. This can be overwritten by settingmermaid_js_srcand only affects users who use{% mermaid_js %}shortcode.
MermaidJS switched to ESM only in version 10, which broke the old JavaScript path we used to get the script by default.
This version now uses the ESM module.