Diagram Maker›Language Reference
📐

Language Reference

Full syntax — every block, field, and diagnostic code

Språklig referanse

Full syntaxreferanse for Datro DSL-filer (.dtro-Filer). Hver blokktype, hvert felt, hver diagnosekode alt på ett sted.

23 Knottyper21 Kantenarter6 BegrensningsreglerWCAG 2.1 AA/AAA

Magiske overskrifter

Alle .dtro-Fil må starte med Magic-header i linje 1. Parseren gir E100 Retur hvis den mangler eller er feilaktig.

DATRO
#!DATRO 1.0
Nødvendig første linje – `1.0` er den aktuelle spesifikasjonsversjonen

Metablokk

Valgfrie metadata på dokumentnivå. Gir informasjonsmeldingen I003 dersom blokken utelates. Alle felt unntatt kind er valgfrie strenger eller matriser.

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
titlestringNoFor mennesker lesbare diagrammetitler
versionstringNoSemantisk versjon av diagrammet
descriptionstringNoFremstilling på basis av bruttekst
authorstringNoForfatteren navn eller e-post
ownerstringNoTeam eller ansvarlig
tagsstring[]NoVeldig populære klassifikasjonsdatoer
slastringNoTjenestenivå-Ziel, z.B. "99.9%"
criticalitystringNoKritikknivå: "P0" "High" "Medium" "Low""`
kindDiagramKind
"architecture""mindmap""state""sequence""algorithm"
NoGrafikvariant

Knotblokker

Deklarerer en enhet i diagrammet. Hver knute har en unik ID, en semantisk type, som styrer sin omformede form og standardfarge, og en valgfri attrs-Block for 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
ididentifierYesEnkelknuttkennelse Alphanumerisk + understrekning
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"
NoSemantisk knopskategori
labelstringNoVis den teksten som vises i diagrammet
groupidentifierNoGruppen-ID som tilhører denne knuten (alternativ til group.members))
attrsAttrMapNoNødvendige nøkkelværdi-metadata tegneserier, tall, bokstavelige verdier eller arrays
ℹ️

23 Knottyper

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

Kantblokk

Deklarerer et forhold mellom to knopper. Den kantlige retningen blir skrevet direkte i deklarasjonen: -> (rettet), <-> (bidirectional) eller -- (Uregistert).

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
fromidentifierYesKildeknutt-ID
directionEdgeDir
"->""<->""--"
YesInline-skrevet pfeiltyp
toidentifierYesTiltak-ID
kindEdgeKind
"http""grpc""graphql""websocket""tcp""udp""query""event""publish""subscribe""stream""call""read""write""deploys""monitors""depends""extends""implements""triggers""unknown"
NoSemantisk type forhold bestemt farge og stil
labelstringNoKort tekst som vises på marginallinjen
weightnumberNoRelativt trafikkvekt tyngre kanter blir tykkere
asyncbooleanNoI true vises kanten strikket (Fire-and-forget)).
attrsAttrMapNoLykkelig metadata blir videreført til JSON IR og tooltips
ℹ️

21 Kantenarter

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

Gruppeblokk

Grupper relaterte knopper i et overskrevet underdiagramfelt. En knute må ikke tilhøre en gruppe – E403 blir utløst i konflikter. Gruppen kan være pakket: En medlem-ID kan henvise til en annen gruppe-ID.

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
ididentifierYesEnkelte gruppespesifikatorer
labelstringNoAnmeldelse for underdiagramfeltet
membersidentifier[]NoInkluderende knop- eller gruppeIDer har forrang over node { group: X }
attrsAttrMapNoLykkelige metadata

Begrensningsklokk

