Guías
Architecture Actualizado el 6 de noviembre de 2026

Mermaid

Diagramas como código para la documentación: flowchart, secuencia, clases, ER, estados, Gantt, gitGraph y arquitectura con Mermaid.

  • #mermaid
  • #diagramas
  • #documentacion
  • #arquitectura

Flowchart: lo básico

mermaid
flowchart LR
    user([Usuario]) --> api[API Gateway]
    api --> fn[Lambda]
    fn --> db[(DynamoDB)]
    fn -->|error| dlq[[SQS DLQ]]
    api -.->|cache| cdn{¿En caché?}
SintaxisSignificado
flowchart TDDe arriba a abajo (igual que TB)
flowchart LRDe izquierda a derecha (también RL y BT)
A --> BFlecha simple
A --- BLínea sin flecha
A -.-> BFlecha punteada
A ==> BFlecha gruesa
A -->|texto| BFlecha con etiqueta (también A -- texto --> B)
A --o B / A --x B / A <--> BPunta de círculo, de cruz o bidireccional
A & B --> CVarios nodos a la vez

Flowchart: formas y estilos

SintaxisForma
id[Texto]Rectángulo
id(Texto)Rectángulo redondeado
id([Texto])Estadio (inicio o fin)
id[[Texto]]Subrutina
id[(Texto)]Cilindro (base de datos)
id((Texto))Círculo
id{Texto}Rombo (decisión)
id{{Texto}}Hexágono
id[/Texto/]Paralelogramo (entrada o salida)
id@{ shape: cyl, label: "DB" }Sintaxis extendida de formas (v11.3+)
mermaid
flowchart TB
    subgraph aws [Cuenta AWS]
        direction LR
        fn[Lambda] --> s3[(S3)]
    end
    client[Cliente] --> aws
    classDef critical fill:#fdd,stroke:#c00
    class s3 critical
    %% comments start with two percent signs

Usa subgraph id [Título] ... end para agrupar, classDef + class (o nodo:::clase) para estilos y comillas (id["Texto (con) símbolos"]) si la etiqueta lleva caracteres especiales.

Diagrama de secuencia

mermaid
sequenceDiagram
    autonumber
    actor U as Usuario
    participant API
    participant DB as DynamoDB
    U->>+API: POST /orders
    API->>+DB: PutItem
    DB-->>-API: OK
    alt pago aprobado
        API-->>U: 201 Created
    else pago rechazado
        API-->>U: 402 Payment Required
    end
    API-)Queue: OrderCreated (async)
    deactivate API
    Note over U,API: Timeout de 30 s
SintaxisSignificado
participant A as Alias / actor ADeclara un participante (caja) o actor (figura)
A->>B: msgMensaje síncrono (línea continua)
A-->>B: msgRespuesta (línea punteada)
A-)B: msgMensaje asíncrono (punta abierta)
A-xB: msgMensaje fallido (punta de cruz)
A->>+B / B-->>-AActiva / desactiva la barra de ejecución de B
alt ... else ... endCaminos alternativos (también opt y par ... and ... end)
loop Cada 5 min ... endBucle
Note right of A: textoNota (también left of y over A,B)
autonumberNumera los mensajes automáticamente

Diagrama de clases

mermaid
classDiagram
    class Order {
        +String id
        -Decimal total
        +addItem(item) void
        +total()$ Decimal
    }
    class Repository~T~ {
        <<interface>>
        +save(entity T) void
    }
    Order "1" *-- "1..*" OrderItem : contains
    OrderRepository ..|> Repository~T~
    Customer "1" --> "*" Order : places
SintaxisSignificado
+ / - / # / ~Visibilidad: público, privado, protegido, de paquete
método()$ / método()*Estático / abstracto
<<interface>>Estereotipo
A <|-- BHerencia: B hereda de A
A *-- BComposición
A o-- BAgregación
A --> BAsociación
A ..> BDependencia
A ..|> BRealización: A implementa B

Diagrama entidad-relación

