1. Diagramas de Flujo (graph o flowchart)
Los diagramas de flujo se componen de nodos (formas geométricas) y bordes (flechas o líneas). El código de sirena define cómo se hacen los nodos y los bordes y se adapta a diferentes tipos de flechas, flechas multidireccionales y cualquier enlace hacia y desde los subgrafos.
Son los más comunes. Se definen con la palabra clave flowchart (o graph) seguida de la dirección del flujo:
TDoTB: De arriba a abajo (Top-Down / Top-Bottom).BT: De abajo a arriba (Bottom-Top).LR: De izquierda a derecha (Left-Right).RL: De derecha a izquierda (Right-Left).
Formas de los Nodos y Flechas
La forma del nodo se define con diferentes tipos de paréntesis:
id[Texto]→ Rectángulo (por defecto)id(Texto)→ Rectángulo con bordes redondeadosid([Texto])→ Estadio / Óvaloid{Texto}→ Rombo de decisiónid((Texto))→ Círculoid[[Texto]]→ Forma Sub-Rutinaid[(Texto)]→ Cilindroid>Texto]→ Asimétricoid{{Texto}}→ Hexagonalid[/Texto/]oid[\Texto\]→ Paralelogramoid[/Texto\]oid[\Texto/]→ Trapezoideid(((Texto)))→ Doble Circulo
Las conexiones se hacen con --> para flechas, --- para líneas sin flecha, y puedes añadir texto usando -->|texto| o -- texto -->.
A-.->BEnlace punteadoA-. text .-> BPunteado con textoA ==> BGruesoA == text ==> BGrueso con Texto
Encadenamiento de enlaces
Es posible declarar varios enlaces en la misma línea, como se muestra a continuación:
A -- text --> B -- text2 --> C
flowchart LR
A -- text --> B -- text2 --> C
También es posible declarar enlaces de varios nodos en la misma línea, como se muestra a continuación:
a --> b & c--> d
flowchart LR
a --> b & c--> d
De esta forma, puedes describir las dependencias de una manera muy expresiva. Como en la siguiente línea:
Código:
A & B--> C & D
flowchart TB
A & B--> C & D
Si describes el mismo diagrama usando la sintaxis básica, ocupará cuatro líneas. Una advertencia: se podría exagerar con esto, lo que dificultaría la lectura del diagrama de flujo en formato Markdown. La palabra sueca lagomMe viene a la mente. Significa ni demasiado ni demasiado poco. Esto también se aplica a las sintaxis expresivas.
flowchart TB
A --> C
A --> D
B --> C
B --> D
flowchart TB
A --> C
A --> D
B --> C
B --> D
Nuevos tipos de flechas
Se admiten nuevos tipos de flechas:
A --o Bborde circularA --x Bborde cruzado
Flechas multidireccionales
Existe la posibilidad de utilizar flechas multidireccionales.
A o--o B- `B <--> C
C x--x D
flowchart LR
A o--o B
B <--> C
C x--x D
Código:
Ejemplo de Diagrama de Flujo
Fragmento de código
flowchart TD
A[Inicio del proceso] --> B{¿Tiene cuenta?}
B -- Sí --> C[Iniciar Sesión]
B -- No --> D[Registrarse]
C --> E([Pantalla Principal])
D --> E
Ejemplo:
flowchart TD
A[Inicio del proceso] --> B{¿Tiene cuenta?}
B -- Sí --> C[Iniciar Sesión]
B -- No --> D[Registrarse]
C --> E([Pantalla Principal])
D --> E
2. Diagramas de Secuencia (sequenceDiagram)
Ideales para modelar la interacción entre diferentes componentes o sistemas a lo largo del tiempo.
actor: Representa a un usuario o entidad externa.participant: Representa un sistema, módulo o clase.->>: Flecha sólida (llamada sincrónica/asincrónica).-->>: Flecha punteada (respuesta/retorno).activateydeactivate: Muestran el tiempo de vida o ejecución de un proceso.
Ejemplo de Diagrama de Secuencia
Fragmento de código
sequenceDiagram
actor Cliente
participant App as Aplicación Móvil
participant API as Servidor API
Cliente->>App: Presiona "Pagar"
activate App
App->>API: Enviar petición de cobro ($)
activate API
API-->>App: Confirmación de pago exitoso
deactivate API
App-->>Cliente: Mostrar pantalla de éxito
deactivate App
Ejemplo:
sequenceDiagram
actor Cliente
participant App as Aplicación Móvil
participant API as Servidor API
Cliente->>App: Presiona "Pagar"
activate App
App->>API: Enviar petición de cobro ($)
activate API
API-->>App: Confirmación de pago exitoso
deactivate API
App-->>Cliente: Mostrar pantalla de éxito
deactivate App
3. Diagramas de Clases (classDiagram)
Muy utilizados en el desarrollo de software orientado a objetos para representar la estructura del sistema.
Para definir miembros:
tipo nombreVariableonombreMetodo(parametros).Relaciones:
- Inherencia (Herencia):
<|-- - Composición:
*-- - Agregación:
o-- - Asociación:
-->
- Inherencia (Herencia):
Ejemplo de Diagrama de Clases
Fragmento de código
classDiagram
class Animal {
+String nombre
+int edad
+comer()
+dormir()
}
class Perro {
+String raza
+ladrar()
}
class Dueno {
+String nombre
+mascotas List~Animal~
}
Animal <|-- Perro : Es un
Dueno "1" o-- "many" Animal : Posee
Ejemplo:
classDiagram
class Animal {
+String nombre
+int edad
+comer()
+dormir()
}
class Perro {
+String raza
+ladrar()
}
class Dueno {
+String nombre
+mascotas List~Animal~
}
Animal <|-- Perro : Es un
Dueno "1" o-- "many" Animal : Posee
4. Diagramas de Estado (stateDiagram-v2)
Muestran los diferentes estados por los que pasa un objeto y las transiciones entre ellos.
[*]: Representa el estado inicial o final.state "Nombre Largo" as id: Para crear estados con descripciones detalladas.
Ejemplo de Diagrama de Estado
"Un diagrama de estados es un tipo de diagrama utilizado en informática y campos relacionados para describir el comportamiento de los sistemas. Los diagramas de estados requieren que el sistema descrito esté compuesto por un número finito de estados; a veces, esto es cierto, mientras que en otras ocasiones se trata de una abstracción razonable." Wikipedia
Estados
Un estado puede declararse de varias maneras. La forma más sencilla es definir un estado con solo un identificador:
stateDiagram-v2
stateId
stateDiagram-v2
stateId
Otra forma es utilizando la palabra clave "estado" con una descripción como la siguiente:
stateDiagram-v2
state "This is a state description" as s2
stateDiagram-v2
state "This is a state description" as s2
Otra forma de definir un estado con una descripción es definir el ID del estado seguido de dos puntos y la descripción:
stateDiagram-v2
s2 : This is a state description
stateDiagram-v2
s2 : This is a state description
Transiciones
Las transiciones son rutas/bordes que indican el paso de un estado a otro. Esto se representa mediante una flecha de texto, "-->".
Cuando se define una transición entre dos estados y estos no están definidos previamente, los estados no definidos se definen con el ID de la transición. Posteriormente, se pueden añadir descripciones a los estados definidos de esta manera.
stateDiagram-v2
s1 --> s2
stateDiagram-v2
s1 --> s2
Es posible añadir texto a una transición para describir lo que representa:
stateDiagram-v2
s1 --> s2: A transition
stateDiagram-v2
s1 --> s2: A transition
Inicio y Fin
Existen dos estados especiales que indican el inicio y el final del diagrama. Estos se escriben con la sintaxis [*] y la dirección de la transición hacia ellos define si se trata de un estado de inicio o de un estado de finalización.
stateDiagram-v2
[*] --> s1
s1 --> [*]
stateDiagram-v2
[*] --> s1
s1 --> [*]
Fragmento de código
stateDiagram-v2
[*] --> Reposo
Reposo --> Reproduciendo : Presionar Play
Reproduciendo --> Pausado : Presionar Pause
Pausado --> Reproduciendo : Presionar Play
Reproduciendo --> Reposo : Detener / Fin canción
Reposo --> [*]
Ejemplo:
stateDiagram-v2
[*] --> Reposo
Reposo --> Reproduciendo : Presionar Play
Reproduciendo --> Pausado : Presionar Pause
Pausado --> Reproduciendo : Presionar Play
Reproduciendo --> Reposo : Detener / Fin canción
Reposo --> [*]
5. Diagramas de Gantt (gantt)
Perfectos para la gestión de proyectos y hojas de ruta (roadmaps).
title: Define el título del gráfico.dateFormat: El formato de fecha que usarás (ej.YYYY-MM-DD).section: Organiza las tareas en grupos.- Etiquetas de tareas:
active,done,crit(crítico),after [id](dependencia).
Ejemplo de Diagrama de Gantt
Fragmento de código
gantt
title Plan de Lanzamiento de Software
dateFormat YYYY-MM-DD
section Desarrollo
Diseño de Arquitectura :done, des1, 2026-06-01, 2026-06-05
Desarrollo del Backend :active, des2, after des1, 10d
Desarrollo del Frontend : des3, after des1, 12d
section Pruebas
Pruebas QA : qa1, after des3, 5d
Lanzamiento Beta :crit, beta, after qa1, 2d
Ejemplo:
gantt
title Plan de Lanzamiento de Software
dateFormat YYYY-MM-DD
section Desarrollo
Diseño de Arquitectura :done, des1, 2026-06-01, 2026-06-05
Desarrollo del Backend :active, des2, after des1, 10d
Desarrollo del Frontend : des3, after des1, 12d
section Pruebas
Pruebas QA : qa1, after des3, 5d
Lanzamiento Beta :crit, beta, after qa1, 2d
6. Diagramas de Relación de Entidades / ERD (erDiagram)
Se usan para modelar bases de datos relacionales (tablas, llaves y cardinalidades).
Cardinalidades:
||: Uno y solo uno|o: Uno o ceroo{: Cero o muchos}{: Muchos a muchos
Ejemplo de Diagrama ERD
Fragmento de código
erDiagram
USUARIO {
int id PK
string nombre
string email
}
PEDIDO {
int id PK
int usuario_id FK
date fecha
float total
}
USUARIO ||--o{ PEDIDO : "hace"
Ejemplo:
erDiagram
USUARIO {
int id PK
string nombre
string email
}
PEDIDO {
int id PK
int usuario_id FK
date fecha
float total
}
USUARIO ||--o{ PEDIDO : "hace"
Otro Fragmento de codigo:
erDiagram
%% --- ENTIDADES Y ATRIBUTOS ---
CLIENTE {
int id_cliente PK
string nombre
string email
string telefono
string direccion
}
PEDIDO {
int id_pedido PK
int id_cliente FK
date fecha_pedido
string estado
float total
}
PRODUCTO {
int id_producto PK
string nombre_prod
string descripcion
float precio
int stock
}
DETALLE_PEDIDO {
int id_detalle PK
int id_pedido FK
int id_producto FK
int cantidad
float precio_unitario
}
%% --- RELACIONES Y CARDINALIDADES ---
%% Un cliente puede hacer cero o muchos pedidos. Un pedido pertenece a un solo cliente.
CLIENTE ||--o{ PEDIDO : "realiza"
%% Un pedido tiene uno o muchos detalles. Un detalle pertenece a un solo pedido.
PEDIDO ||--|{ DETALLE_PEDIDO : "contiene"
%% Un producto puede estar en cero o muchos detalles de pedido. Un detalle corresponde a un solo producto.
PRODUCTO ||--o{ DETALLE_PEDIDO : "se incluye en"
Ejemplo:
erDiagram
%% --- ENTIDADES Y ATRIBUTOS ---
CLIENTE {
int id_cliente PK
string nombre
string email
string telefono
string direccion
}
PEDIDO {
int id_pedido PK
int id_cliente FK
date fecha_pedido
string estado
float total
}
PRODUCTO {
int id_producto PK
string nombre_prod
string descripcion
float precio
int stock
}
DETALLE_PEDIDO {
int id_detalle PK
int id_pedido FK
int id_producto FK
int cantidad
float precio_unitario
}
%% --- RELACIONES Y CARDINALIDADES ---
%% Un cliente puede hacer cero o muchos pedidos. Un pedido pertenece a un solo cliente.
CLIENTE ||--o{ PEDIDO : "realiza"
%% Un pedido tiene uno o muchos detalles. Un detalle pertenece a un solo pedido.
PEDIDO ||--|{ DETALLE_PEDIDO : "contiene"
%% Un producto puede estar en cero o muchos detalles de pedido. Un detalle corresponde a un solo producto.
PRODUCTO ||--o{ DETALLE_PEDIDO : "se incluye en"
7. Gráficos XY
Los gráficos XY (también conocidos como diagramas de dispersión o Scatter Plots en inglés) se introdujeron en las versiones recientes de Mermaid. Son herramientas excelentes cuando necesitas visualizar la relación o correlación entre dos variables numéricas directamente en tu documentación, sin salir de Obsidian. A continuación, un ejemplo completo basado en un escenario del mundo real: la relación entre las horas de estudio de un grupo de estudiantes y la calificación que obtuvieron en un examen. Codigo:
xychart-beta
title "Relación: Horas de Estudio vs. Calificación Examen"
%% Configuración del Eje X (Variable Independiente)
x-axis "Horas de Estudio" [2, 4, 6, 8, 10, 12, 14, 16]
%% Configuración del Eje Y (Variable Dependiente)
y-axis "Calificación (0 - 100)" 0 --> 100
%% Renderizado de los datos (Gráfico XY)
bar [45, 52, 65, 70, 82, 88, 95, 98]
line [45, 52, 65, 70, 82, 88, 95, 98]
Ejemplo:
xychart-beta
title "Relación: Horas de Estudio vs. Calificación Examen"
%% Configuración del Eje X (Variable Independiente)
x-axis "Horas de Estudio" [2, 4, 6, 8, 10, 12, 14, 16]
%% Configuración del Eje Y (Variable Dependiente)
y-axis "Calificación (0 - 100)" 0 --> 100
%% Renderizado de los datos (Gráfico XY)
bar [45, 52, 65, 70, 82, 88, 95, 98]
line [45, 52, 65, 70, 82, 88, 95, 98]