# Mermaid.js Integration Patterns
JavaScript API integration, HTML embedding, and platform-specific usage.
## HTML/Browser Integration
**Basic CDN Setup:**
```html
flowchart TD
A[Client] --> B[Load Balancer]
B --> C[Server 1]
B --> D[Server 2]
```
**ES Module (Modern):**
```html
```
## NPM/Node.js Integration
**Installation:**
```bash
npm install mermaid
# or
yarn add mermaid
```
**Import and Initialize:**
```javascript
import mermaid from 'mermaid';
mermaid.initialize({
startOnLoad: true,
theme: 'dark',
securityLevel: 'strict'
});
```
**Manual Rendering:**
```javascript
import mermaid from 'mermaid';
const graphDefinition = `
graph TD
A[Start] --> B[Process]
B --> C[End]
`;
const { svg } = await mermaid.render('graphId', graphDefinition);
document.getElementById('container').innerHTML = svg;
```
## React Integration
**Component Wrapper:**
```jsx
import { useEffect, useRef } from 'react';
import mermaid from 'mermaid';
function MermaidDiagram({ chart }) {
const ref = useRef(null);
useEffect(() => {
mermaid.initialize({ startOnLoad: false });
if (ref.current) {
mermaid.render('diagram', chart).then(({ svg }) => {
ref.current.innerHTML = svg;
});
}
}, [chart]);
return ;
}
// Usage
```
**Next.js (App Router):**
```jsx
'use client';
import dynamic from 'next/dynamic';
const Mermaid = dynamic(() => import('./MermaidDiagram'), {
ssr: false
});
export default function Page() {
return ;
}
```
## Vue Integration
**Component:**
```vue
```
## Markdown Integration
**GitHub/GitLab:**
````markdown
```mermaid
graph TD
A[Start] --> B[End]
```
````
**MDX (Next.js/Gatsby):**
```mdx
import Mermaid from './Mermaid';
# Architecture
API
API --> Database
`} />
```
## API Reference
**mermaid.initialize(config)**
Configure global settings.
```javascript
mermaid.initialize({
startOnLoad: true,
theme: 'dark',
logLevel: 3,
securityLevel: 'strict',
fontFamily: 'Arial'
});
```
**mermaid.render(id, graphDefinition, config)**
Programmatically render diagram.
```javascript
const { svg, bindFunctions } = await mermaid.render(
'uniqueId',
'graph TD\nA-->B',
{ theme: 'forest' }
);
```
**mermaid.parse(text)**
Validate syntax without rendering.
```javascript
try {
await mermaid.parse('graph TD\nA-->B');
console.log('Valid');
} catch(e) {
console.error('Invalid:', e);
}
```
**mermaid.run(config)**
Render all diagrams in page.
```javascript
await mermaid.run({
querySelector: '.mermaid',
suppressErrors: false
});
```
## Event Handling
**Click Events:**
```javascript
const graphDefinition = `
flowchart TD
A[Click me] --> B
click A callback "Tooltip text"
`;
window.callback = function() {
alert('Node clicked!');
};
await mermaid.render('graph', graphDefinition);
```
**Interactive URLs:**
```
flowchart TD
A[GitHub] --> B[Docs]
click A "https://github.com"
click B "https://mermaid.js.org" "Open docs"
```
## Advanced Patterns
**Dynamic Theme Switching:**
```javascript
function updateTheme(isDark) {
mermaid.initialize({
theme: isDark ? 'dark' : 'default',
startOnLoad: false
});
// Re-render all diagrams
document.querySelectorAll('.mermaid').forEach(async (el) => {
const code = el.textContent;
const { svg } = await mermaid.render('id', code);
el.innerHTML = svg;
});
}
```
**Lazy Loading:**
```javascript
const observer = new IntersectionObserver((entries) => {
entries.forEach(async (entry) => {
if (entry.isIntersecting) {
const code = entry.target.textContent;
const { svg } = await mermaid.render('id', code);
entry.target.innerHTML = svg;
observer.unobserve(entry.target);
}
});
});
document.querySelectorAll('.mermaid').forEach(el => observer.observe(el));
```
**Server-Side Rendering (SSR):**
```javascript
import { chromium } from 'playwright';
async function renderServerSide(code) {
const browser = await chromium.launch();
const page = await browser.newPage();
await page.setContent(`
${code}
`);
const svg = await page.locator('.mermaid svg').innerHTML();
await browser.close();
return svg;
}
```
## Platform-Specific
**Jupyter/Python:**
Use mermaid.ink API:
```python
from IPython.display import Image
diagram = "graph TD\nA-->B"
url = f"https://mermaid.ink/svg/{diagram}"
Image(url=url)
```
**VS Code:**
Install "Markdown Preview Mermaid Support" extension.
**Obsidian:**
Native support in code blocks:
````markdown
```mermaid
graph TD
A --> B
```
````
**PowerPoint/Word:**
Use mermaid.live editor → Export → Insert image.