InicioGuías › Diagramas de Gantt en Mermaid: sintaxis, trampas y vuelta a un editor real

Diagramas de Gantt en Mermaid: sintaxis, trampas y vuelta a un editor real

Los bloques gantt de Mermaid se renderizan de forma nativa en GitHub, GitLab, Notion y Obsidian, lo que los convierte en la manera más fácil de poner un calendario donde ya vive el trabajo: en el repositorio, revisable dentro de una pull request. También son penosos de editar: mueves una fecha y tienes que rehacer a mano toda la cadena de after que va detrás. Aquí van la sintaxis campo por campo, un ejemplo completo que puedes pegar en un README, las trampas que se renderizan perfectamente siendo falsas, y el paso que falta: editarlo visualmente y recuperar el texto.

Equipo de gantts.appActualizado el 19 de julio de 202611 min de lectura

En esta página
  1. La sintaxis de una pasada
  2. Un ejemplo completo que puedes pegar en un README
  3. Referencia de la línea de tarea
  4. Cuatro cosas que te van a morder
  5. Los límites de un formato de diagrama
  6. Editar visualmente y pegar el texto de vuelta
El mismo calendario como texto y como barras:
gantt section Fase Tarea :a, 5d Tarea :after a, 8dtextográfico

La sintaxis de una pasada

Un bloque gantt se abre con la palabra clave gantt y unas pocas líneas de cabecera, y después vienen encabezados section con líneas de tarea debajo. La sangría es convención, no gramática: Mermaid no se queja si la pierdes, pero el diff sí.

Una línea de tarea es un nombre, dos puntos y después campos separados por comas:

Nombre de tarea :etiqueta, id, inicio, duración

Cabeceras que conviene conocer: dateFormat (cómo están escritas las fechas en tu archivo), excludes weekends, title y axisFormat (cómo se etiqueta el eje, con códigos al estilo strftime). Los campos se clasifican por su forma más que por su posición estricta, y por eso :done, aud, 2026-03-02, 5d y :aud, done, 2026-03-02, 5d funcionan los dos igual de bien.

Una advertencia que ahorra media hora de desconcierto: dateFormat y axisFormat no son el mismo parámetro escrito de dos maneras. El primero es entrada y el segundo es salida. Cambiar dateFormat no reetiqueta el eje; lo que hace es cambiar cómo se leen las fechas que ya has tecleado, con lo que un archivo perfectamente correcto puede pasar a interpretarse al revés.

Tarea A:id a1:2026-03-02:5dTareaidInicioDuración
Cada campo de una línea de tarea de Mermaid y cuáles son opcionales.

Un ejemplo completo que puedes pegar en un README

Un bloque válido y completo para trabajo real: el lanzamiento de la app de reservas de Grupo Alcorta, una agencia de Valladolid, con el equipo de producto de Marta Iglesias. Usa secciones, fechas absolutas, cadenas de after, todas las etiquetas, un hito y fines de semana excluidos. Pégalo en un bloque delimitado mermaid dentro de cualquier Markdown de GitHub y se renderiza.

gantt
    title Lanzamiento app de reservas — Grupo Alcorta
    dateFormat YYYY-MM-DD
    axisFormat %d %b
    excludes weekends

    section Descubrimiento
    Auditoria del backend actual   :done, aud, 2026-03-02, 5d
    Especificacion funcional       :done, esp, after aud, 4d
    Revision con cliente           :active, rev, after esp, 2d

    section Construccion
    Servicio de identidad          :crit, ident, after rev, 10d
    Pantallas de reserva           :pant, after ident, 12d
    Pasarela de pago               :pago, after pant, 6d

    section Salida
    Pruebas en preproduccion       :pre, after pago, 5d
    Beta publica                   :milestone, beta, 2026-05-04, 0d
    Retirada de la version antigua :ret, after beta, 2w

