Skip to content

How to setup Mermaid Plugin for VitePress

Introduction

We publish this blog with VitePress and we use Mermaid for diagrams. This guide shows the shortest path to rendering Mermaid in a VitePress blog using vitepress-plugin-mermaid.

Overview

You will:

  • Install the Mermaid plugin and dependencies.
  • Wrap the VitePress config with withMermaid.
  • Verify rendering with three quick examples.

Prerequisites

  • Node 18+
  • VitePress 1.x project (we stay on 1.x because it is the stable baseline for the blog; once 2.x is stable, this guide will be updated)

Step 1: Install Mermaid + plugin

npm i vitepress-plugin-mermaid mermaid @mermaid-js/mermaid-mindmap -D

Working versions in this repo (latest on npm as of 2026-02-25):

jsonc
{
  // Latest versions checked on 2026-02-25.
  "devDependencies": {
    "@mermaid-js/mermaid-mindmap": "^9.3.0",
    "mermaid": "^11.12.3",
    "vitepress": "^1.6.4",
    "vitepress-plugin-mermaid": "^2.0.17"
  }
}

Step 2: Wrap the VitePress config

In app/.vitepress/config.mjs:

javascript
import { defineConfig } from 'vitepress'
import { withMermaid } from 'vitepress-plugin-mermaid'

export default withMermaid(
  defineConfig({
    // your VitePress config
  })
)

Step 3: Add Mermaid diagrams (3 examples)

Each diagram is just Mermaid source code inside a fenced block. You can write these by hand or use AI to draft the Mermaid syntax and then edit it.

Example 1: Request/response flow

Source:

text
graph LR
  A[Client] -->|HTTP Request| B(NGINX Frontend)
  B -->|Proxied HTTP Request| C[Upstream App Server]
  C -->|Proxied HTTP Response| B
  B -->|HTTP Response| A

Rendered:

Example 2: Sequence diagram

Source:

text
sequenceDiagram
  participant C as Client
  participant N as NGINX
  participant U as Upstream
  C->>N: HTTP Request
  N->>U: Proxy Request
  U-->>N: Response
  N-->>C: Response

Rendered:

Example 3: Mindmap

Source:

text
mindmap
  root((Infra Docs))
    VitePress
      config
      theme
    Mermaid
      flowcharts
      sequences
    Ops
      runbooks
      incidents

Rendered:

Verify it works

Run the dev server and open the page:

npm run docs:dev

If you see rendered diagrams instead of code fences, you are done.

Troubleshooting VitePress Uncaught SyntaxError: ambiguous indirect export: default

If you hit this error, it is tied to older version combinations of the plugin and VitePress:

Uncaught SyntaxError: ambiguous indirect export: default

Track the discussion here: vitepress-plugin-mermaid issue #33

The reliable fix is to add a vite section with:

  • optimizeDeps include list
  • resolve.alias for the dependency that breaks the export

If you are documenting infra and agent workflows with VitePress, these guides are often useful alongside diagrams:

Last updated:

Advanced Stack