4Geeks chosen to deliver AI education in the Bahamas alongside Harvard, Oxford, and Columbia.See more
15 min read

GeekChart: librería de charts animados para desarrolladores

GeekChart es una librería de código abierto que permite a los desarrolladores crear diagramas animados con la estética visual de 4Geeks, una herramienta…

GeekChart es una librería de código abierto que permite a los desarrolladores crear diagramas animados con la estética visual de 4Geeks, una herramienta potente para visualizar datos y procesos de forma atractiva. Lanzada por Wafic Mikati, esta solución transforma los diagramas de Mermaid en SVG animados, ofreciendo componentes de React, renderizado del lado del servidor y una interfaz de línea de comandos (CLI) para una integración versátil en cualquier proyecto web. Su diseño se basa en una especificación detallada que asegura coherencia y calidad en cada gráfico generado.

GeekChart: librería de charts animados para desarrolladores

¿Qué es GeekChart y por qué es relevante para los desarrolladores?

GeekChart es una librería de JavaScript diseñada para generar diagramas animados y visualmente atractivos, con un estilo distintivo que evoca la identidad de 4Geeks. Su relevancia radica en que simplifica la creación de visualizaciones complejas, como diagramas de flujo, de estado o de secuencia, transformando texto plano de Mermaid en gráficos SVG dinámicos. Esto permite a los desarrolladores integrar fácilmente elementos visuales de alta calidad en sus aplicaciones, documentación o blogs, mejorando la comprensión y el atractivo de la información.

La librería no solo se enfoca en la estética, sino también en la funcionalidad, ofreciendo una solución completa para la representación gráfica. A través de su enfoque en la automatización y la coherencia visual, GeekChart aborda la necesidad de herramientas que permitan a los desarrolladores concentrarse en la lógica de sus aplicaciones, mientras la librería se encarga de la presentación de los datos. Esto es especialmente útil en entornos donde la claridad y el impacto visual son cruciales, como en la enseñanza de programación o la presentación de arquitecturas de software.

¿Cómo funciona GeekChart: componentes clave y arquitectura?

GeekChart opera mediante una arquitectura modular que permite diversas formas de integración, adaptándose a distintos entornos de desarrollo. En su núcleo, la librería interpreta el lenguaje de marcado Mermaid para generar los diagramas, pero va un paso más allá al aplicar su propio motor de renderizado y animación, que sigue una especificación de diseño rigurosa. Este proceso garantiza que cada diagrama no solo sea funcional, sino que también cumpla con los estándares estéticos definidos.

La librería se compone de varios módulos principales, cada uno con una función específica:

  1. packages/core: Este módulo es el corazón de GeekChart. Se encarga de analizar el código Mermaid, realizar el layout de los elementos del diagrama y, finalmente, dibujar y animar el gráfico. Utiliza algoritmos de posicionamiento como ELK para árboles y paneles, y un algoritmo propio para cadenas que se envuelven, asegurando una disposición óptima de los elementos.
  2. packages/react: Contiene el componente de React <Geekchart source>, que permite incrustar diagramas directamente en aplicaciones React. Este componente carga de forma diferida el analizador de Mermaid en el primer uso, optimizando el rendimiento inicial de la aplicación.
  3. packages/server: Ofrece una función renderToHtml(source) que permite renderizar diagramas en el lado del servidor. Esto es ideal para generar contenido estático, como publicaciones de blog o documentación, donde los diagramas se pueden almacenar en caché y servir rápidamente a los usuarios.
  4. packages/cli: Proporciona una interfaz de línea de comandos (npx geekchart chart.mmd -o Chart.tsx) para generar archivos SVG, React o HTML a partir de archivos Mermaid. Esta herramienta es útil para automatizar la creación de diagramas en flujos de trabajo de desarrollo o CI/CD.

El proceso de creación de un diagrama en GeekChart sigue una secuencia definida: el texto de Mermaid se analiza, se repara si es necesario, se identifica el tipo de diagrama, Mermaid lo interpreta, GeekChart posiciona los elementos, los dibuja y, finalmente, aplica la animación. La animación sigue el vocabulario de Manim, donde los trazos se dibujan, los rellenos aparecen y los elementos se mueven secuencialmente, con pausas entre cada acción.

Integración de GeekChart en proyectos web: ejemplos prácticos

Integrar GeekChart en un proyecto web es un proceso flexible, gracias a sus múltiples puntos de entrada que se adaptan a diferentes arquitecturas y necesidades. Ya sea que se trabaje con un framework de JavaScript como React, se necesite renderizado del lado del servidor para contenido estático, o se prefiera una solución de línea de comandos para la generación de activos, GeekChart ofrece un camino claro.