Leído línea a línea:

  • dateFormat YYYY-MM-DD le dice a Mermaid cómo leer las fechas que has tecleado. Es formato de entrada, no de salida. Aquí no vale dd/mm/aaaa salvo que lo declares explícitamente, y aun así conviene no hacerlo: el ISO es lo que espera cualquiera que abra el archivo después de ti.
  • axisFormat %d %b es el lado de salida: el eje se lee «02 mar» en vez de una fecha ISO completa. Para cualquier cosa más larga que un trimestre, usa %V y trabaja con números de semana.
  • excludes weekends hace que todas las barras salten sábados y domingos, para el diagrama entero. No hay excepción por tarea: es todo o nada.
  • Auditoria del backend actual :done, aud, 2026-03-02, 5d — etiqueta, id, un inicio absoluto (un lunes) y cinco días. Las duraciones incluyen el día de inicio, así que esto termina el viernes 6 de marzo.
  • after aud significa «empieza cuando termine aud»: con los fines de semana excluidos, el lunes 9 de marzo, no el sábado 7.
  • :crit, ident, ... pinta la barra con el color de ruta crítica. Fíjate en el verbo: pinta. Más abajo están los límites de eso.
  • Pantallas de reserva :pant, after ident, 12d no lleva etiqueta ninguna; el primer campo es simplemente un id. Sin etiqueta significa trabajo pendiente.
  • Beta publica :milestone, beta, 2026-05-04, 0d es un marcador de longitud cero en una fecha fija. Los hitos tienen id como cualquier otra cosa, así que el after beta de la última línea es perfectamente legal.
  • 2w son dos semanas. Mermaid también acepta h y m, que aquí casi nunca sirven de nada.

Un detalle que a un equipo español le importa más que a otros: excludes weekends resuelve los sábados y domingos, pero no sabe nada de los festivos. Este calendario atraviesa la Semana Santa, y el 1 de mayo cae dentro de la ventana de la beta. Si quieres que las barras lo reflejen, hay que declararlos a mano, uno por uno, con excludes 2026-04-03 y excludes 2026-05-01. Y eso solo cubre los nacionales: los autonómicos y locales —San Pedro Regalado en Valladolid, la feria en Sevilla, el puente que tu convenio colectivo te regala en septiembre— no están en ninguna lista que Mermaid conozca. En un plan que cruce agosto, la diferencia entre el diagrama y la realidad de la oficina se cuenta en semanas.

Las líneas en blanco entre secciones son decorativas: Mermaid las ignora, y nuestro importador también. Déjalas igualmente. Un bloque de cuarenta tareas sin ellas es ilegible en un diff, y ese diff lo va a revisar alguien un viernes a las siete.

Referencia de la línea de tarea

Cada campo y modificador, qué hace y cómo se ve en la práctica.

Campo o modificadorEjemploQué hace
idaudUna palabra suelta que nombra la tarea para que after pueda referirse a ella. Sin espacios ni puntuación. Opcional salvo que algo dependa de la tarea.
afterafter audEmpieza cuando termina la tarea nombrada. Solo fin-inicio y sin desfase. Admite varios ids: after a b espera al más tardío de los dos.
done:done, aud, …Dibuja la barra como terminada. Sin porcentaje: el 100 % y el «vamos, que está» se ven exactamente igual.
active:active, rev, …Dibuja la barra como en curso. Otra vez sin ningún número detrás.
crit:crit, ident, …Colorea la barra como crítica. Es una afirmación que tecleas tú, no algo que Mermaid deduzca: nada la contrasta con la cadena de dependencias.
milestone:milestone, beta, …Dibuja un rombo en lugar de una barra. Acompáñalo siempre de 0d.
Unidades de duración5d · 2w · 8hDías, semanas, horas (también m). Inclusivas respecto al día de inicio: 5d desde el lunes acaba el viernes.
Fecha de fin2026-03-02, 2026-03-06Una segunda fecha en lugar de una duración, para un final fijado desde fuera.
dateFormatdateFormat YYYY-MM-DDCómo se interpretan las fechas del archivo. Línea de cabecera, una vez por diagrama.
axisFormataxisFormat %d %bCómo se etiqueta el eje, con códigos strftime. Puramente cosmético.
excludesexcludes weekendsDías no laborables. Acepta también fechas concretas (excludes 2026-05-01) y nombres de día. Afecta al diagrama entero.

