Skip to content

Markdown-it plugin to create uml diagrams from text, based on plantuml, mermaid, etc.

License

Notifications You must be signed in to change notification settings

manastalukdar/markdown-it-textual-uml

Repository files navigation

markdown-it-textual-uml

  1. Overview
  2. UML examples
    1. PlantUML
    2. DOT
    3. ditaa
    4. mermaid
  3. Installation
  4. Usage
    1. Additional steps for mermaid
  5. Development
  6. References
  7. License

Overview

npm NPM npm GitHub Super-Linter

[More project metadata badges here. More CI/CD badges here.]

This is a markdown-it markdown parser plugin to create uml diagrams from text, based on plantuml, mermaid, etc.

At this point the following textual uml offerings are supported:

UML Offering Markdown fence identifier
PlantUML plantuml
DOT dot
ditaa ditaa
mermaid mermaid

UML examples

PlantUML

```plantuml
Bob -> Alice : hello
```

DOT

```dot
digraph example1 {
    1 -> 2 -> { 4, 5 };
    1 -> 3 -> { 6, 7 };
}
```

ditaa

```ditaa
+--------+   +-------+    +-------+
|        +---+ ditaa +--> |       |
|  Text  |   +-------+    |diagram|
|Document|   |!magic!|    |       |
|     {d}|   |       |    |       |
+---+----+   +-------+    +-------+
  :                         ^
  |       Lots of work      |
  +-------------------------+
```

mermaid

```mermaid
graph TD;
    A-->B;
    A-->C;
    B-->D;
    C-->D;
```

Installation

node.js, browser:

npm install markdown-it-textual-uml --save

Usage

const md = require('markdown-it')()
           .use(require('markdown-it-textual-uml'));

Or,

import markdownItTextualUml from 'markdown-it-textual-uml'
const md = require('markdown-it')()
           .use(markdownItTextualUml);

Additional steps for mermaid

For mermaid, you have to include the mermaid js file in your application and initialize it after the window has loaded. Just using this plugin is not enough to ensure that the diagram is rendered correctly.

Note: mermaid js has a dependency on the browser window being loaded before it can initialize. Related GitHub issue.

So you should have the following in your html page in order for the mermaid text definitions to be translated into svg.

<script src="mermaid.min.js"></script>
<script>mermaid.initialize({startOnLoad:true});</script>

Details here.

When using some sort of framework, be aware that mermaid.initialize would have to be called after the page has loaded. For example, with vue.js or nuxt.js, this could look like:

<script setup>
import mermaid from 'mermaid'
mermaid.initialize({ startOnLoad: false });
await mermaid.run()
}
</script>

Development

It is highly recommended to use VS Code.

I have an open issue to make development, testing and deployments easier but for now following steps have to be followed:

  1. Make changes in this project.
  2. Update version in package.json.
  3. npm run build
  4. npm run pack
  5. In a separate test project that includes this npm package:
    1. Change the entry in its package.json to: "markdown-it-textual-uml": "file:./markdown-it-textual-uml-0.1.3.tgz". Change version (last released version) to version from step 2.
    2. Run npm cache clean --force.
    3. Delete its package-lock.json.
    4. Delete folder for markdown-it-textual-uml from within the node_modules folder.
    5. Run npm install.

Once we have the changes tested out, revert back all changes in the test project.

Now, in this project:

  1. Run npm run publish.
    1. https://simplernerd.com/update-published-npm-package/
  2. Merge develop to main using Github PR.
  3. Create a GitHub release with the semantically versioned tag against main.
  4. Pull repo to local (optional) if you have main branch locally.

References

Here are some alternative npm packages:

License

MIT