Uso con React: el componente <Geekchart>

Para proyectos basados en React, la integración es directa mediante el componente <Geekchart>. Primero, se debe instalar el paquete geekchart:

bash
npm install geekchart
# o
yarn add geekchart
# o
pnpm add geekchart

Una vez instalado, se puede importar y usar el componente en cualquier parte de la aplicación:

jsx
import { Geekchart } from 'geekchart/react';
 
function MyComponent() {
  const mermaidSource = `
    graph TD;
        A-->B;
        A-->C;
        B-->D;
        C-->D;
  `;
 
  return (
    <div>
      <h2>Mi Diagrama de Flujo</h2>
      <Geekchart source={mermaidSource} />
    </div>
  );
}
 
export default MyComponent;

Este enfoque es ideal para aplicaciones interactivas donde los diagramas pueden generarse dinámicamente o modificarse en tiempo real. El componente se encarga de cargar el analizador de Mermaid solo cuando es necesario, optimizando el rendimiento.

Renderizado en el servidor para contenido estático

Cuando se necesita generar diagramas para sitios web estáticos, blogs o documentación, el módulo geekchart/server es la opción más eficiente. Permite pre-renderizar los diagramas a HTML, lo que mejora el rendimiento de carga y la optimización para motores de búsqueda.

javascript
// En un entorno Node.js, por ejemplo, en un script de generación de contenido
import { renderToHtml } from 'geekchart/server';
import fs from 'fs';
 
const mermaidSource = `
  sequenceDiagram
    participant Client
    participant Server
    Client->>Server: Request data
    Server-->>Client: Send data
`;
 
async function generateDiagramHtml() {
  const htmlOutput = await renderToHtml(mermaidSource);
  fs.writeFileSync('diagram.html', htmlOutput);
  console.log('Diagrama HTML generado en diagram.html');
}
 
generateDiagramHtml();

Este método es perfecto para integrar diagramas en pipelines de markdown o sistemas de gestión de contenido, donde el HTML resultante puede ser almacenado en caché y servido directamente.

Generación de activos con la interfaz de línea de comandos (CLI)

Para automatizar la creación de archivos de diagrama (SVG, React, HTML) o integrarlos en scripts de construcción, la CLI de GeekChart es una herramienta poderosa.

Primero, se crea un archivo Mermaid, por ejemplo, chart.mmd:

Luego, se utiliza el comando npx geekchart para generar el archivo deseado:

bash
# Generar un componente React
npx geekchart chart.mmd -o Chart.tsx
 
# Generar un archivo SVG
npx geekchart chart.mmd -o chart.svg
 
# Generar un archivo HTML
npx geekchart chart.mmd -o chart.html

La CLI es especialmente útil para equipos de desarrollo que desean mantener los diagramas como parte de su repositorio de código y generarlos como activos durante el proceso de despliegue.

La filosofía de diseño de GeekChart: coherencia y animación

La filosofía de diseño de GeekChart se centra en la coherencia visual y la calidad de la animación, elementos que la distinguen de otras librerías de diagramación. Cada aspecto de un diagrama generado por GeekChart está regido por una especificación de diseño detallada, documentada en el archivo DESIGN.md del repositorio. Esta rigurosa adhesión a las normas asegura que todos los gráficos, independientemente de su tipo (diagramas de flujo, de estado, de clase, ER, de secuencia, Gantt, timeline, journey, cuadrante, radar, XY, Sankey, treemap, Kanban, pie, mindmap o git graph), mantengan una estética unificada y profesional.

El motor de renderizado de GeekChart dibuja cada tipo de diagrama "a mano" contra esta especificación escrita. Esto significa que no se trata solo de interpretar el código Mermaid, sino de aplicar un conjunto de reglas visuales específicas: tamaños de caja fijos basados en una cuadrícula de 8, líneas finas (hairlines) y un único acento de color en la ruta principal del diagrama. Este nivel de detalle garantiza que los diagramas no solo sean informativos, sino también visualmente atractivos y fáciles de interpretar.

En cuanto a la animación, GeekChart adopta el vocabulario de Manim, una librería para crear animaciones matemáticas programáticamente. Esto se traduce en un estilo de animación fluido y didáctico:

  • Trazos que se dibujan: Las líneas y contornos de los elementos aparecen como si se estuvieran dibujando en tiempo real.
  • Rellenos que siguen: Los colores de relleno de las formas aparecen después de que sus contornos se han dibujado.
  • Movimiento secuencial: Los elementos se animan uno a la vez, guiando la atención del espectador a través del diagrama de forma lógica.
  • Pausas estratégicas: Se incluyen pausas entre las animaciones para permitir que el ojo procese la información antes de pasar al siguiente elemento.

