🌊 Merval
The world's first zero-dependency Mermaid diagram validator. Instant syntax validation without CLI calls or heavy dependencies.
🎯 Why Merval?
Tired of installing @mermaid-js/mermaid-cli and its 400+ dependencies (Puppeteer, Chromium, etc.) just to validate a simple diagram? Merval gives you instant Mermaid syntax validation with zero dependencies.
- ⚡ Instant: No CLI calls, no external processes
- 🪶 Zero Dependencies: Pure JavaScript, no Puppeteer, no Chromium
- 🎯 100% Compatible: Tested against Mermaid CLI v11.12.0
- 🚀 Lightning Fast: Direct parsing, no rendering overhead
- 🛡️ Type Safe: Built with TypeScript for robust validation
Supported Diagram Types
📦 Installation
npm install @aj-archipelago/merval
yarn add @aj-archipelago/merval
pnpm add @aj-archipelago/merval
🚀 Quick Start
import { validateMermaid } from '@aj-archipelago/merval';
const result = validateMermaid(`
graph TD
A[Start] --> B{Decision}
B -->|Yes| C[Process A]
B -->|No| D[Process B]
C --> E[End]
D --> E[End]
`);
console.log(result.isValid);
console.log(result.diagramType);
console.log(result.errors);
Mermaid Version Compatibility
This validator is tested against Mermaid CLI v11.12.0 to ensure 100% compatibility. The library tracks which version it was validated against and can warn about potential compatibility issues.
Version Information
import { getMermaidVersionInfo, isMermaidVersionSupported } from '@aj-archipelago/merval';
const versionInfo = getMermaidVersionInfo();
console.log(versionInfo);
console.log(isMermaidVersionSupported("11.12.0"));
console.log(isMermaidVersionSupported("12.0.0"));
Version-Aware Validation
import { validateMermaid } from '@aj-archipelago/merval';
const result = validateMermaid(mermaidCode);
const result = validateMermaid(mermaidCode, "12.0.0");
if (!result.isValid && result.errors.some(e => e.code === 'VERSION_MISMATCH')) {
console.log('Warning: This validator was not tested against Mermaid 12.0.0');
}
Updating Mermaid Version Compatibility
When updating this validator to work with a new Mermaid version, use the provided script:
npm run update-version 12.0.0 2024-11-01
node scripts/update-version.js 12.0.0 2024-11-01
This script will:
- Update
package.json with the new version info
- Update
src/version.ts with the new version constants
- Build the project
- Run all tests
- Provide next steps for full compatibility testing
API
import { validateMermaid, isValidMermaid, getDiagramType } from '@aj-archipelago/merval';
const result = validateMermaid(`
graph TD
A[Start] --> B{Decision}
B -->|Yes| C[Process A]
B -->|No| D[Process B]
C --> E[End]
D --> E[End]
`);
console.log(result.isValid);
console.log(result.diagramType);
console.log(result.errors);
const isValid = isValidMermaid(mermaidCode);
const diagramType = getDiagramType(mermaidCode);
const result = validateMermaid(mermaidCode, "12.0.0");
if (!result.isValid && result.errors.some(e => e.code === 'VERSION_MISMATCH')) {
console.log('Version compatibility warning');
}
Error Format
{
isValid: false,
diagramType: 'flowchart',
errors: [
{
line: 2,
column: 15,
message: "Missing arrow between nodes",
code: "MISSING_ARROW",
suggestion: "Add '-->' to connect nodes"
}
]
}
💡 Why Merval?
The Problem with Traditional Mermaid Validation
npm install @mermaid-js/mermaid-cli
The Merval Solution
npm install merval
Merval gives you the same validation accuracy as Mermaid CLI but with:
- Zero dependencies - no Puppeteer, no Chromium, no native compilation
- Instant validation - no CLI process spawning, no file I/O
- Same accuracy - 100% compatible with Mermaid CLI v11.12.0
- TypeScript support - full type safety out of the box
Implementation Strategy
- Lexical Analysis: Tokenize input into meaningful components
- Syntax Analysis: Build AST and validate structure
- Semantic Validation: Check relationships and references
- Diagram-Specific Rules: Each type has unique validation
Architecture
src/
├── lexer.js # Tokenize input
├── parser.js # Parse tokens into AST
├── validators/
│ ├── flowchart.js # Flowchart-specific validation
│ ├── sequence.js # Sequence diagram validation
│ ├── xychart.js # xychart-beta validation
│ └── ...
├── ast/ # AST node definitions
└── index.js # Main API
License
MIT - Compatible with Mermaid.js MIT license
Built with 💖 by diagram enthusiasts for diagram enthusiasts.