Diagram Maker›Language Reference
📐

Language Reference

Full syntax — every block, field, and diagnostic code

Taalreferentie

Volledige syntaxisreferentie voor Datro DSL-bestanden (.dtro-Dossiers). Elk bloktype, elk veld, elke diagnosecode alles op één plek.

23 Knottypen21 Buitensoorten6 BeperkingseisenWCAG 2.1 AA/AAA

Magische koppen

Ieder .dtro-File moet beginnen met de Magic Header in lijn 1. De parser geeft E100 terug te brengen als het ontbreekt of fout is.

DATRO
#!DATRO 1.0
Voorwaardelijke eerste regel – `1.0` is de huidige versie van de specificatie

Metablokken

Optioneel metadata op documentniveau. Geproduceert I003-Informatie wanneer deze wordt weggelaten. Alle velden behalve kind zijn optieve tekens/arrays.

DATRO
#!DATRO 1.0

meta {
  title:       "Payment Service"
  version:     "2.1.0"
  description: "Handles card and crypto charges"
  author:      "jane@example.com"
  owner:       "payments-team"
  tags:        ["payments", "critical"]
  sla:         "99.95%"
  criticality: "P0"
  kind:        architecture
}
FieldTypeRequiredDescription
titlestringNoMensenleesbare grafiek titels
versionstringNoSemantische versie van de grafiek
descriptionstringNoVrije tekstbeschrijving
authorstringNoNaam of e-mail van de auteur
ownerstringNoTeam of verantwoordelijke
tagsstring[]NoAanvaardbare classificatiedagen
slastringNoDienstniveau-Ziel, z.B. "99.9%"
criticalitystringNoGraad van kritiek: "P0" | "high" | "medium" | "low"
kindDiagramKind
"architecture""mindmap""state""sequence""algorithm"
NoGrafiekvariant

Knotblokken

Vermeld een entiteit in het schema. Elke knoop heeft een unieke ID, een semantieke type, die zijn aangepaste vorm en standaardkleur regelt, en een optionele attrs-Metadata-blok.

DATRO
# Minimal
node api_gw { type: gateway label: "API Gateway" }

# With attrs block
node payment_svc {
  type:  service
  label: "Payment Service"
  attrs {
    tech:       "nestjs"
    owner:      "payments-team"
    deprecated: false
    sla:        "99.95%"
  }
}

# Inline attrs (alternative syntax)
node db { type: database label: "Payments DB"  attrs { tech: "postgres" } }
FieldTypeRequiredDescription
ididentifierYesEenvoudige knopkenmerking alphanumerisch + onderstreep
typeNodeType
"service""database""queue""cache""gateway""user""actor""system""external""process""storage""function""broker""scheduler""load_balancer""cdn""dns""firewall""client""mobile""web""iot""unknown"
NoSemantische nodenklasse
labelstringNoToon de tekst die in het diagram wordt weergegeven
groupidentifierNoGroeps-ID van deze knooppunt (alternatief voor group.members)
attrsAttrMapNoMetadata met willekeurige sleutelwaarden tekenreeks, cijfers, boole waarden of arrays
ℹ️

23 Knottypen

Alle 23 waarden: service database queue cache gateway user actor system external process storage function broker scheduler load_balancer cdn dns firewall client mobile web iot unknown.

Randblock

Verklart een relatie tussen twee knopen. De kantrichting wordt rechtstreeks in de verklaring geschreven: -> (georiënteerd), <-> (bijrichting) of -- (Niet geregeld).

DATRO
# Minimal
edge api_gw -> payment_svc { kind: http }

# Full metadata
edge payment_svc -> stripe {
  kind:   http
  label:  "charge API"
  weight: 2.0
  async:  false
  attrs { sla: "200ms" }
}

# Bidirectional edge
edge cache <-> service { kind: read }

# Undirected edge
edge svc_a -- svc_b { kind: depends }
FieldTypeRequiredDescription
fromidentifierYesSource node-ID
directionEdgeDir
"->""<->""--"
YesPfeiltyp met in-line teksten
toidentifierYesDoelknop-ID
kindEdgeKind
"http""grpc""graphql""websocket""tcp""udp""query""event""publish""subscribe""stream""call""read""write""deploys""monitors""depends""extends""implements""triggers""unknown"
NoSemantisch relatietype bepaalt kleur en stijl
labelstringNoKorte tekst die wordt weergegeven op de randlijn
weightnumberNoRelatief verkeersgewicht zwaarder kanten worden dikker
asyncbooleanNoBij true de rand is gestript (fire-and-forget)).
attrsAttrMapNoGewenst metadata wordt doorgestuurd naar JSON IR en tooltips
ℹ️

21 Buitensoorten

Alle 21 waarden: http grpc graphql websocket tcp udp query event publish subscribe stream call read write deploys monitors depends extends implements triggers unknown.

