Structurizr

Sign up Cloud plans On-premises installation

Visualise

Visualise

Create software architecture diagrams based upon the C4 model with code via the web API, or by using the browser-based workspace editor.

Document

Document

Create supplementary documentation using Markdown or AsciiDoc, along with architecture decision records (ADRs) to capture your significant design decisions.

Explore

Explore

Explore your software architecture model from a number of perspectives, to get insight into the structure of your software.

Share

Share your software architecture diagrams and documentation with your team, using role-based access or a unique sharing link.

Export

Export your software architecture diagrams to PNG files. The complete set of diagrams and documentation can also be exported to a static HTML page for offline use.

Integrate

Integrate your software architecture diagrams into websites and wikis, using the iframe embed or the macros built specifically for Atlassian Confluence. Search for content directly from Slack.

Software architecture diagrams as code

There are two ways to create software architecture diagrams with Structurizr. The first is to create a software architecture model using code, and upload it as a JSON document via the web API.

public static void main(String[] args) throws Exception {
    Workspace workspace = new Workspace("Getting Started", "This is a model of my software system.");
    Model model = workspace.getModel();

    Person user = model.addPerson("User", "A user of my software system.");
    SoftwareSystem softwareSystem = model.addSoftwareSystem("Software System", "My software system.");
    user.uses(softwareSystem, "Uses");

    ViewSet viewSet = workspace.getViews();
    SystemContextView contextView = viewSet.createSystemContextView(softwareSystem, "SystemContext", "An example of a System Context diagram.");
    contextView.addAllSoftwareSystems();
    contextView.addAllPeople();

    Styles styles = viewSet.getConfiguration().getStyles();
    styles.addElementStyle(Tags.SOFTWARE_SYSTEM).background("#1168bd").color("#ffffff");
    styles.addElementStyle(Tags.PERSON).background("#08427b").color("#ffffff").shape(Shape.Person);

    StructurizrClient structurizrClient = new StructurizrClient("key", "secret");
    structurizrClient.putWorkspace(25441, workspace);
}

And here's the resulting diagram when you open it in Structurizr, where the layout of the diagrams can be modified.

A simple diagram
A simple diagram
A diagram key is automatically generated for you, based upon the styles and shapes defined in the model.

The code used to create the software architecture model can be thought of as an executable domain specific language, or an executable architecture description language. This offers a number of opportunities over using a static textual description, such as the ability to use the programming language's reflection and static analysis capabilities to find and extract components from the codebase being documented. There are currently two client libraries; Structurizr for Java and Structurizr for .NET, both of which are open source. The web API is open and documented too, providing you the ability to create your own tooling if desired.


System Landscape diagram

System Landscape diagrams

System Context diagram

System Context diagrams

Container diagram

Container diagrams

Component diagram

Component diagrams

Dynamic diagram

Dynamic diagrams

Deployment diagram

Deployment diagrams

Workspace editor beta

The software architecture model and diagrams can also be created/modified using the browser-based workspace editor.

Structurizr's online editor

View and manage the hierarchy of elements that make up the static structure.

Structurizr's online editor

View and manage the relationships between elements in the model.

Structurizr's online editor

Modify the set of diagrams and their content.

Structurizr's online editor

Modify the styles used on your diagrams.

Structurizr's online editor

View and manage the set of decision records contained in the workspace.

Structurizr's online editor

Edit individual decision records.

Documentation as Markdown or AsciiDoc

Because the code doesn't tell the whole story, Structurizr also provides support for lightweight supplementary technical documentation, based upon a number of popular templates such as arc42. You can also create your own custom template.

The documentation is a collection of Markdown or AsciiDoc documents, one per section, which are rendered in the web browser. This content is uploaded in a workspace along with the software architecture model, which makes it easy to embed diagrams from that workspace.

Structurizr documentation screenshot

Structurizr architecture decision records screenshot

Architecture decision records

Because diagrams alone can't express the decisions that led to a solution, Structurizr allows you to supplement your software architecture model with a decision log, captured as a collection of lightweight Architecture Decision Records (ADRs) as described by Michael Nygard, and featured on the ThoughtWorks Technology Radar. Structurizr allows you to publish your ADRs to allow team members get an "at a glance" view of the current set of ADRs, along with facilities to make navigating them easier.

Explore your software architecture model

Once you have a model of your software system, extracted from your code using reflection and static analysis techniques, you can additionally visualise the model in a number of different ways. Structurizr provides some explorations to help you explore the elements and their relationships in the model.

Static Structure - Tree

Explore the software systems, containers and components defined in the model.

Static Structure - Size - Circles

View model elements ranked by size.

Dependencies - Components

Explore the afferent, efferent and cyclic dependencies between components.

Dependencies - Components and Code

Explore the dependencies between components and code.

Far too many teams allow their codebases to grow without having an insight into the structure of the code. The result is often the proverbial "big ball of mud"; a codebase that is tangled, hard to understand, hard to work with and hard to change. Visualising the structure of your code is the first step towards improving it.

Examples


Big Bank plc

Big Bank plc
(System Landscape, System Context, Container, Component, Dynamic and Deployment diagrams)

Financial Risk System

Financial Risk System
(System Context diagram, and documentation)

Spring PetClinic

Spring PetClinic
(System Context, Container, Component, Dynamic and Deployment diagrams)

Message bus and microservices

Message bus and microservices
(Container and Dynamic diagrams)

Widgets Limited

Widgets Limited
(System Landscape, System Context and Dynamic diagrams)

Contoso University

Contoso University
(System Context, Container, Component and Dynamic diagrams)

Videos


This video shows some of the basic features of the diagram editor.

This video shows some of the diagram navigation features.

This video shows some of the basic features of the browser-based workspace editor.