Diagram Maker›Language Reference
📐

Language Reference

Full syntax — every block, field, and diagnostic code

Språksreferens

Fullständig syntaxreferens för Datro DSL-filer (.dtro-filer). Varje blocktyp, varje fält, varje diagnoskod allt på en plats.

23 Knuttyper21 Kantenformer6 BegränsningsreglerWCAG 2.1 AA/AAA

Magiska header

Varje .dtro-fil** måste börja med Magic Header i linje 1. Parseraren returnerar E100 om den saknas eller är fel.

DATRO
#!DATRO 1.0
Första raden `1.0` är den aktuella specifikationsversionen

Metablock

Optionella metadata på dokumentnivå. Genererar en I003-information om den lämnas bort. Alla fält förutom kind är valbara tecknade rader/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
titlestringNoLäsbara diagramtitel för människor
versionstringNoSemantisk version av diagrammet
descriptionstringNoFria textbeskrivningar
authorstringNoFörfattarens namn eller e-post
ownerstringNoTeam eller ansvarig
tagsstring[]NoTilltalande klassificeringsdagar
slastringNoTjänstnivå-Ziel, z.B. "99.9%"
criticalitystringNoKritisk nivå: "P0" "Hög" "Mid" "Låg""`
kindDiagramKind
"architecture""mindmap""state""sequence""algorithm"
NoDiagramvariant

Knötblock

Ange en enhet i diagrammet. Varje knop har ett unikt ID, en semantisk type som styr dess omvandlade form och standardfärg och en valfri attrs-block för metadata.

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
ididentifierYesEnklara knutkännanden alfanumeriskt + undertryck
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"
NoSemantiska knopskategorier
labelstringNoVisa texten i diagrammet
groupidentifierNoGruppen-ID som tillhör den här knoppen (alternativ till group.members))
attrsAttrMapNoLämpliga nyckelvärde metadata tecken, siffror, bokstäver eller arrays
ℹ️

23 Knuttyper

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

Randblock

Förklara ett förhållande mellan två knop. Den kantliga riktningen skrivs direkt i deklarationen: ->), <-> (bidirektionell) eller --` (oändlig).

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
fromidentifierYesKällaknot-ID
directionEdgeDir
"->""<->""--"
YesInline-skriven pfeiltyp
toidentifierYesIdentifieringsnummer för mållänkar
kindEdgeKind
"http""grpc""graphql""websocket""tcp""udp""query""event""publish""subscribe""stream""call""read""write""deploys""monitors""depends""extends""implements""triggers""unknown"
NoSemantisk relation typ bestämmer färg och stil
labelstringNoKort text som visas på kantlinjen
weightnumberNoRelativt trafikvikt tyngre kanter blir tjockare
asyncbooleanNoI true visas kanten färgad (Fire-and-forget).
attrsAttrMapNoLämpliga metadata vidarebefordras till JSON IR och verktygstips
ℹ️

21 Kantenformer

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

Gruppenblock

Grupperade relaterade knoppar i ett märkt underdiagramfält. En knopp får vara en grupp i högsta utsträckning `E403. Grupper kan vara sammankopplade: En medlemsid kan hänvisa till en annan gruppid.

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
ididentifierYesEnklara gruppbeteckningar
labelstringNoAnmärkning för underdiagramfeltet
membersidentifier[]NoInkluderande knop- eller grupp-ID:er har företräde framför node { group: X }
attrsAttrMapNoTilltalande metadata

Begränsningsblock

Ange en arkitekturregel som valideraren bedömer med hjälp av IR. Också om det inte är möjligt att förhindra detta). Fältet rule` använder en tydlig tre-tokens grammatik.

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
idstringNoOptionella, mänskligt läsbara regelbeteckningar
rulestringYes`SUBJECT VERB OBJECT se tabellen nedan
messagestringNoAnvändardefinierat meddelande som visas i diagnosen om någon överträdelse görs
severityConstraintSeverity
"error""warn"
NoDiagnostisk svårighetsgrad vid överträdelse

