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.
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 1.0Metablock
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 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
}| Field | Type | Required | Default | Description |
|---|---|---|---|---|
title | string | No | — | Läsbara diagramtitel för människor |
version | string | No | — | Semantisk version av diagrammet |
description | string | No | — | Fria textbeskrivningar |
author | string | No | — | Författarens namn eller e-post |
owner | string | No | — | Team eller ansvarig |
tags | string[] | No | — | Tilltalande klassificeringsdagar |
sla | string | No | — | Tjänstnivå-Ziel, z.B. "99.9%" |
criticality | string | No | — | Kritisk nivå: "P0" "Hög" "Mid" "Låg""` |
kind | DiagramKind "architecture""mindmap""state""sequence""algorithm" | No | architecture | Diagramvariant |
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.
# 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" } }| Field | Type | Required | Default | Description |
|---|---|---|---|---|
id | identifier | Yes | — | Enklara knutkännanden alfanumeriskt + undertryck |
type | NodeType "service""database""queue""cache""gateway""user""actor""system""external""process""storage""function""broker""scheduler""load_balancer""cdn""dns""firewall""client""mobile""web""iot""unknown" | No | unknown | Semantiska knopskategorier |
label | string | No | (node id) | Visa texten i diagrammet |
group | identifier | No | — | Gruppen-ID som tillhör den här knoppen (alternativ till group.members)) |
attrs | AttrMap | No | — | Lä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).
# 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 }| Field | Type | Required | Default | Description |
|---|---|---|---|---|
from | identifier | Yes | — | Källaknot-ID |
direction | EdgeDir "->""<->""--" | Yes | — | Inline-skriven pfeiltyp |
to | identifier | Yes | — | Identifieringsnummer för mållänkar |
kind | EdgeKind "http""grpc""graphql""websocket""tcp""udp""query""event""publish""subscribe""stream""call""read""write""deploys""monitors""depends""extends""implements""triggers""unknown" | No | unknown | Semantisk relation typ bestämmer färg och stil |
label | string | No | — | Kort text som visas på kantlinjen |
weight | number | No | 1.0 | Relativt trafikvikt tyngre kanter blir tjockare |
async | boolean | No | false | I true visas kanten färgad (Fire-and-forget). |
attrs | AttrMap | No | — | Lä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.
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
}| Field | Type | Required | Default | Description |
|---|---|---|---|---|
id | identifier | Yes | — | Enklara gruppbeteckningar |
label | string | No | (group id) | Anmärkning för underdiagramfeltet |
members | identifier[] | No | [] | Inkluderande knop- eller grupp-ID:er har företräde framför node { group: X } |
attrs | AttrMap | No | — | Tilltalande 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.
# 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
}| Field | Type | Required | Default | Description |
|---|---|---|---|---|
id | string | No | — | Optionella, mänskligt läsbara regelbeteckningar |
rule | string | Yes | — | `SUBJECT VERB OBJECT se tabellen nedan |
message | string | No | — | Användardefinierat meddelande som visas i diagnosen om någon överträdelse görs |
severity | ConstraintSeverity "error""warn" | No | error | Diagnostisk svårighetsgrad vid överträdelse |
Begränsningsregler
- `!->` – Ingen
SUBJECT-knopp får ha en riktad kant mot någonOBJECT-knopp. - `->` – Varje
SUBJECT-knot ska ha minst en riktad kant mot enOBJECT-knot. - `!<->` – Det får inte finnas någon tvåriktad kant mellan knopparna
SUBJECTochOBJECT. - `<->` – Varje
SUBJECT-knot ska ha en binärriktad kant mot enOBJECT-knot. - `in` varje
SUBJECT-knot ska vara medlem av gruppenOBJECT. !IngenSUBJECT-knopp får vara medlem av gruppenOBJECT`.
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.
# 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]| Field | Type | Required | Default | Description |
|---|---|---|---|---|
path | string | Yes | — | Relativt eller absolut väg till filen .dtro. |
as | identifier | No | — | Namespace-alias alla importerade ID:er prioriteras alias.id. |
expose | identifier[] | No | — | Whitelist 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.
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
}| Field | Type | Required | Default | Description |
|---|---|---|---|---|
direction | LayoutDirection "LR""RL""TB""BT" | No | LR | Grafikera flodväg |
algo | LayoutAlgo "dagre""dot""elk""force""none" | No | dagre | Layoutalgoritm |
node_sep | number | No | 60 | Minsta pixel mellan närliggande knop i samma rang |
rank_sep | number | No | 120 | Minsta pixel mellan raderna |
margin | number | No | 20 | Bilder i pixlar |
cluster_padding | number | No | 16 | Ytterligare 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.
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.
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" }
}
}| Field | Type | Required | Default | Description |
|---|---|---|---|---|
by_type | Record<NodeType, StyleProps> | No | — | Styler som används på alla knoppar av en viss typ |
by_id | Record<id, StyleProps> | No | — | Styler som används för en viss knop-ID högsta prioritet |
by_edge_kind | Record<EdgeKind, StyleProps> | No | — | Styler som används på alla kanter av en viss typ |
by_edge_attr | Record<attrName, StyleProps> | No | — | Stylor 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.0saknas eller är felaktig - `E201` Dubbelknot ID
- `E202` Knoppar hänvisar till en okänd grupp-ID
- `E301` Edge-knoppar
frominte hittats - `E302` Edge-knot
tointe hittats - `E303` Kante
viktär negativ - `E401` Dubbelgrupp-ID
- `E402` grupp
membershä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
severityav 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.
Prova det fullständiga språket live ut Lägg in ett eventuellt snippet ovanpå och validera det omedelbart.