44 lines
1.9 KiB
Text
44 lines
1.9 KiB
Text
=== Use Structurizr for C4 diagrams
|
|
|
|
Date: 2025-05-08
|
|
|
|
==== Status
|
|
|
|
Accepted
|
|
|
|
==== Decision makers
|
|
|
|
* Eric Förster
|
|
* Stephan Weißenberger
|
|
* Ralf Hägele
|
|
* Marius Kort
|
|
* Andre Harms
|
|
|
|
==== Context
|
|
|
|
We currently use D2 (https://d2lang.com/) to generate C4 architecture diagrams. While D2 provides a concise DSL for general diagrams, it lacks built-in C4 abstractions (e.g. Software system, Container, Component, etc.). We need a tool that:
|
|
|
|
* Directly supports the C4 model
|
|
* Allows reuse of the same architecture definitions across views
|
|
|
|
==== Decision
|
|
|
|
We have decided to adopt the open-source version of Structurizr (using the DSL and Structurizr Lite) for authoring and maintaining C4 architecture diagrams. This decision was based on the following factors:
|
|
|
|
* **Native C4 Support:** Structurizr is specifically designed for the C4 model, providing built-in abstractions and validation.
|
|
* **Model-Driven Approach:** Structurizr uses a model-driven approach, allowing us to define the architecture once and generate multiple views from the same model.
|
|
* **Extensibility:** Structurizr is extensible, allowing us to customize the diagrams and integrate with other tools.
|
|
* **Community Support:** Structurizr has an active community and comprehensive documentation.
|
|
|
|
|
|
==== Consequences
|
|
|
|
* **Positive:**
|
|
** **Improved Diagram Accuracy:** C4 model validation will help ensure the diagrams accurately represent the architecture.
|
|
** **Reduced Maintenance Overhead:** The model-driven approach and code-as-configuration will simplify diagram maintenance.
|
|
** **Increased Consistency:** Reusing architectural definitions across views will ensure consistency.
|
|
|
|
* **Negative:**
|
|
** **Learning Curve:** Team members will need to learn the Structurizr DSL.
|
|
** **Migration Effort:** We will need to migrate existing D2 diagrams to Structurizr.
|
|
** **Potential Lock-in:** Adopting Structurizr may create a dependency on the tool.
|