D2 Output¶
We support the D2 diagramming language as an output format.
CLI¶
To generate D2 language output, use the --d2 flag.
In [1]:
Copied!
!erdantic erdantic.examples.pydantic.Party --d2
!erdantic erdantic.examples.pydantic.Party --d2
2025-10-08 22:10:25,039 | erdantic.core | INFO | Adding model 'erdantic.examples.pydantic.Party' to diagram...
"Adventurer": {
shape: class
+name: str
+profession: str
+alignment: Alignment
+level: int
}
"Party": {
shape: class
+name: str
+formed_datetime: datetime
+members: "list[Adventurer]"
+active_quest: "Optional[Quest]"
}
"Quest": {
shape: class
+name: str
+giver: QuestGiver
+reward_gold: int
}
"QuestGiver": {
shape: class
+name: str
+faction: "Optional[str]"
+location: str
}
"Party" -> "Quest": "active_quest" {
target-arrowhead.shape: cf-one
}
"Party" -> "Adventurer": "members" {
target-arrowhead.shape: cf-many
}
"Quest" -> "QuestGiver": "giver" {
target-arrowhead.shape: cf-one-required
}
Python library¶
To generate D2 output using the Python library, use the to_d2 method on EntityRelationshipDiagram.
In [2]:
Copied!
import erdantic as erd
from erdantic.examples.pydantic import Party
diagram = erd.create(Party)
print(diagram.to_d2())
import erdantic as erd
from erdantic.examples.pydantic import Party
diagram = erd.create(Party)
print(diagram.to_d2())
"Adventurer": {
shape: class
+name: str
+profession: str
+alignment: Alignment
+level: int
}
"Party": {
shape: class
+name: str
+formed_datetime: datetime
+members: "list[Adventurer]"
+active_quest: "Optional[Quest]"
}
"Quest": {
shape: class
+name: str
+giver: QuestGiver
+reward_gold: int
}
"QuestGiver": {
shape: class
+name: str
+faction: "Optional[str]"
+location: str
}
"Party" -> "Quest": "active_quest" {
target-arrowhead.shape: cf-one
}
"Party" -> "Adventurer": "members" {
target-arrowhead.shape: cf-many
}
"Quest" -> "QuestGiver": "giver" {
target-arrowhead.shape: cf-one-required
}