Examples

Basic Diagram

Compile a simple D2 diagram to SVG:

import d2

svg = d2.compile("x -> y -> z")

# Write to file
with open("output.svg", "w") as f:
    f.write(svg)
Basic diagram Basic diagram

Signal Chain

A typical ADI signal chain with sensor, conditioning, and digitization:

import d2

code = """
direction: right

sensor: ADXL345 { class: sensor }
amp: LT6230 { class: amplifier }
filt: LTC1560 { class: filter-lp }
adc: AD7606 { class: adc }
dsp: ADSP-21489 { class: dsp-fpga }

sensor -> amp: Analog { class: adi-signal-analog }
amp -> filt: Amplified { class: adi-signal-analog }
filt -> adc: Filtered { class: adi-signal-analog }
adc -> dsp: SPI { class: adi-signal-digital }

clk: AD9520 { class: clock }
clk -> adc: MCLK { class: adi-signal-clock }
"""

svg = d2.compile(code, library="adi")

with open("signal-chain.svg", "w") as f:
    f.write(svg)
Signal chain example Signal chain example

Nested Subsystems

Group components into named subsystem containers:

import d2

code = """
analog-frontend: Analog Front End {
  class: adi-container

  amp: LNA { class: amplifier }
  filt: Anti-Alias { class: filter-lp }
  adc: AD7606 { class: adc }

  amp -> filt { class: adi-signal-analog }
  filt -> adc { class: adi-signal-analog }
}

digital-backend: Digital Backend {
  class: adi-container

  dsp: ADSP-21489 { class: dsp-fpga }
  dac: AD5686 { class: dac }

  dsp -> dac { class: adi-signal-digital }
}

analog-frontend -> digital-backend: SPI { class: adi-signal-digital }
"""

svg = d2.compile(code, library="adi")

with open("nested.svg", "w") as f:
    f.write(svg)
Nested subsystems example Nested subsystems example

RF Receiver

An RF receiver front end with LO generation:

import d2

code = """
direction: right

rf-frontend: RF Front End {
  class: adi-container

  lna: HMC8410 { class: amplifier }
  bpf: SAW Filter { class: filter-bp }
  mix: ADL5801 { class: mixer }

  lna -> bpf { class: adi-signal-analog }
  bpf -> mix { class: adi-signal-analog }
}

lo: LO Generation {
  class: adi-container

  pll: ADF4351 { class: pll }
  vco: VCO { class: oscillator }
  pll -> vco { class: adi-signal-analog }
}

lo -> rf-frontend.mix: LO { class: adi-signal-analog }

adc: AD9680 { class: adc }
rf-frontend -> adc: IF { class: adi-signal-analog }
"""

svg = d2.compile(code, library="adi")

with open("rf-receiver.svg", "w") as f:
    f.write(svg)
RF receiver example RF receiver example

Dark Theme

Use the dark variant for dark-background contexts:

import d2

code = """
adc: AD7606 { class: adc }
dac: AD5686 { class: dac }
adc -> dac: SPI { class: adi-signal-digital }
"""

svg = d2.compile(code, library="adi", theme="dark")

with open("dark-adi.svg", "w") as f:
    f.write(svg)
Dark theme example

Error Handling

Invalid D2 code raises RuntimeError:

import d2

try:
    svg = d2.compile("invalid {{ code", library="adi")
except RuntimeError as e:
    print(f"Compilation failed: {e}")

Programmatic Component Listing

Iterate over available components:

import d2

print("ADI components:")
for comp in d2.ADI_COMPONENTS:
    print(f"  - {comp}")

print("SW components:")
for comp in d2.SW_COMPONENTS:
    print(f"  - {comp}")

SW: Agent Pipeline

An AI agent pipeline with seed instructions, auditing, and scoring:

import d2

code = """
seeds: Seed Instructions { class: sw-container-white
  a: Instruction A { class: sw-document }
  b: Instruction B { class: sw-document }
  c: Instruction C { class: sw-document }
}

loop: Auditing Loop { class: sw-container
  agent: Auditor Agent { class: sw-agent }
  send: Send message { class: sw-action }
  tools: Create tools { class: sw-tool }
  target: Target Model { class: sw-model }

  agent -> send -> target { class: sw-flow }
  agent -> tools -> target { class: sw-flow }
  target -> agent { class: sw-flow-feedback }
}

scoring: Scoring { class: sw-container-cream
  judge: Judge { class: sw-eval }
  s1: Concerning { class: sw-score }
  s2: Sycophancy { class: sw-score }
  judge -> s1 { class: sw-flow-light }
  judge -> s2 { class: sw-flow-light }
}

seeds -> loop { class: sw-flow-data }
loop -> scoring { class: sw-flow-data }
"""

svg = d2.compile(code, library="sw")

with open("agent-pipeline.svg", "w") as f:
    f.write(svg)
SW agent pipeline example SW agent pipeline example

SW: Workflow Comparison

Side-by-side workflow comparison with color-coded steps:

import d2

code = """
manual: Manual Process { class: sw-container-cream
  s1: Formulate hypothesis { class: sw-step-white }
  s2: Design scenarios { class: sw-step-blue }
  s3: Build environments { class: sw-step-amber }
  s4: Run models { class: sw-step-green }
  s5: Analyze results { class: sw-step-white }
  s1 -> s2 -> s3 -> s4 -> s5 { class: sw-flow-light }
}

automated: Automated { class: sw-container-cream
  s1: Formulate hypothesis { class: sw-step-white }
  s2: Design scenarios { class: sw-step-blue }
  system: System { class: sw-step-amber }
  s4: Iterate { class: sw-step-green }
  s1 -> s2 -> system -> s4 { class: sw-flow-light }
}

manual.s3 -> automated.system { class: sw-flow }
"""

svg = d2.compile(code, library="sw")

with open("workflow.svg", "w") as f:
    f.write(svg)
SW workflow comparison example SW workflow comparison example

SW: Microservice Architecture

A typical backend architecture:

import d2

code = """
direction: right

client: Web App { class: sw-browser }
gw: API Gateway { class: sw-gateway }
auth: Auth Service { class: sw-server }
api: Main API { class: sw-api }
db: PostgreSQL { class: sw-database }
cache: Redis { class: sw-cache }
queue: Task Queue { class: sw-queue }
worker: Worker { class: sw-function }

client -> gw { class: sw-flow }
gw -> auth { class: sw-flow-control }
gw -> api { class: sw-flow-data }
api -> db { class: sw-flow-data }
api -> cache { class: sw-flow }
api -> queue { class: sw-flow-async }
queue -> worker { class: sw-flow-async }
worker -> db { class: sw-flow-data }
"""

svg = d2.compile(code, library="sw")

with open("microservice.svg", "w") as f:
    f.write(svg)
SW microservice architecture example SW microservice architecture example

SW: Dark Theme

Use the dark variant for dark-background contexts:

import d2

code = """
agent: Agent { class: sw-agent }
model: LLM { class: sw-model }
agent -> model { class: sw-flow }
model -> agent { class: sw-flow-feedback }
"""

svg = d2.compile(code, library="sw", theme="dark")

with open("dark.svg", "w") as f:
    f.write(svg)
SW dark theme example