MPD: Mermaid Presentation DSL
Describe camera moves, highlights, and overlays alongside your Mermaid diagrams using a small, purpose-built DSL.
Finsteps adds a presentation runtime and MPD DSL on top of Mermaid, giving you camera moves, overlays, navigation, and an editor that stay in sync with your diagrams.
Built around presentMermaid(), MPD, and a
controller API that works in both static sites and live editors.
docs/assets/finsteps-hero.png
A small, focused runtime that turns static diagrams into guided walkthroughs.
Describe camera moves, highlights, and overlays alongside your Mermaid diagrams using a small, purpose-built DSL.
A typed controller with next,
prev, goto, and events you can
bind to your own UI or host frameworks.
Accessors, hooks, and dynamic AST updates (per ADR-0008) make it easy to embed Finsteps in live editors without hacks.
Built-in camera handle and overlay primitives for zooming,
panning, and annotating regions via data-id.
Works with plain HTML, React, Reveal.js, or your own host framework—wherever Mermaid can render.
Backed by ADRs and requirements: MPD (ADR-0001), rendering lifecycle (ADR-0003), editor refactoring (ADR-0008).
Finsteps parses MPD into a PresentationAst and
wires it into a MermaidController. The controller
drives camera, overlays, and bindings on top of Mermaid's SVG
output.
Read the design docs: ADR-0001, ADR-0003, ADR-0008. See also: MPD Grammar, JSON Schemas.
// Minimal presentMermaid usage
import { presentMermaid } from
"https://cdn.jsdelivr.net/gh/cablepull/finsteps@v0.4.4/dist/finsteps.esm.min.js";
const controller = await presentMermaid({
mountEl: document.getElementById("diagram-mount"),
mermaidText: `
flowchart LR
A[User] --> B[Finsteps] --> C[Diagram]
`,
mpdText: `
mpd 1.0
deck {
scene default {
step overview {
camera fit(target: dataId("A"))
}
}
}
`
});
Explore Finsteps running on different diagram types and host environments.
Edit Mermaid + MPD side-by-side and drive the controller.
Step through a system diagram with camera moves and overlays.
Built-in UI controls for navigation and camera operations.
Size, theme, orientation, and playback speed options.
Multiple diagrams in a Reveal.js presentation deck.
Declarative HTML API with data-finsteps attributes.
Order processing flow with participants and messages.
Inheritance hierarchy and composition relationships.
State machine with transitions and nested states.
Entity-relationship model for e-commerce system.
Device usage distribution with animated transitions.
Signup and onboarding flow with engagement scores.
Branch structure, commits, and merge workflow.
Project timeline with phases and task highlighting.
Requirements and their relationships to functions.
System boundaries and external interactions.
System containers and their relationships.
Internal components within containers.
Simple decision flow process blocks.
Software release history across versions.
Market positioning across four quadrants.
Hierarchical mindmap with node targeting.
Chart with labels and series targeting.
Kanban board with columns and tasks.
Network packet structure with layer labels.
Multi-axis radar chart with metric labels.
Flow diagram with node targeting.
Hierarchical treemap with group labels.
ZenUML sequence diagram with participant targeting.
Strategic map showing evolution and dependencies (requires tractorjuice fork).
Use Finsteps directly from jsDelivr CDN, or clone the repository to run examples locally.
Load Finsteps directly in your HTML with no build step:
https://cdn.jsdelivr.net/gh/cablepull/finsteps@latest/dist/finsteps.esm.min.js
https://cdn.jsdelivr.net/gh/cablepull/finsteps@v0.4.4/dist/finsteps.esm.min.js
Note: You must load Mermaid.js separately before using Finsteps. See README for complete usage examples.
To experiment locally or contribute:
run-example.sh).