How to¶
Choose the responsive policy¶
Every rendered diagram sits in a scrollable figure. The :responsive: option decides what the SVG itself does inside that figure:
fitis the default. It keeps the SVG’s build-time aspect ratio but lets the browser scale the diagram down to the content column.preservekeeps the SVG at its intrinsic Mermaid-rendered width. If the diagram is wider than the column, the figure scrolls horizontally.
Use fit for diagrams that remain readable when scaled: small flows, state diagrams, and short sequence diagrams. Use preserve for diagrams where scale-down would make labels unreadable, such as dense architecture maps or compatibility matrices.
:::{mermaid}
:caption: Dense architecture map.
:alt: subsystem ownership and data flow
:name: architecture-map
:responsive: preserve
flowchart LR
api --> planner --> executor --> sinks
planner --> cache
executor --> audit
:::
fit and preserve do not rewrite the Mermaid graph. If a wide flowchart LR turns into a hard-to-read strip on phones, split it into smaller diagrams or use a top-to-bottom layout. Reach for preserve when the wide view is the useful artifact.
Install the renderer¶
Rendering shells out to mmdc, so the docs toolchain needs Node. Install it as a dev dependency:
$ pnpm add -D @mermaid-js/mermaid-cli
The extension finds mmdc from the mermaid_cmd config value, then <confdir>/node_modules/.bin/mmdc, then PATH. mmdc drives a headless Chrome through puppeteer — build-time rendering costs a Node and Chrome toolchain in CI, which consumers of your published docs never pay.
In a container, set PUPPETEER_EXECUTABLE_PATH to your Chrome (the generated puppeteer config keeps the --no-sandbox args), or point mermaid_puppeteer_config at your own config file.
How rendering behaves¶
Each diagram renders twice — a light and a dark SVG — and CSS on body[data-theme] shows the matching one, so the theme toggle works with no JavaScript and no layout shift. The HTML figure carries gp-sphinx-mermaid--fit or gp-sphinx-mermaid--preserve, plus data-mermaid-responsive, data-mermaid-width, and data-mermaid-height attributes for downstream styling or audits. Rendered SVGs are cached by content hash under <confdir>/_mermaid_cache, which lives outside _build and survives rm -rf docs/_build, so a clean rebuild re-renders nothing unchanged.
If mmdc is missing or fails, the build still succeeds: the diagram degrades to its escaped source text with a single warning, and non-HTML builders emit a [diagram: <alt>] stand-in.