Groepblok

Groepeerde verwante nodes in een aangegeven subdiagramveld. Een knop mag niet meer dan één groep behoren – E403 wordt veroorzaakt bij conflicten. Groepen kunnen gesloten zijn: een lid-ID kan naar een andere groep-ID verwijzen.

DATRO
group data_tier {
  label:   "Data Layer"
  members: [payments_db, fraud_cache, audit_log]
  attrs { compliance: "PCI-DSS" }
}

# Alternative: assign group on the node
node payments_db {
  type:  database
  label: "Payments DB"
  group: data_tier
}
FieldTypeRequiredDescription
ididentifierYesEenvoudige groepsbenamers
labelstringNoIndicatie voor het subdiagramveld
membersidentifier[]NoInkluderende knop- of groeps-ID's hebben voorrang node { group: X }
attrsAttrMapNoGewenst metadata

Beperkingspakket

Verklart een architectuurregel die de validator op basis van de IR beoordeelt. Inbreuken veroorzaken E501 (of W501, Wanneer severity: warn). Het veld rule gebruikt een scherpe drie-token grammatika.

DATRO
# Prohibition: databases may not call external services
constraint {
  id:       "no-db-external"
  rule:     "database !-> external"
  message:  "Databases must not connect directly to external APIs"
  severity: error
}

# Requirement: every gateway must connect to a service
constraint {
  rule:     "gateway -> service"
  message:  "Each gateway must route to at least one service"
  severity: warn
}

# Membership: all databases must be in the data_tier group
constraint {
  rule:     "database in data_tier"
  message:  "All database nodes must belong to the data_tier group"
  severity: error
}
FieldTypeRequiredDescription
idstringNoOptionele, voor mensen leesbare regelnummers
rulestringYesSUBJECT VERB OBJECT – Zie onderstaande tabel
messagestringNoGebruikersgemaakte melding die wordt weergegeven in de diagnose wanneer de regel wordt overtreden
severityConstraintSeverity
"error""warn"
NoGraad van diagnose bij inbreuk

Beperkingseisen

  • `!->` – geen SUBJECT-Een knop mag een gericht rand hebben op een of andere OBJECT-Knotten.
  • `->` – elk SUBJECT-Een knop moet ten minste een gericht rand hebben aan een OBJECT-Knotten.
  • `!<->` – tussen de knopen SUBJECT en OBJECT Er mag geen tweerichtingsrand zijn.
  • `<->` – elk SUBJECT-Een knop moet een tweedirectionele rand hebben aan een OBJECT-Knotten.
  • `in` – elk SUBJECT-Knoten moet lid zijn van de groep OBJECT zijn.
  • `!in` – geen SUBJECT-Knoten mag lid zijn van de groep OBJECT zijn.
💡

Onderwerp- en objecttokens

Elk token kan een knoptype hebben (`database`, `external`, …), een groep-ID (z. B. data_tier) of * (De plaatshouder voor elke knop).

Block importeren

Verdeel grote grafieken in meerdere .dtro-Files op. De resolver brengt de ingevoerde IR voor validatie samen met de hogere IR. Gebruik as voor de naamruimte en expose, om bepaalde ID's op de witte lijst te plaatsen.

DATRO
# Import everything from another .dtro file
import "auth.dtro"

# Import with a namespace alias — IDs become auth.user_service, etc.
import "auth.dtro" as auth

# Import only specific IDs (whitelist)
import "infra.dtro" as infra expose [load_balancer, cdn]
FieldTypeRequiredDescription
pathstringYesRelatief of absoluut pad naar de file .dtro.
asidentifierNoNamespace alias alle ingevoerde ID's wordt alias.id Vooraf aangesteld.
exposeidentifier[]NoWhitelist alleen deze ID's worden samengevoegd in de overige IR

Layoutblok

Aanwijzingen voor de weergever om het diagram te plaatsen. Alle velden zijn optioneel de renderer gebruikt zinvolle standaard waarden wanneer het blok wordt weggelaten.

DATRO
layout {
  direction:       LR          # LR | RL | TB | BT
  algo:            dagre        # dagre | dot | elk | force | none
  node_sep:        60           # px between nodes in the same rank
  rank_sep:        120          # px between ranks
  margin:          20           # graph margin in px
  cluster_padding: 16           # padding inside group boxes
}
FieldTypeRequiredDescription
directionLayoutDirection
"LR""RL""TB""BT"
NoGrafiek maken van de rivierrichting
algoLayoutAlgo
"dagre""dot""elk""force""none"
NoLayout-algoritme
node_sepnumberNoMinimaal pixel tussen naburige knopen van dezelfde rang
rank_sepnumberNoMinimaal pixel tussen de rangen
marginnumberNoGrafiek in pixels
cluster_paddingnumberNoAanvullende afstand binnen de groepsbeperingsraam