Esta aproximación a la animación no es meramente estética; tiene un propósito didáctico. Al presentar la información de forma secuencial y controlada, GeekChart facilita la comprensión de procesos complejos y relaciones entre elementos, haciendo que los diagramas sean herramientas de comunicación más efectivas.

Para asegurar que esta filosofía de diseño se mantenga, GeekChart incorpora un "portal de medición" (pnpm gate) que verifica cada gráfico generado contra aproximadamente cuarenta reglas definidas en DESIGN.md. Si un cambio en el código rompe la apariencia esperada, la construcción falla antes de que el problema llegue a producción, garantizando la calidad y consistencia visual de la librería.

Comparativa con otras librerías de diagramación: ¿qué aporta GeekChart?

En el panorama de las herramientas de diagramación, GeekChart se posiciona como una solución especializada que complementa o supera a otras librerías en ciertos aspectos, especialmente en lo que respecta a la estética y la animación. Mientras que herramientas como Mermaid.js o PlantUML se centran en la generación de diagramas a partir de texto, GeekChart añade una capa distintiva de estilo y dinamismo.

CaracterísticaGeekChartMermaid.js (base)PlantUML
Estilo visualEstética 4Geeks, altamente consistente y pulida, basada en especificación.Estilo por defecto funcional, personalizable con CSS, pero menos cohesivo.Estilo más técnico, personalizable con temas, pero menos animado.
AnimacionesAnimaciones integradas y fluidas (estilo Manim) para todos los diagramas.No ofrece animaciones nativas; requiere implementaciones externas.No ofrece animaciones nativas.
Tipos de diagramasAmplia gama (flujo, estado, clase, ER, secuencia, Gantt, etc.).Amplia gama, en constante evolución.Amplia gama, incluyendo UML completo y otros.
IntegraciónComponente React, renderizado en servidor, CLI.Librería JavaScript, plugins para frameworks, CLI.Generación de imágenes (SVG, PNG) en servidor o local.
Control de calidad"Portal de medición" que valida el estilo contra una especificación de diseño.Depende de la implementación del desarrollador para la coherencia visual.Depende de la implementación del desarrollador para la coherencia visual.
Enfoque principalDiagramas animados y estéticamente unificados para entornos web modernos.Generación rápida de diagramas a partir de texto, versatilidad.Diagramas técnicos y UML, integración con herramientas de desarrollo.

GeekChart se distingue principalmente por su compromiso con una estética visual particular y la inclusión de animaciones de alta calidad de forma nativa. Mientras que Mermaid.js es una base excelente para la definición de diagramas mediante texto, GeekChart toma esa base y la eleva con un renderizado propio que aplica un diseño específico y animaciones predefinidas. Esto significa que los desarrolladores que buscan una solución "lista para usar" con un aspecto profesional y dinámico encontrarán en GeekChart una ventaja significativa.

Por ejemplo, para un blog técnico o una plataforma educativa como 4Geeks, donde la presentación visual de conceptos complejos es clave, las animaciones de GeekChart pueden mejorar drásticamente la comprensión del usuario. Un diagrama de secuencia animado que muestra el flujo de eventos paso a paso es mucho más efectivo que una imagen estática.

Además, el "portal de medición" de GeekChart es una característica única que garantiza la consistencia visual a lo largo del tiempo y entre diferentes diagramas. Esto es crucial en proyectos grandes o con múltiples colaboradores, donde mantener una marca visual unificada puede ser un desafío. Otras librerías ofrecen personalización, pero la responsabilidad de mantener la coherencia recae enteramente en el desarrollador.

En resumen, si bien Mermaid.js y PlantUML son herramientas robustas y ampliamente adoptadas para la creación de diagramas, GeekChart se especializa en ofrecer una experiencia visual y animada superior, con una estética predefinida y un control de calidad integrado que la hacen ideal para proyectos que priorizan la presentación y la claridad didáctica. Para explorar más herramientas de inteligencia artificial que facilitan el desarrollo, puedes visitar nuestro hub de herramientas IA.

Contribución y comunidad: cómo participar en el desarrollo de GeekChart

GeekChart es un proyecto de código abierto, lo que significa que la comunidad juega un papel fundamental en su evolución y mejora. Wafic Mikati, su creador, ha establecido un marco claro para que desarrolladores y entusiastas puedan contribuir, ya sea mejorando el código, añadiendo nuevas funcionalidades o documentando el proyecto. Participar en proyectos de código abierto como GeekChart es una excelente manera de aprender, colaborar y dejar una huella en el ecosistema de desarrollo.

