← Blog

Activar el soporte de Mermaid en Hugo

Mermaid es una librería de JavaScript que permite crear diagramas a partir de texto usando una sintaxis tipo Markdown. La ventaja principal es la simplicidad: en lugar de gestionar imágenes o herramientas visuales, escribes código que se transforma automáticamente en diagramas. Soporta flowcharts, secuencias, diagramas de Gantt, clases y entidad-relación.

Es especialmente útil en documentación técnica, wikis y repositorios de código —Forgejo, GitHub, GitLab y Obsidian ya lo soportan de forma nativa— porque mantiene los diagramas sincronizados con el texto de forma ligera y versionable.

Paso 1: plantilla de renderizado

Crea el archivo layouts/_default/_markup/render-codeblock-mermaid.html:

<pre class="mermaid">
  {{- .Inner | htmlEscape | safeHTML }}
</pre>

{{ .Page.Store.Set "mermaidEnable" true }}

Esto envuelve los bloques de código detectados en un <pre> con la clase mermaid. La variable .Inner contiene el contenido del bloque; htmlEscape evita la interpretación de caracteres HTML peligrosos y safeHTML le indica a Hugo que inserte el contenido sin escapado adicional. Además, el Page Store marca si la página actual usa Mermaid.

Paso 2: cargar la librería solo cuando hace falta

Para no cargar Mermaid en todas las páginas, crea layouts/partials/extended_head.html:

{{ if .Store.Get "mermaidEnable" }}
<script type="module">
  import mermaid from "https://cdn.jsdelivr.net/npm/[email protected]/+esm";
</script>
<script>
  mermaid.initialize({
    startOnLoad: true,
  });
</script>
{{ end }}

Esto importa la librería desde jsDelivr CDN y la inicializa automáticamente al cargar la página.

Paso 3: usar Mermaid en el contenido

Ya puedes insertar bloques de código con el identificador de lenguaje mermaid en cualquier página:

```mermaid
graph TD;
  A-->B;
  A-->C;
  B-->D;
  C-->D;
```

El resultado es un diagrama de flujo renderizado directamente en el navegador, sin imágenes externas ni dependencias de build:

graph TD;
  A-->B;
  A-->C;
  B-->D;
  C-->D;