Onderwerpblok

Beheer de visuele verschijning van het aangepaste diagram. De palette schrijft hex-kleuren voor knottypen. Het onderblok accessibility maakt de automatische WCAG 2.1 contrastcontrole mogelijk.

DATRO
theme {
  name: "Corporate"

  palette {
    service:    "#D0E8FF"
    database:   "#FFE8C0"
    gateway:    "#FFD0D0"
    queue:      "#E8D0FF"
    cache:      "#C0FFE8"
    external:   "#F0F0F0"
    background: "#FFFFFF"
  }

  typography {
    font_family:      "Inter, sans-serif"
    node_font_size:   11
    edge_font_size:   9
    label_font_weight: "600"
  }

  accessibility {
    min_contrast:    AA          # AA | AAA | none
    max_label_length: 60
  }
}
💡

Automatische schriftelijke kleur

De DOT-exporteur selecteert automatisch zwarte of witte tekst voor elke knopvelling met behulp van de relatieve luminantieformule van WCAG 2.1. Je hoeft nooit een afzonderlijke tekstkleur vast te stellen.

Stilblok

Fein gegradeerde overschrijvingen per element, toegepast op het onderwerp. Regelscascade: by_id overschrijft by_type. Elk subblok geeft een sleutel tot een attributie toe.

DATRO
style {
  # Override by node type
  by_type {
    database { fill: "#FFF3CD"  stroke: "#E6A817"  shape: cylinder }
    external { fill: "#F8F9FA"  stroke: "#6C757D"  dash: true }
  }

  # Override individual node by id
  by_id {
    stripe { fill: "#635BFF"  stroke: "#4B44CC" }
  }

  # Style edge kinds
  by_edge_kind {
    query   { color: "#E6A817"  width: 2 }
    publish { color: "#198754"  dash: true }
  }

  # Style edges that carry a boolean attr set to true
  by_edge_attr {
    async { dash: true  color: "#ADB5BD" }
  }
}
FieldTypeRequiredDescription
by_typeRecord<NodeType, StyleProps>NoStijlen die op alle knopen van een bepaald type worden toegepast
by_idRecord<id, StyleProps>NoStijlen toegepast op een bepaalde knop-ID hoogste prioriteit
by_edge_kindRecord<EdgeKind, StyleProps>NoStijlen die aan alle kanten van een bepaald type worden toegepast
by_edge_attrRecord<attrName, StyleProps>NoStijlen die aan de rand worden toegepast waarbij het benoemde boolese attribuut true is

Diagnosecodes

Alle diagnoses omvatten een code, severity, message en een optionele line:col-Locatie. De volgende tabel bevat elke code die de toolchain kan uitbrengen.

Fouten (E)×××)

  • `E100` – Der Magic-Header #!DATRO 1.0 ontbreekt of fout is
  • `E201` – Dubbelknop-ID
  • `E202` – Knoten verwijst naar een onbekende groeps-ID
  • `E301` – Randenknoppen from niet gevonden
  • `E302` – Randenknoppen to niet gevonden
  • `E303` – Kanten weight is negatief
  • `E401` – Dubbele groeps-ID
  • `E402` – Groep members verwijst naar een onbekende ID
  • `E403` – Een knooppunt is toegewezen aan meer dan één groep
  • `E404` – Geïdentificeerd verzameling van cirkelvormige groepen
  • `E500` – De beperkende regel bevat een syntaxisfout
  • `E501` – De beperking wordt overtreden (gewicht weerspiegelt de eigen severity de beperking te weerstaan)

Waarschuwingen (B)×××)

  • `W301` – Rand dupliceren (gelijk aan / tot / soort / aanduiding))
  • `W501` – De beperkende regel gebruikt een onbekend werkwoord
  • `W601` – Overschrijding van de noden max_label_length (Standard 80 tekens)
  • `W602` – De kleur van het themapalet ligt onder het WCAG AA-contrast. (4,5:1)
  • `W603` – De kleur van het themapalet ligt onder het WCAG AAA-contrast. (7,0:1)

Informatie (I)×××)

  • `I001` – Geïsoleerde knopen geen grenzen verbonden
  • `I002` – Vluchtige groep geen leden verklaard
  • `I003` – Geen enkele meta-Block voor documentatie aanbevolen
  • `I601` – Geen thema-palet gedefinieerd contrastcontroles overgeslagen

Volgende stappen

  • Gebruik CLI Reference voor het valideren, formateren en exporteren via de command-line.
  • Plaats diagrammen in Markdown met de [Markdown plugin](/docs/datro-markdown.
  • Ga terug naar Quick Start voor een stapsgewijze handleiding.
Maak de diagrammaker open

Probeer de volledige taal live uit voeg een snippet boven toe en valideer het onmiddellijk.

Schema v1 · Updated October 2026