Begränsningsregler

  • `!->` – Ingen SUBJECT-knopp får ha en riktad kant mot någon OBJECT-knopp.
  • `->` – Varje SUBJECT-knot ska ha minst en riktad kant mot en OBJECT-knot.
  • `!<->` – Det får inte finnas någon tvåriktad kant mellan knopparna SUBJECT och OBJECT.
  • `<->` – Varje SUBJECT-knot ska ha en binärriktad kant mot en OBJECT-knot.
  • `in` varje SUBJECT-knot ska vara medlem av gruppen OBJECT.
  • !Ingen SUBJECT-knopp får vara medlem av gruppen OBJECT`.
💡

Subjekt- och objekttoken

Varje token kan ha en knottyp (database, external, ...), en grupp-ID (t.ex. att vara data_tier) eller * (platsinnehavare för varje knop).

Import av block

Delar stora diagram till flera .dtro-filer. Den resolverande kombinerar den importerade IR-värdet med den överlägsna IR-värdet före validering. Använd as för namnrummet och expose för att sätta vissa ID på listorna.

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
pathstringYesRelativt eller absolut väg till filen .dtro.
asidentifierNoNamespace-alias alla importerade ID:er prioriteras alias.id.
exposeidentifier[]NoWhitelist endast dessa ID:ar samlas in i den överordnade IR

Layoutblock

Instruktioner för återgivaren om hur diagrammet ska anpassas. Alla fält är valbara Renderaren använder rimliga standardvärden när blocken lämnas bort.

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"
NoGrafikera flodväg
algoLayoutAlgo
"dagre""dot""elk""force""none"
NoLayoutalgoritm
node_sepnumberNoMinsta pixel mellan närliggande knop i samma rang
rank_sepnumberNoMinsta pixel mellan raderna
marginnumberNoBilder i pixlar
cluster_paddingnumberNoYtterligare avstånd inom gruppbegränsningsramen

Tematblock

Styr den visuella utseendet på det omvandlade diagrammet. Den palette ordnar knotttyper till hex-färger. Underblock accessibility möjliggör automatisk WCAG 2.1 kontrastprovning.

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
  }
}
💡

Automatisk skriftfärg

DOT-exportern väljer automatiskt svart eller vitt text för varje knopfyllning genom att använda WCAG 2.1:s relativa ljusformel. Du behöver aldrig ange en separat textfärg.

Stylblock

Fint graderade överskrifter per element som tillämpas efter ämnet. Regel kaskade: by_id överskrev by_type. Varje underblock ordnar en nyckel till en egenskapsfördelning.

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>NoStyler som används på alla knoppar av en viss typ
by_idRecord<id, StyleProps>NoStyler som används för en viss knop-ID högsta prioritet
by_edge_kindRecord<EdgeKind, StyleProps>NoStyler som används på alla kanter av en viss typ
by_edge_attrRecord<attrName, StyleProps>NoStylor som används på kantar där den benämnda boolean attributet true är

Diagnoskoder

Alla diagnoser omfattar en code, severity, message och en valfri line:col-plats. I tabellen nedan finns alla koder som verktygskedjan kan utge.

Misstag (E)×××)

  • `E100` Magic-header #!DATRO 1.0 saknas eller är felaktig
  • `E201` Dubbelknot ID
  • `E202` Knoppar hänvisar till en okänd grupp-ID
  • `E301` Edge-knoppar from inte hittats
  • `E302` Edge-knot to inte hittats
  • `E303` Kante vikt är negativ
  • `E401` Dubbelgrupp-ID
  • `E402` grupp members hänvisar till en okänd ID
  • `E403` Knoppar tilldelas mer än en grupp
  • `E404` Kastning av cirkulära grupper identifierad
  • `E500` Begränsningsregeln visar ett syntaxfel
  • `E501` begränsningsregel bryts (svårighet speglar egen severity av begränsningen)

Varningar×××)

  • `W301` Duplicera kanten (liknande till/till/art/beteckning)
  • `W501` Begränsningsregeln använder ett okänt verb
  • `W601` Knutbeteckning överstiger max_label_length (standard 80 tecken)
  • `W602` Färgen på temat är under WCAG AA kontrast (4,5:1)
  • `W603` Färgen på temat är under WCAG AAA kontrast (7,0:1)

Upplysningar (I)×××)

  • `I001` Isolade knoppar inga kantar är anslutna till den
  • `I002` Tull grupp inga medlemmar deklarerade
  • `I003` Ingen meta-block rekommenderas för dokumentation
  • `I601` Inga definierade ämnesområden Överskjutna kontrastprov

Nästa steg

  • Använd CLI Reference för att validera, formatera och exportera via kommandoträckarna.
  • Lägg in diagram i Markdown med Markdown plugin.
  • Gå tillbaka till [quickstart] (/docs/datro-quickstart) för en steg för steg guide.
Öppna diagramtillverkaren

Prova det fullständiga språket live ut Lägg in ett eventuellt snippet ovanpå och validera det omedelbart.

Schema v1 · Updated October 2026