Cuatro cosas que te van a morder

1. Las duraciones incluyen el día de inicio. 5d desde el lunes día 5 llega hasta el viernes día 9, no hasta el 10. Un error de uno aquí desplaza todas las tareas del archivo y aun así se renderiza perfectamente, que es el peor modo de fallo posible: nada parece roto. La entrega sigue apareciendo en su sitio hasta el día en que alguien intenta cumplirla.

2. after junto con excludes weekends es donde viven los errores de verdad. Si una predecesora termina un viernes, su sucesora empieza el lunes, no el sábado. Cualquier herramienta que resuelva after sumando un día natural colocará tareas en fin de semana dentro de un archivo que lo prohíbe explícitamente, y a partir de ahí todas las fechas de aguas abajo van a la deriva. La nuestra lo hizo, brevemente. El arreglo pasa la aritmética por el calendario laboral para que la importación coincida con lo que Mermaid dibuja, y la prueba que lo vigila comprueba la propiedad y no fechas concretas: ningún inicio ni fin derivado puede caer en un día excluido. Las fechas que escribiste tú a mano se quedan donde las pusiste, sea fin de semana o no. Mover en silencio la fecha explícita de un autor es el tipo equivocado de amabilidad.

3. No hay forma de escapar caracteres. Los dos puntos abren la lista de campos y la coma separa campos, así que Fase 2: diseño, revisión se convierte en una tarea llamada «Fase 2» con campos basura. Mantén los dos puntos, las comas y los puntos y comas fuera de los nombres de tarea. Es la razón de que en el ejemplo de arriba los nombres estén escritos sin ellos. Al exportar sustituimos esos caracteres por espacios antes que emitir una línea que no se va a poder interpretar.

4. Una duración ilegible pasa a cero en silencio. Escribe 3dd y obtendrás una barra de longitud cero en lugar de un error. Repasa el diagrama en busca de tareas invisibles después de cualquier edición masiva: no aparecen en ningún sitio, ni siquiera como una línea vacía.

Fin → InicioABB espera a AInicio → InicioABB espera a AFin → FinABB espera a AInicio → FinABB espera a A
«after» es fin-inicio con desfase cero — el único tipo de enlace que existe en el formato.

Los límites de un formato de diagrama

Mermaid gantt es un lenguaje de representación, no un motor de planificación, y la diferencia salta a la vista en cuanto quieres que el gráfico responda a una pregunta en lugar de ilustrar una respuesta que ya tenías.

Nada de esto lo convierte en un mal formato. Lo convierte en un formato de publicación: excelente para enseñar un calendario, inútil para deducirlo. Y por eso importa la ida y vuelta.

Editar visualmente y pegar el texto de vuelta

Herramientas que renderizan Mermaid hay muchas. Lo que faltaba es la dirección contraria: arrastrar barras y recuperar la sintaxis.

  1. Pega o abre tu diagrama en gantts.app — un archivo .mmd, o un .md con un bloque delimitado; los dos funcionan. Detecta el bloque gantt por su contenido, no por la extensión.
  2. Comprueba el Calendario laboral. excludes weekends enciende el calendario, y ahí es donde añades los festivos que Mermaid no conoce: los nacionales, los de tu comunidad y el puente del convenio.
  3. Arrastra, enlaza y cambia fechas como en cualquier otro gráfico. Con Ajustar mueves un extremo de la barra y con Mover la desplazas entera sin tocar la duración.
  4. Activa Ruta crítica. Lo que se raya no es lo que decía crit en el archivo, sino lo que sale de recorrer las dependencias que acabas de importar.
  5. Si el plan te ha quedado con huecos porque las fechas venían clavadas del archivo, pulsa Reprogramar para compactar cada tarea a su fecha legal más temprana.
  6. Abre ⬇ Exportar🧜 Mermaid gantt (texto). Ahí tienes Copiar al portapapeles si vas directo al README, o Descargar .mmd si el diagrama vive en su propio archivo dentro del repositorio.
  7. Pega, revisa el diff y haz commit. El bloque sale con la misma forma con la que entró, así que el diff enseña lo que ha cambiado de verdad y no un reformateo completo.