Utser en arkitektonisk regel som validatoren vurderer på basis av IR. Generere overtredelser E501 (eller W501, når severity: warn). Feltet rule bruker en fast tre-token grammatikk.

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
idstringNoVaksjonelle, for mennesker lesbare regelregelmenn
rulestringYes`Subject VERB Object se verbalstabellen nedenfor
messagestringNoBrukerspecifikk melding som vises i diagnosen når regelbrudd blir gjort
severityConstraintSeverity
"error""warn"
NoDiagnosemegripet i overtredelse

Begrensningsregler

  • `!->` – Ingen SUBJECT-knot må ha en rett kant mot noen OBJECT-knot.
  • `->` – Hver SUBJECT-knot skal ha minst en rett kant til en OBJECT-knot.
  • `!<->` – mellom knopene SUBJECT og OBJECT må det ikke være en bi-direktionskant.
  • `<->` – Hver SUBJECT-knot skal ha en bidirectionell kant til en OBJECT-knot.
  • `i` hver SUBJECT-knot må være medlem av gruppen OBJECT.
  • `!In` ingen SUBJECT-knot kan være medlem av gruppen OBJECT.
💡

Subjekt- og objekttokener

Hvert token kan ha en *knottype (`database`, `external`, …), en gruppe-ID** (z). B. data_tier) eller * (For å være plasssholdere for hver knop).

Import av blokk

Spliter store diagrammer i flere .dtro-Filer opp. Resolveren kombinerer den importerte IR før validering med den overordnede IR. Bruk as for navneområdet, og expose, for å sette bestemte ID-er på den hvite listen.

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 absolutt vei til filen .dtro.
asidentifierNoNamespace alias alle importerte ID'er blir forhåndsansatt alias.id.
exposeidentifier[]NoWhitelist bare disse ID'ene blir samlet i den overordnede IR

Lageblokk

Informasjon til returneren om hvordan diagrammet skal arrangeres. Alle feltene er valgfrie returneren bruker fornuftige standardverdier når blokken blir slettet.

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"
NoFor å illustrere flysiden
algoLayoutAlgo
"dagre""dot""elk""force""none"
NoLayout-algoritme
node_sepnumberNoMindste pixel mellom naboler i samme rang
rank_sepnumberNoMindste pixel mellom rangene
marginnumberNoGrafikkjøp i pixeler
cluster_paddingnumberNoYtterligere avstand innenfor gruppens grenser

Temablokke

Styr den visuelle utseendet på det returnerte diagrammet. Den palette Ordner knotttyper med hex farger. Underblokken accessibility muliggjør automatisk WCAG 2.1 kontrastkontroll.

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

Automatisert skriftfarge

DOT-eksportøren velger automatisk svart eller hvit tekst for hver knutefylling ved å bruke WCAG 2.1's relative lysformel. Du trenger aldri å velge en separat tekstfarge.

Stilblokk

Fint graderte overskrifter per element som brukes etter temaet. Regelkaskade: by_id overskrev by_type. Hver underblokke ordner en nøkkel til en egenskap til.

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>NoStyles som brukes på alle knopper av et bestemt type
by_idRecord<id, StyleProps>NoStyles som brukes til en bestemt knop-ID høyeste prioritet
by_edge_kindRecord<EdgeKind, StyleProps>NoStyles som brukes på alle kanter av en bestemt art
by_edge_attrRecord<attrName, StyleProps>NoStyles som brukes på kantene, hvor det benøvede boolettributtet er true

Diagnosekoder

Alle diagnoser omfatter en code, severity, message og en valgfri line:col-Sted. I tabellen nedenfor er alle koder som verktøykjeden kan utgi.

Fejl (E)×××)

  • `E100` Magic-header #!DATRO 1.0 mangler eller er feilaktig
  • `E201` Dopplet knop-ID
  • `E202` Knot refererer til en ukjent gruppe-ID
  • `E301` Edge-knot from ikke funnet
  • `E302` Edge-knot to ikke funnet
  • `E303` Kante vekt er negativ
  • `E401` Dobbel gruppe-ID
  • `E402` gruppe members refererer til en ukjent ID
  • `E403` Knotter er tildelt mer enn en gruppe
  • `E404` Kastet av sirkulære grupper oppdaget
  • `E500` Begrensningsregelen viser en syntaxfeil
  • `E501` begrensningsregelen blir brutt (sværhetsgrad reflekterer egen severity av begrensningen))

Varminger (B)×××)

  • `W301` Klipper kant (lik til/til/art/skilt))
  • `W501` Begrensningsregelen bruker et ukjent verb
  • `W601` Knotnavnet overstiger max_label_length (standard 80 tegn))
  • `W602` Fargen på temapaletten er under WCAG AA-kontrast (4,5:1)
  • `W603` Fargen på temapaletten er under WCAG AAA-kontrast (7,0:1)

Informasjonsinformasjon (I)×××)

  • `I001` Isolasjonerte knopper ingen kanter er knyttet til den
  • `I002` Emne gruppe ingen medlemmer
  • `I003` Ingen meta-block anbefalt for dokumentasjon
  • `I601` Ingen tema-palette definert Overskutt kontrastundersøkelser

Neste skritt

Åpne diagrammakeren

Prøv det hele språket live ut legg inn et hvilket som helst stykke ovenfor og valider det umiddelbart.

Schema v1 · Updated October 2026