El repositorio de GitHub de GeekChart es el punto central para todas las contribuciones. Aquí, los interesados pueden encontrar el código fuente, reportar errores, sugerir nuevas características o enviar sus propias implementaciones. La documentación para contribuyentes se encuentra en el archivo CONTRIBUTING.md, que detalla los pasos para configurar el entorno de desarrollo, el ciclo de cambios y cómo añadir nuevos tipos de gráficos o reglas de diseño.

Algunas formas clave de contribuir incluyen:

  1. Reporte de errores (Bugs): Si encuentras un comportamiento inesperado o un error visual en un diagrama, puedes abrir una issue en GitHub. Es importante proporcionar pasos claros para reproducir el error y, si es posible, un fragmento de código Mermaid que lo demuestre.
  2. Mejoras y nuevas características: Los desarrolladores pueden proponer nuevas funcionalidades o mejorar las existentes. Esto podría incluir soporte para nuevos tipos de diagramas de Mermaid, optimizaciones de rendimiento o mejoras en las animaciones. Las propuestas se discuten en las issues antes de iniciar el desarrollo.
  3. Contribuciones de código: Los desarrolladores pueden enviar pull requests con sus cambios. Es crucial seguir las guías de estilo de código del proyecto y asegurarse de que las pruebas existentes pasen, además de añadir nuevas pruebas si se implementan funcionalidades. El proyecto utiliza pnpm test para ejecutar alrededor de 250 aserciones de Playwright, lo que garantiza la calidad del código.
  4. Documentación: Mejorar la documentación es una forma valiosa de contribuir. Esto puede incluir aclarar secciones existentes, añadir ejemplos de uso, o traducir la documentación a otros idiomas.
  5. Diseño: Dada la importancia de la especificación de diseño en GeekChart, los diseñadores con conocimientos técnicos pueden contribuir revisando DESIGN.md y sugiriendo mejoras o nuevas reglas que refinen la estética de los diagramas. El comando pnpm gallery && pnpm gate permite renderizar todos los ejemplos y medirlos contra la especificación de diseño.

Para aquellos interesados en profundizar en la estructura del código, el archivo AGENTS.md ofrece un mapa más completo de la base de código. La comunidad de 4Geeks Academy, donde se originó GeekChart, también es un buen lugar para encontrar apoyo y discutir ideas. Proyectos como este demuestran el valor de la colaboración en el desarrollo de software y ofrecen una oportunidad para que los desarrolladores apliquen sus habilidades en un contexto real. Si te interesa el desarrollo web, puedes explorar nuestro Máster en Desarrollo Web Full Stack.

Próximos pasos: empieza a usar GeekChart en tus proyectos

Ahora que conoces el potencial de GeekChart, el siguiente paso es integrarlo en tus propios proyectos. Ya sea que estés construyendo una aplicación web con React, generando documentación estática para tu API, o simplemente buscando una forma más atractiva de visualizar tus ideas, GeekChart ofrece las herramientas necesarias. Te animamos a explorar su repositorio en GitHub, experimentar con los ejemplos y unirte a la comunidad.

Preguntas frecuentes

¿Qué tipos de diagramas soporta GeekChart?

GeekChart soporta una amplia variedad de tipos de diagramas de Mermaid, incluyendo diagramas de flujo, de estado, de clase, de entidad-relación (ER), de secuencia, Gantt, timeline, journey, cuadrante, radar, XY, Sankey, treemap, Kanban, pie, mindmap y git graph, todos con su estilo animado distintivo.

¿Necesito saber Mermaid para usar GeekChart?

Sí, GeekChart utiliza Mermaid como lenguaje de entrada para definir los diagramas. Es necesario escribir el código de los diagramas en sintaxis Mermaid, y GeekChart se encarga de renderizarlos con su estilo y animaciones.

¿GeekChart es compatible con todos los frameworks de JavaScript?

GeekChart ofrece un componente de React para una integración sencilla en aplicaciones React. Para otros frameworks o proyectos sin framework, se puede utilizar el renderizador del lado del servidor (geekchart/server) para generar HTML o SVG, o la CLI para exportar los diagramas como archivos estáticos.

¿Cómo puedo personalizar el estilo de los diagramas de GeekChart?

El estilo de GeekChart está diseñado para ser coherente y sigue una especificación de diseño estricta. Si bien no está pensado para una personalización CSS arbitraria, el proyecto es de código abierto y las contribuciones que se alineen con su filosofía de diseño son bienvenidas.

¿Dónde puedo encontrar más ejemplos de uso de GeekChart?

Puedes encontrar una galería de ejemplos en vivo y la documentación del paquete en el repositorio oficial de GeekChart en GitHub, donde se muestran diversos tipos de diagramas y sus animaciones.

Da el siguiente paso en tech

Compara nuestros programas y elige tu ruta.

Preguntas Frecuentes