La ida y vuelta pierde información de una forma conocida y aburrida. El avance convierte el 100 % en done y cualquier valor entre 1 y 99 en active al salir; active vuelve a entrar como 50 %, una suposición que se te comunica en un aviso en lugar de dejar que la descubras en un informe de seguimiento tres semanas después. Los enlaces que no se pueden escribir como after —cualquiera con desfase, o cualquier relación SS, FF o SF— caen a fechas absolutas, que siguen siendo correctas aunque dejen de ser mantenibles.

Hay una asimetría deliberada, y no es un fallo: crit se exporta pero nunca se importa. Al salir es un valor derivado —el editor calculó la ruta crítica a partir del grafo de dependencias, así que la etiqueta es cierta en el momento en que se escribe—. Al entrar es una palabra que alguien tecleó en un archivo que puede llevar semanas sin tocarse, y fiarse de ella permitiría que un diagrama viejo pintara de rojo una cadena que ya no es crítica. Así que se escribe y luego se ignora: la ruta crítica que ves después de importar está recalculada, no afirmada.

Un efecto secundario útil si redactas calendarios con un LLM: pídele sintaxis gantt de Mermaid, pega la respuesta y ya tienes un gráfico editable con ruta crítica calculada. Sin clave de API y sin servidor de por medio.

Mermaid no sabe nada de festivos. excludes weekends resuelve sábados y domingos, pero el 1 de mayo, la Semana Santa y los festivos autonómicos hay que declararlos uno a uno con excludes 2026-05-01. Al importar, revisa el Calendario laboral antes de fiarte de las fechas.

Preguntas frecuentes

¿Cómo se escribe un diagrama de Gantt en Mermaid?

Abre el bloque con gantt, añade dateFormat YYYY-MM-DD y después encabezados section con líneas de tarea debajo con la forma «Nombre :etiqueta, id, inicio, duración» — por ejemplo «Auditoria :done, aud, 2026-03-02, 5d».

¿5d en Mermaid incluye el día de inicio?

Sí. Una tarea de 5d que empieza el lunes día 5 termina el viernes día 9. Este cómputo inclusivo es la causa más habitual de errores de un día, y produce un diagrama que se renderiza perfectamente aunque todas las fechas estén corridas un día por tarea.

¿Cómo funcionan las dependencias en Mermaid gantt?

Se usa «after algúnId» como campo de inicio. Siempre es fin-inicio y sin desfase: inicio-inicio, fin-fin y los desfases no se pueden expresar. Puedes nombrar varias predecesoras, como en «after a b», y la tarea espera a la más tardía.

¿Salta after los fines de semana?

Sí, cuando el diagrama declara «excludes weekends». La sucesora de una tarea que acaba en viernes empieza el lunes, y su duración se cuenta en días laborables. Las herramientas que resuelven after sumando un día natural acaban colocando tareas en sábado dentro de un archivo que lo prohíbe.

¿Puede Mermaid calcular la ruta crítica?

No. La etiqueta crit es un color que aplicas a mano; nada en Mermaid recorre el grafo de dependencias ni calcula holguras. Por eso gantts.app exporta crit pero lo ignora al importar: la criticidad se recalcula a partir de las dependencias en lugar de fiarse de un archivo posiblemente obsoleto.

¿Puedo convertir un diagrama de Mermaid en un gráfico editable?

Sí. Abre el archivo .mmd o el Markdown en gantts.app, edítalo visualmente y usa ⬇ Exportar ▸ 🧜 Mermaid gantt (texto) para copiar de vuelta la sintaxis actualizada.

Plantillas que usan esto

Las guías que aún no se han traducido se abren en inglés.

Pruébalo en el editor gratuito

Abre gantts.app, arrastra las barras y exporta a PDF, Excel o PowerPoint. Sin cuenta y sin marca de agua.

Abrir el editor gratuito