Structurizr DSL Feature Roadmap
This roadmap tracks the implementation status of Structurizr DSL features in buildzr.
Note: buildzr uses a Pythonic DSL approach rather than the text-based Structurizr DSL. Features marked as ✅ have Python equivalents, while ❌ indicates no current support. Some features have partial support (🟡) with model-level definitions but no DSL wrapper.
Core Language Constructs
| Feature |
Completed |
Documentation |
| Workspace |
✅ |
Top-level construct and wrapper for model and views |
| Model |
✅ |
Container for architecture elements and relationships |
| Configuration |
✅ |
Workspace-level configuration settings |
| Workspace Extension |
✅ |
Extend existing workspaces via file or URL |
| Visibility |
❌ |
Control workspace access level (private/public) |
Model Elements
| Feature |
Completed |
Documentation |
| Person |
✅ |
Represents users, actors, roles, or personas. Supports name, description, tags, properties |
| Software System |
✅ |
Represents a software system. Can contain containers. Supports labeled() for aliases |
| Container |
✅ |
Deployable/runnable unit. Supports name, description, technology, tags, properties |
| Component |
✅ |
Modular part of a container. Leaf element with no children |
| Group |
✅ |
Named grouping with configurable separator (default /). Supports hierarchical nesting |
| Element |
✅ |
Custom element type outside the standard C4 hierarchy. Supports name, metadata, description, tags, properties |
Deployment Model Elements
| Feature |
Completed |
Documentation |
| Deployment Environment |
✅ |
Named environments (e.g., “Development”, “Live”). Context manager support |
| Deployment Node |
✅ |
Hierarchical nodes. Supports instance counts/ranges (e.g., “1..N”, “3”) |
| Deployment Group |
✅ |
Groups deployment instances for relationship filtering |
| Infrastructure Node |
✅ |
Load balancers, firewalls, DNS, etc. Supports name, description, technology, tags |
| Software System Instance |
✅ |
Deployed instance of a software system. Supports deployment groups |
| Container Instance |
✅ |
Deployed instance of a container. Supports deployment groups |
| Health Check |
🟡 |
Model support (HttpHealthCheck) exists but no DSL wrapper |
Relationships
| Feature |
Completed |
Documentation |
| Relationship |
✅ |
Multiple syntax options: >> operator, desc() helper, .uses() method |
| Implied Relationships |
✅ |
Automatic parent-level relationship creation. Enable via implied_relationships=True |
| Relationship Description |
✅ |
Via source >> "Uses" >> dest or desc("Uses") |
| Relationship Technology |
✅ |
Via source >> ("Uses", "HTTP") >> dest or desc("Uses", "HTTP") |
| Relationship Tags |
✅ |
Via With(tags={"tag1"}) modifier |
| Relationship Properties |
✅ |
Via With(properties={"key": "value"}) modifier |
| Relationship URL |
✅ |
Via With(url="...") modifier |
| “this” keyword |
N/A |
Not needed - reference element variables directly (e.g., system >> "calls" >> system) |
Views
| Feature |
Completed |
Documentation |
| System Landscape View |
✅ |
Shows all Person and SoftwareSystem elements. Supports include/exclude filters |
| System Context View |
✅ |
System with direct relationships. Lambda selector support for dynamic selection |
| Container View |
✅ |
Containers of a software system. Shows related elements automatically |
| Component View |
✅ |
Components of a container. Shows related elements automatically |
| Deployment View |
✅ |
Nodes and instances per environment. Respects deployment groups |
| Dynamic View |
✅ |
Ordered interaction sequences. Supports description override, technology selector |
| Filtered View |
🟡 |
Model exists but no DSL wrapper. Filters views by tags |
| Custom View |
✅ |
Displays custom elements (Element type). Supports include/exclude filters, auto-layout |
| Image View |
🟡 |
Model exists but no DSL wrapper. PlantUML/Mermaid/Kroki integration |
View Operations
| Feature |
Completed |
Documentation |
| include_elements |
✅ |
Add elements via DslElement, callables, element types, or strings |
| exclude_elements |
✅ |
Remove elements using same selector types as include |
| include_relationships |
✅ |
Add relationships via DslRelationship or callable predicates |
| exclude_relationships |
✅ |
Remove relationships using callable predicates |
| Animation |
🟡 |
Model has AnimationStep but no DSL support. Step-by-step reveal |
| title |
✅ |
Optional view title |
| properties |
✅ |
Arbitrary key-value metadata on views |
Styling and Theming
| Feature |
Completed |
Documentation |
| Styles |
✅ |
Visual styling for elements and relationships |
| Element Style |
✅ |
Style by DslElement, Group, callable, element type, or tag string |
| Relationship Style |
✅ |
Style by DslRelationship, Group, callable, or tag string |
| Theme |
🟡 |
Model stores theme URLs but no runtime application |
| Branding |
🟡 |
Model supports logo/font but no DSL wrapper |
| Terminology |
🟡 |
Model supports custom type names but no DSL wrapper |
Element Style Properties
| Property |
Supported |
Notes |
| shape |
✅ |
Box, RoundedBox, Circle, Ellipse, Hexagon, Cylinder, Pipe, Person, Robot, Folder, WebBrowser, MobileDevicePortrait, MobileDeviceLandscape, Component |
| icon |
✅ |
Base64 data URI |
| width |
✅ |
In pixels |
| height |
✅ |
In pixels |
| background |
✅ |
Hex (#RGB, #RRGGBB), rgb(r,g,b), named colors, or tuples |
| color |
✅ |
Text/foreground color |
| stroke |
✅ |
Border color |
| stroke_width |
✅ |
Border thickness |
| font_size |
✅ |
Text size |
| border |
✅ |
solid, dashed, dotted |
| opacity |
✅ |
0-100 |
| metadata |
✅ |
Show element metadata |
| description |
✅ |
Show element description |
Relationship Style Properties
| Property |
Supported |
Notes |
| thickness |
✅ |
Line width |
| color |
✅ |
Line color |
| routing |
✅ |
Direct, Orthogonal, Curved |
| font_size |
✅ |
Label text size |
| width |
✅ |
Annotation width |
| dashed |
✅ |
Boolean |
| position |
✅ |
0-100 along line |
| opacity |
✅ |
0-100 |
Color Support
| Format |
Example |
| Named colors |
black, white, red, green, blue, yellow, cyan, magenta, gray, orange, purple, pink, brown, lime, navy, teal, olive, maroon, silver, gold |
| Hex |
#RRGGBB or #RGB |
| RGB |
rgb(r, g, b) |
| Tuple |
(r, g, b) |
Advanced Features
| Feature |
Completed |
Documentation |
| Auto Layout |
✅ |
Directions: tb, bt, lr, rl. Configurable rank/node separation. Graphviz or Dagre |
| Properties |
✅ |
Arbitrary key-value metadata on all elements and relationships |
| Tags |
✅ |
Via constructor or add_tags(). Automatic type tags (e.g., “Element”, “Person”) |
| URL |
✅ |
On relationships via With(url="..."). Elements support via properties |
| Perspectives |
🟡 |
Model support exists but no DSL wrapper |
| Archetypes |
❌ |
User-defined element types with preset descriptions, tags, properties |
| !extend / !element |
❌ |
Modify existing elements via identifiers or expressions |
| !relationship / !relationships |
❌ |
Find and extend relationships |
Auto Layout Options
| Option |
Default |
Description |
| direction |
tb |
Layout direction: tb (top-bottom), bt (bottom-top), lr (left-right), rl (right-left) |
| rank_separation |
300 |
Distance between ranks (node levels) |
| node_separation |
300 |
Distance between nodes on same rank |
| implementation |
Graphviz |
Graphviz (default) or Dagre |
DSL Language Features
| Feature |
Completed |
Documentation |
| Identifiers |
✅ |
Auto-generated IDs. Access via workspace.person().name or labeled() aliases |
| Expressions |
✅ |
Python Expression API with predicates for filtering elements/relationships |
| !identifiers |
❌ |
Switch between hierarchical and flat identifier scoping |
| !include |
❌ |
Import external DSL files. Use Python imports instead |
| !constant (!const) |
❌ |
Define reusable constants. Use Python variables instead |
| !ref |
❌ |
Reference elements from extended workspaces |
| !docs |
❌ |
Attach Markdown/AsciiDoc documentation |
| !adrs |
❌ |
Add architectural decision records |
| !script |
N/A |
Native Python - use Python directly |
| !plugin |
N/A |
Native Python - extend with Python code |
Expression API
The Expression API provides filtering capabilities similar to Structurizr expressions:
| Property |
Description |
e.id |
Element ID |
e.type |
Element type (Person, SoftwareSystem, etc.) |
e.tags |
Element tags |
e.name |
Element name |
e.technology |
Element technology |
e.metadata |
Element metadata (for custom elements) |
e.parent |
Parent element |
e.children |
Child elements |
e.sources |
Elements with relationships pointing to this element |
e.destinations |
Elements this element has relationships to |
e.properties |
Element properties dict |
e.group |
Element’s group |
e.environment |
Deployment environment (for deployment elements) |
Workspace Features
| Feature |
Completed |
Documentation |
| Description |
✅ |
Set descriptions on elements and views |
| Technology |
✅ |
Specify technology for containers, components, infrastructure nodes |
| Scope |
✅ |
'landscape', 'software_system', or None |
| Group Separator |
✅ |
Configurable separator for hierarchical groups (default /) |
| Users |
❌ |
Define workspace read/write permissions |
Python-Specific Features
These features leverage Python’s native capabilities as alternatives to Structurizr DSL constructs:
| Feature |
Description |
| Dynamic Attribute Access |
Access elements via workspace.software_system().system_name |
| Lambda Selectors |
Use callables for dynamic element/relationship selection in views |
| Context Managers |
Use with statements for scoped element creation (Group, DeploymentEnvironment) |
| Type Hints |
Full type annotation support for IDE integration |
| Native Imports |
Use Python imports instead of !include |
| Variables |
Use Python variables instead of !const |
| Explorer API |
walk_elements() and walk_relationships() for traversal |
Utility APIs
| Feature |
Location |
Description |
| Explorer |
buildzr.dsl.explorer |
Depth-first element and relationship traversal |
| Expression |
buildzr.dsl.expression |
Filtering predicates for views |
| Color |
buildzr.dsl.color |
Named colors, hex, rgb, and tuple support |
| Relations |
buildzr.dsl.relations |
desc(), With() helpers for relationships |
Legend
- ✅ Completed: Feature is fully implemented with Python DSL equivalent
- 🟡 Partial: Model support exists but no DSL wrapper
- ❌ Not Implemented: Feature is not yet available
- N/A Not Applicable: Python provides a native alternative
Notes
- buildzr uses a Pythonic DSL approach rather than the text-based Structurizr DSL
- Model classes support all Structurizr JSON schema fields even when DSL wrappers aren’t available
- Features marked 🟡 can be accessed by manipulating the underlying model directly
- Check individual feature documentation links for detailed Structurizr specifications