mermaid
erDiagram
    CUSTOMER ||--o{ ORDER : places
    ORDER ||--|{ ORDER_ITEM : contains
    PRODUCT ||--o{ ORDER_ITEM : "is in"
    CUSTOMER {
        string id PK
        string email UK
        datetime created_at
    }
    ORDER {
        string id PK
        string customer_id FK
    }
SintaxisCardinalidad
||Exactamente uno
o|Cero o uno
}o / o{Cero o muchos
}| / |{Uno o muchos
--Relación identificadora (línea continua)
..Relación no identificadora (línea punteada)
PK, FK, UKClaves primaria, foránea y única en los atributos

Diagrama de estados

mermaid
stateDiagram-v2
    [*] --> Pending
    Pending --> Paid: payment ok
    Pending --> Cancelled: timeout
    Paid --> Shipped
    state Shipped {
        [*] --> InTransit
        InTransit --> Delivered
    }
    Shipped --> [*]
    Cancelled --> [*]
SintaxisSignificado
[*]Estado inicial o final
A --> B: eventoTransición con etiqueta
state A { ... }Estado compuesto
state check <<choice>>Nodo de decisión
state f <<fork>> / <<join>>Bifurcación y unión de flujos paralelos
note right of A: textoNota

Gantt

mermaid
gantt
    title Plan del sprint
    dateFormat YYYY-MM-DD
    excludes weekends
    section Backend
        Modelo de datos     :done, db, 2026-11-02, 2d
        API de pedidos      :active, api, after db, 4d
    section Frontend
        Pantalla de pedidos :ui, after db, 5d
        Revisión            :crit, after api ui, 1d
        Release             :milestone, 2026-11-13, 0d
SintaxisSignificado
dateFormat YYYY-MM-DDFormato de las fechas de entrada
section NombreAgrupa tareas
Tarea :id, 2026-11-02, 3dTarea con id, inicio y duración
after idEmpieza cuando termina otra tarea
done, active, critEstados: hecha, en curso, crítica
milestoneHito (duración 0d)
excludes weekendsNo cuenta fines de semana

gitGraph

mermaid
gitGraph
    commit id: "init"
    branch develop
    checkout develop
    commit id: "feat: login"
    branch feat/orders
    commit id: "feat: orders"
    checkout develop
    merge feat/orders
    checkout main
    merge develop tag: "v1.0.0"
SintaxisSignificado
commit id: "msg"Commit con etiqueta (también tag: "v1" y type: HIGHLIGHT)
branch nombreCrea una rama y se cambia a ella
checkout nombreCambia de rama
merge nombreFusiona la rama en la actual
cherry-pick id: "msg"Copia un commit por su id

Arquitectura (architecture-beta)

Tipo de diagrama en beta para servicios cloud: la sintaxis aún puede cambiar.

mermaid
architecture-beta
    group vpc(cloud)[VPC]
    service gw(internet)[API Gateway]
    service app(server)[Servicio] in vpc
    service db(database)[Base de datos] in vpc
    service files(disk)[Almacenamiento] in vpc
    gw:R --> L:app
    app:R --> L:db
    app:B --> T:files
SintaxisSignificado
group id(icono)[Título]Contenedor; admite in padre para anidar
service id(icono)[Título] in grupoServicio dentro de un grupo
junction idPunto de unión para repartir conexiones
a:R --> L:bConecta el lado derecho de a con el izquierdo de b
L, R, T, BLados: izquierda, derecha, arriba, abajo
cloud, database, disk, internet, serverIconos incluidos por defecto

Iconos como logos:aws-lambda requieren registrar un icon pack de Iconify, y GitHub y GitLab no lo hacen: en repos usa los iconos por defecto.

Configuración y buenas prácticas

mermaid
---
title: Flujo de pedidos
config:
  theme: neutral
---
flowchart LR
    a[Pedido] --> b[Pago]
ElementoUso
Frontmatter config:Tema (default, neutral, dark, forest, base) y opciones por diagrama
%% textoComentario que no se dibuja
"texto" en etiquetasPermite paréntesis, : y otros símbolos
<br> en etiquetasSalto de línea dentro de un nodo
click id "https://..."Enlace en un nodo (no todos los visores lo permiten)

Mantén un diagrama por idea, con menos de 15 nodos; si crece, divídelo en varios y enlázalos desde el texto.