# Diagram engine versions Diagrams are drawn by three different things: your browser, our rendering service, or a renderer you host yourself. Which one applies depends on the language. Engine versions are pinned deliberately. An engine that upgrades itself would silently change how existing diagrams look, and a diagram that changes on its own is worse than one that is slightly out of date. --- ## When you need this page * A diagram that renders differently from the same source elsewhere. * Planning a self-hosted renderer and needing compatibility details. * Checking whether a syntax feature is available yet. --- ## The detail | **Field** | **What it does** | | -------------------- | -------------------------------------------------------------------- | | Browser | draw.io and Excalidraw draw entirely in your browser. | | Rendering service | Every text language: Mermaid, PlantUML, Graphviz, D2 and the rest. | | BPMN and DMN editors | Browser-based modellers, rendering the standard files. | | Self-hosted | Any Kroki-compatible server you point us at, for the text languages. | --- ## What draws each language | **Language** | **Drawn by** | | ---------------------------------------------------------- | --------------------------------------------------------- | | draw.io, Excalidraw | Your browser | | BPMN, DMN | Your browser, in the modeller | | Mermaid, PlantUML, C4, Structurizr | Rendering service | | Graphviz, D2, Nomnoml, Pikchr | Rendering service | | DBML, ERD | Rendering service | | Vega, Vega-Lite | Rendering service | | BlockDiag family, Bytefield, WaveDrom, WireViz, Symbolator | Rendering service | | Ditaa, Svgbob | Rendering service | | TikZ | Rendering service, and disabled until an admin enables it | 📝 **The rendering service is Kroki-compatible.** That is what makes the self-hosted option possible: point us at your own Kroki server and the same source renders inside your network. --- ## A few things that catch people out * Pinned versions mean a syntax feature released upstream this week may not render yet. * Browser-rendered languages behave differently for anonymous readers, who get a stored image instead. * A self-hosted renderer must be Kroki-compatible. Setup is covered in [Administration](https://help.gocapable.com/diagrams/administration.html). --- ## Related [File types and extensionsWhat we recognise, and how the language is decided.](https://help.gocapable.com/diagrams/file-types-and-extensions.html) [Rendering limitsSizes, timeouts, and what anonymous readers see.](https://help.gocapable.com/diagrams/rendering-limits.html) [ExamplesWorking diagrams you can copy.](https://help.gocapable.com/diagrams/examples.html) --- _The page you only need when something is odd._