PlantUML uses [Graphviz](https://www.graphviz.org/) for its graph visualization. Thus the rendering itself is done automatically for you - that it one of the biggest advantages of using PlantUML.
C4-PlantUML comes with some layout options.
...and also sometimes one of the biggest disadvantages, if the rendering is not what the user intended.
For this reason, C4-PlantUML also comes with some layout options.
<!--TOC-->
<!--/TOC-->
## Layout Guidance and Practices
## Layout Guidance and Practices
PlantUML uses [Graphviz](https://www.graphviz.org/) for its graph visualization. Thus the rendering itself is done automatically for you - that it one of the biggest advantages of using PlantUML.
...and also sometimes one of the biggest disadvantages, if the rendering is not what the user intended.
### Overall Guidance
### Overall Guidance
1. Be minimal in the use of all directed relations - introduce the fewest possible directed `Rel_` and `Lay_` statements that achieve the desired layout. One way to do this is to immediately remove any of these you experiment with when they don't actually affect the layout at all. And of course you will remove the ones that affect it the layout in a negative way.
1. Be minimal in the use of all directed relations - introduce the fewest possible directed `Rel_` and `Lay_` statements that achieve the desired layout. One way to do this is to immediately remove any of these you experiment with when they don't actually affect the layout at all. And of course you will remove the ones that affect it the layout in a negative way.
- [Element and Relationship properties](#element-and-relationship-properties)
- [Element and Relationship properties](#element-and-relationship-properties)
- [Version information](#version-information)
- [Version information](#version-information)
- [Snippets for Visual Studio Code](#snippets-for-visual-studio-code)
- [Snippets for Visual Studio Code](#snippets-for-visual-studio-code)
- [Live Templates for IntelliJ](#live-templates-for-intellij)
- [Live Templates for IntelliJ](#live-templates-for-intellij)
- [Prerequisites](#prerequisites)
- [Install](#install)
- [Usage](#usage)
- [Advanced Samples](#advanced-samples)
- [Advanced Samples](#advanced-samples)
- [techtribes.js](#techtribes.js)
- [Message Bus and Microservices](#message-bus-and-microservices)
- [Background](#background)
- [Background](#background)
- [License](#license)
- [License](#license)
@ -480,7 +491,7 @@ Additional tags/stereotypes can be added to the existing element stereotypes (co
Each element can be extended with one or multiple custom tags via the keyword argument `$tags="..."`, like `Container(spaAdmin, "Admin SPA", $tags="v1.1")`.
Each element can be extended with one or multiple custom tags via the keyword argument `$tags="..."`, like `Container(spaAdmin, "Admin SPA", $tags="v1.1")`.
Multiple tags can be combined with `+`, like `Container(api, "API", $tags="v1.0+v1.1")`.
Multiple tags can be combined with `+`, like `Container(api, "API", $tags="v1.0+v1.1")`.
**Element specific tag definitions**
### Element specific tag definitions
Sometimes an added element tag is element specific and all element specific colors should be used, e.g. a specific user role should be defined as element tag with the specific colors `...PERSON_...` like
Sometimes an added element tag is element specific and all element specific colors should be used, e.g. a specific user role should be defined as element tag with the specific colors `...PERSON_...` like
```plantuml
```plantuml
@ -503,14 +514,14 @@ Following calls introduces new element tags with element specific default colors
**Sample with tag dependent sprites and custom legend text**
### Sample with tag dependent sprites and custom legend text
```plantuml
```plantuml
@startuml
@startuml
@ -628,7 +639,7 @@ SHOW_LEGEND()


**Sample with different boundary tag combinations**
### Sample with different boundary tag combinations