Need help with kroki?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.


Creates diagrams from textual descriptions!

579 Stars 30 Forks MIT License 817 Commits 53 Opened issues

Services available

Need anything else?

= image:[Kroki,200,link={uri-kroki}] :uri-kroki: :uri-kroki-docs: :uri-maven:

ifdef::env-github[] image:[Travis build status, link=] image:[GitHub Actions build status, link=] image:[Gitter chat, link=] endif::[]

{uri-kroki}[Kroki] provides a unified API with support for BlockDiag (BlockDiag, SeqDiag, ActDiag, NwDiag, PacketDiag, RackDiag), BPMN, Bytefield, C4 (with PlantUML), Ditaa, Erd, GraphViz, Mermaid, Nomnoml, PlantUML, SvgBob, UMLet, Vega, Vega-Lite and WaveDrom... and more to come!

== Quickstart

This section offers a basic tutorial for evaluating Kroki. More comprehensive installation instructions are in the {uri-kroki-docs}[Kroki documentation].

== Usage

Kroki uses a simple algorithm (deflate + base64) to encode your diagram in the URL:

GET /plantuml/svg/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000

You can also call Kroki with




{ "diagramsource": "Bob -> Alice : hello", "diagramtype": "plantuml", "output_format": "svg"


In this case, you don't need to encode your diagram.

It's also possible to send your diagram as plain text using the

header. The output format will be specified using the
header and the diagram source will be sent as the request body:

POST /plantuml


Accept: image/svg+xml Content-Type: text/plain

Bob -> Alice : hello

You can also define the output format in the URL if you don't want to add an


POST /plantuml/svg


Content-Type: text/plain

Bob -> Alice : hello

The same concept applies when sending the diagram as JSON:

POST /plantuml/svg


{ "diagram_source": "Bob -> Alice : hello"


== Project layout

Kroki has a modular architecture:

server:: A Java web server (powered by Vert.x) that acts as a gateway. Kroki server is built using {uri-maven}[Maven].

umlet:: A tiny Java API on top of UMlet (mini) to generate diagrams.

nomnoml:: A Node.js CLI on top of the Nomnoml diagram library.

vega:: A Node.js CLI on top of the vega diagram library. Also supports Vega-Lite concise grammar.

blockdiag:: A companion web server written in Python (powered by Flask and Gunicorn) that provides BlockDiag, SeqDiag, ActDiag, NwDiag, PacketDiag and RackDiag diagrams libraries.

mermaid:: A companion web server written in JavaScript (powered by micro) that provides Mermaid diagram library.

bpmn:: A companion web server written in JavaScript (powered by micro) that provides bpmn-js diagram library.

bytefield:: A Node.js CLI on top of the bytefield-svg diagram library.

wavedrom:: A Node.js CLI on top of the wavedrom diagram library.

== Build

=== Gateway Server

The first step is to install the local dependencies in your local repository using


$ make installLocalDependencies

Then you can build the project using Maven:

$ make buildServer

=== Docker Images

To build all the Docker images, use the following command:

$ sudo make buildDockerImages


might not be needed depending on your distribution and

== Run

Once the Docker images are built, you can run Kroki using


$ docker run -d -p 8000:8000 yuzutech/kroki

=== Companion Containers

If you want to use BlockDiag, ActDiag, NwDiag, SeqDiag, PacketDiag, RackDiag or Mermaid, then you will also need to start companion containers.

You can use

to run multiple containers:



version: "3" services: core: image: yuzutech/kroki environment: - KROKIBLOCKDIAGHOST=blockdiag - KROKIMERMAIDHOST=mermaid - KROKIBPMNHOST=bpmn ports: - "8000:8000" blockdiag: image: yuzutech/kroki-blockdiag ports: - "8001:8001" mermaid: image: yuzutech/kroki-mermaid ports: - "8002:8002" bpmn: image: yuzutech/kroki-bpmn ports:

- "8003:8003"

$ docker-compose up -d

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.