- beautiful-mermaid es una herramienta ultrarrápida basada en TypeScript para renderizar diagramas Mermaid como SVG o arte ASCII
- Soporta 5 tipos de diagramas (Flowchart, State, Sequence, Class, ER) y funciona tanto en la terminal como en el navegador
- Con 15 temas integrados y compatibilidad con Shiki, permite aplicar directamente temas de VS Code
- El modo Mono ofrece una representación visual consistente usando solo dos colores, y las propiedades personalizadas de CSS permiten cambiar de tema en tiempo real
- Destaca como una herramienta ligera y sin dependencias para visualizar flujos de datos y estructuras de sistema en entornos de programación asistida por IA
Resumen general
- beautiful-mermaid es una herramienta para renderizar diagramas Mermaid como SVG o texto ASCII/Unicode
- Funciona sin dependencia del DOM y ofrece renderizado ultrarrápido (más de 100 diagramas en menos de 500 ms)
- Fue desarrollada por el equipo de Craft para Craft Agents
- Hace un port a TypeScript de Mermaid-ascii (proyecto basado en Go) y amplía sus funciones
- Añade soporte para diagramas Sequence, Class y ER
- Incluye caracteres de caja Unicode y opciones de configuración de espaciado y padding
Funciones principales
- Tipos de diagramas compatibles: Flowchart, State, Sequence, Class, ER
- Formatos de salida: SVG (para interfaces enriquecidas), ASCII/Unicode (para terminal)
- Sistema de temas
- Incluye 15 temas integrados (
tokyo-night, dracula, nord, github-dark, etc.)
- Modo Mono: deriva automáticamente toda la paleta a partir de solo dos colores, fondo (bg) y primer plano (fg)
- Modo Enriched: permite definir colores opcionales como
accent, muted, surface, border, etc.
- Soporta cambio en tiempo real basado en propiedades personalizadas de CSS
- Integración con Shiki
- Mapea automáticamente los colores de temas de VS Code a los colores del diagrama
- La función
fromShikiTheme() puede extraer bg, fg, accent, etc.
Instalación y uso
- Comando de instalación
npm install beautiful-mermaid o bun add beautiful-mermaid, pnpm add beautiful-mermaid
- Ejemplo de renderizado SVG
import { renderMermaid } from 'beautiful-mermaid'
const svg = await renderMermaid(`graph TD; A-->B;`)
- Ejemplo de renderizado ASCII
import { renderMermaidAscii } from 'beautiful-mermaid'
const ascii = renderMermaidAscii(`graph LR; A --> B --> C`)
- Uso en navegador
- Se puede cargar directamente mediante la etiqueta
<script> usando un CDN (unpkg, jsDelivr)
- Se puede acceder a
renderMermaid, renderMermaidAscii, THEMES, etc. desde el objeto global beautifulMermaid
Salida ASCII y opciones
Resumen de la API
renderMermaid(text, options?): renderiza un diagrama Mermaid como SVG
- Opciones:
bg, fg, accent, muted, surface, border, font, transparent
renderMermaidAscii(text, options?): renderiza como texto ASCII/Unicode
fromShikiTheme(theme): extrae colores desde un tema de Shiki
THEMES: objeto con 15 temas integrados
DEFAULTS: colores predeterminados (#FFFFFF, #27272A)
Licencia y autoría
- Licencia MIT
- Creado por el equipo de Craft
- Motor ASCII basado en mermaid-ascii de Alexander Grooff
Importancia técnica
- En entornos de asistentes de código con IA, permite visualizar al instante diagramas dentro de la terminal o una interfaz de chat
- Gracias a su arquitectura ligera, rápida y sin dependencias, también resulta muy útil en herramientas CLI o entornos de servidor
- Su capacidad de expansión de temas y compatibilidad mejora la experiencia de desarrollo
1 comentarios
Opiniones en Hacker News
El proyecto basado en la librería de Go mermaid-ascii, creada por Alexander Grooff, está realmente genial
Aunque encontré un bug donde no se renderiza la arista "start"
Hice las pruebas en agents.craft.do/mermaid
No entiendo muy bien por qué los diagramas ASCII están volviendo a llamar la atención últimamente
Mermaid y PlantUML ya son basados en texto, y la mayoría de los usuarios quieren diagramas estándar que se vean bien para las personas, no para las máquinas
ASCII está limitado a caracteres imprimibles, así que tiene menos expresividad y también es difícil de estandarizar
Porque no hace falta lidiar con archivos de imagen ni configuraciones complejas como Git LFS
A mí me gustan muchísimo los diagramas ASCII
Me encanta que se vean igual de bien tanto en la terminal con
catcomo renderizados en un sitio webCon una buena fuente monoespaciada, también se ven limpios visualmente
También recomiendo la app para crear diagramas ASCII Monodraw
El renderizador ASCII de Mermaid en realidad fue traído del proyecto AlexanderGrooff/mermaid-ascii
Este proyecto lo convirtió a TypeScript y le agregó sus propios temas
El algoritmo principal es casi una conversión 1:1, así que Claude probablemente habría tardado menos de una hora en portarlo a TS
Se pueden comparar el código en Go y el código en TS
Mermaid está recibiendo mucha atención, pero Kroki(kroki.io) soporta una variedad mucho mayor de formatos de diagramas
Incluye casi todos los diagramas basados en texto, como BlockDiag, BPMN, C4, D2, DBML, Excalidraw, GraphViz y más
Mi editor Markdown, KeenWrite(keenwrite.com), integra Kroki como servicio, así que cuando se añade un formato nuevo, queda disponible automáticamente
Mermaid usa
<foreignObject>, por lo que la mayoría de las librerías tienen problemas para renderizarloMermaidJS corre rápido y de forma local dentro de una página web, mientras que Kroki depende de un servicio externo
Si no necesitas diagramas complejos, Mermaid es una opción más simple
En los ejemplos del README hay varias salidas, incluyendo un grafo de ajedrez
Aun así, siento que el estilo predeterminado de Mermaid es más limpio
Por cierto, KeenWrite se ve bastante bien
También existe Diagon, una herramienta para convertir texto en diagramas ASCII
Yo también armé una lista de herramientas de texto→diagrama, aunque no hay muchas que conviertan texto→ASCII
Para ejecutar la demo en vivo, parece que hay que descargar una plataforma de agentes de IA
Es una lástima no poder probarlo directamente sin instalar nada
Por la estructura del proyecto, parece totalmente posible
Existe una función llamada “Subgraph Direction Override”, con la que se puede configurar una dirección distinta para los subgrafos
Con eso se puede imitar un diagrama de carriles de natación que Mermaid no soportaba
Selkie, que hice yo, es un proyecto experimental que implementa por completo el parser y el renderizador de Mermaid en Rust
Lo hice para probar hasta dónde se podía llegar con Claude Code, y el resultado fue sorprendente
Se puede ejecutar directamente en el Playground
Si soporta la terminal Kitty, también puede mostrar los diagramas directamente en la terminal
Pronto voy a escribir una entrada de blog con todo el proceso
Este proyecto está realmente genial, y la sinergia con Claude Code también impresiona
Yo hice un proyecto parecido, pero en vez de ASCII se enfoca en la exploración interactiva de código
Lo diseñé para ayudar a la comprensión humana, usé D2 y también estoy preparando soporte para Mermaid
Me interesa escuchar opiniones sobre si la interactividad para personas tiene más valor, o si lo importante es el contexto para agentes
Enlace del proyecto