Structurizr is a collection of tooling to help you visualise, document and explore your software architecture.
Create a software architecture model and diagrams using code, in a way that is connected to the code being described.
Embed supplementary documentation into the software architecture model, using developer-friendly Markdown and AsciiDoc.
Structurizr vs other tools
The goal of Structurizr is to allow software developers to easily create software architecture diagrams that reflect the code. Structurizr combines the power and richness of a model, with the ease of use we get from text-based tools such as PlantUML and WebSequenceDiagrams. Our team-based pricing ensures that everybody on your team has access to diagrams, documentation and explorations when they need it.
Cloud and on-premises
Our cloud services allow you to get started with Structurizr quickly, without needing to host and update software on your own servers. Structurizr workspaces are stored using AES encryption on our servers, and you can use client-side encryption for additional comfort, while the on-premises API provides a way to store your data locally.
We also have an on-premises installation that can be run locally on your own servers, for organisations that can't or don't want to use the cloud.
Open source client libraries are currently available for Java and Microsoft .NET, which allow you to create software architecture models and upload them to Structurizr. A number of examples are also included, illustrating the key features, to help you get started.
Software architecture diagrams as code
Structurizr is an implementation of the System Context, Container and Component diagrams from Simon Brown's C4 model, supplemented with a dynamic diagram and a deployment diagram. Structurizr does not provide a "drag and drop" editor to create diagrams. Instead, you create a software architecture model using code and upload it via the web API. Here's a simple example using Java:
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.
The following diagram types are supported.
In essence, Structurizr is an implementation of an executable architecture description language, a simple domain-specific language to describe static structure, using code. There are open source client libraries on GitHub for Java and the .NET platform, which include static analysis features to help you extract components from your codebase. If you integrate this with your continuous integration/build process, your diagrams stay up to date. See Why use code to create a software architecture model? for more information.
Software 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. 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.
Explore your software architecture model
Once you have a model of your software system, extracted from your code using 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.
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.