2021-01-29 16:09:34 -05:00
---
2022-05-19 08:08:42 -04:00
stage: Plan
group: Project Management
2022-09-21 17:13:33 -04:00
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
2021-01-29 16:09:34 -05:00
---
2021-01-28 01:08:59 -05:00
# Kroki diagrams **(FREE SELF)**
2020-11-28 16:09:37 -05:00
2021-05-19 14:10:39 -04:00
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/241744) in GitLab 13.7.
> - Support for reStructuredText and Textile documents [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/324766) in GitLab 13.12.
2020-11-28 16:09:37 -05:00
When [Kroki ](https://kroki.io ) integration is enabled and configured in
2022-03-22 08:07:28 -04:00
GitLab, you can use it to create diagrams in AsciiDoc, Markdown, reStructuredText, and Textile documents.
2020-11-28 16:09:37 -05:00
## Kroki Server
When Kroki is enabled, GitLab sends diagrams to an instance of Kroki to display them as images.
You can use the free public cloud instance `https://kroki.io` or you can [install Kroki ](https://docs.kroki.io/kroki/setup/install/ )
on your own infrastructure.
2020-12-01 22:09:38 -05:00
After you've installed Kroki, make sure to update the server URL to point to your instance.
2020-11-28 16:09:37 -05:00
### Docker
With Docker, run a container like this:
```shell
docker run -d --name kroki -p 8080:8000 yuzutech/kroki
```
The **Kroki URL** is the hostname of the server running the container.
The [`yuzutech/kroki` ](https://hub.docker.com/r/yuzutech/kroki ) image contains the following diagrams libraries out-of-the-box:
2021-01-29 13:09:17 -05:00
<!-- vale gitlab.Spelling = NO -->
2020-11-28 16:09:37 -05:00
- [Bytefield ](https://bytefield-svg.deepsymmetry.org/ )
- [Ditaa ](http://ditaa.sourceforge.net )
- [Erd ](https://github.com/BurntSushi/erd )
- [GraphViz ](https://www.graphviz.org/ )
- [Nomnoml ](https://github.com/skanaar/nomnoml )
- [PlantUML ](https://github.com/plantuml/plantuml )
- [C4 model ](https://github.com/RicardoNiepel/C4-PlantUML ) (with PlantUML)
- [Svgbob ](https://github.com/ivanceras/svgbob )
- [UMlet ](https://github.com/umlet/umlet )
- [Vega ](https://github.com/vega/vega )
- [Vega-Lite ](https://github.com/vega/vega-lite )
- [WaveDrom ](https://wavedrom.com/ )
2021-01-29 13:09:17 -05:00
<!-- vale gitlab.Spelling = YES -->
2020-11-28 16:09:37 -05:00
If you want to use additional diagram libraries,
2020-12-01 22:09:38 -05:00
read the [Kroki installation ](https://docs.kroki.io/kroki/setup/install/#_images ) to learn how to start Kroki companion containers.
2020-11-28 16:09:37 -05:00
2020-12-01 22:09:38 -05:00
## Enable Kroki in GitLab
2020-11-28 16:09:37 -05:00
You need to enable Kroki integration from Settings under Admin Area.
2022-10-11 08:09:17 -04:00
To do that, sign in with an administrator account and follow these steps:
2020-11-28 16:09:37 -05:00
2022-09-14 14:12:48 -04:00
1. On the top bar, select **Main menu > Admin** .
2021-03-08 22:09:36 -05:00
1. Go to **Settings > General** .
2020-11-28 16:09:37 -05:00
1. Expand the **Kroki** section.
1. Select **Enable Kroki** checkbox.
1. Enter the **Kroki URL** .
## Create diagrams
With Kroki integration enabled and configured, you can start adding diagrams to
your AsciiDoc or Markdown documentation using delimited blocks:
- **Markdown**
````markdown
```plantuml
Bob -> Alice : hello
Alice -> Bob : hi
```
````
- **AsciiDoc**
```plaintext
[plantuml]
....
Bob->Alice : hello
Alice -> Bob : hi
....
```
2021-05-19 14:10:39 -04:00
- **reStructuredText**
```plaintext
.. code-block:: plantuml
Bob->Alice : hello
Alice -> Bob : hi
```
- **Textile**
```plaintext
bc[plantuml]. Bob->Alice : hello
Alice -> Bob : hi
```
2020-11-28 16:09:37 -05:00
The above blocks are converted to an HTML image tag with source pointing to the
Kroki instance. If the Kroki server is correctly configured, this should
render a nice diagram instead of the block:
![PlantUML diagram ](../img/kroki_plantuml_diagram.png )
2021-05-19 14:10:39 -04:00
Kroki supports more than a dozen diagram libraries. Here's a few examples for AsciiDoc:
2020-11-28 16:09:37 -05:00
**GraphViz**
```plaintext
[graphviz]
....
digraph finite_state_machine {
rankdir=LR;
node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
node [shape = circle];
LR_0 -> LR_2 [ label = "SS(B)" ];
LR_0 -> LR_1 [ label = "SS(S)" ];
LR_1 -> LR_3 [ label = "S($end)" ];
LR_2 -> LR_6 [ label = "SS(b)" ];
LR_2 -> LR_5 [ label = "SS(a)" ];
LR_2 -> LR_4 [ label = "S(A)" ];
LR_5 -> LR_7 [ label = "S(b)" ];
LR_5 -> LR_5 [ label = "S(a)" ];
LR_6 -> LR_6 [ label = "S(b)" ];
LR_6 -> LR_5 [ label = "S(a)" ];
LR_7 -> LR_8 [ label = "S(b)" ];
LR_7 -> LR_5 [ label = "S(a)" ];
LR_8 -> LR_6 [ label = "S(b)" ];
LR_8 -> LR_5 [ label = "S(a)" ];
}
....
```
![GraphViz diagram ](../img/kroki_graphviz_diagram.png )
**C4 (based on PlantUML)**
```plaintext
[c4plantuml]
....
@startuml
!include C4_Context.puml
title System Context diagram for Internet Banking System
Person(customer, "Banking Customer", "A customer of the bank, with personal bank accounts.")
System(banking_system, "Internet Banking System", "Allows customers to check their accounts.")
System_Ext(mail_system, "E-mail system", "The internal Microsoft Exchange e-mail system.")
System_Ext(mainframe, "Mainframe Banking System", "Stores all of the core banking information.")
Rel(customer, banking_system, "Uses")
Rel_Back(customer, mail_system, "Sends e-mails to")
Rel_Neighbor(banking_system, mail_system, "Sends e-mails", "SMTP")
Rel(banking_system, mainframe, "Uses")
@enduml
....
```
![C4 PlantUML diagram ](../img/kroki_c4_diagram.png )
2021-01-29 13:09:17 -05:00
<!-- vale gitlab.Spelling = NO -->
2020-11-28 16:09:37 -05:00
**Nomnoml**
2021-01-29 13:09:17 -05:00
<!-- vale gitlab.Spelling = YES -->
2020-11-28 16:09:37 -05:00
```plaintext
[nomnoml]
....
[Pirate|eyeCount: Int|raid();pillage()|
[beard]--[parrot]
[beard]-:>[foul mouth]
]
[< abstract > Marauder]< :-- [ Pirate ]
[Pirate]- 0..7[mischief]
[jollyness]->[Pirate]
[jollyness]->[rum]
[jollyness]->[singing]
[Pirate]-> *[rum|tastiness: Int|swig()]
[Pirate]->[singing]
[singing]< - > [rum]
....
```
2021-01-29 13:09:17 -05:00
![Diagram ](../img/kroki_nomnoml_diagram.png )