MkDocs plugin for Kroki-Diagrams
Project description
mkdocs-kroki-plugin
This is a MkDocs plugin to embed Kroki-Diagrams into your documentation.
Setup
Install the plugin using pip:
pip install mkdocs-kroki-plugin
Activate the plugin in mkdocs.yml:
plugins:
...
- kroki:
Config
| Key | Description | Default |
|---|---|---|
server_url |
URL of your kroki-Server | !ENV [KROKI_SERVER_URL, 'https://kroki.io'] |
fence_prefix |
Diagram prefix, set to an empty string to render all diagrams using Kroki | kroki- |
enable_block_diag |
Enable BlockDiag (and the related Diagrams) | true |
enable_bpmn |
Enable BPMN | true |
enable_excalidraw |
Enable Excalidraw | true |
enable_mermaid |
Enable Mermaid | true |
enable_diagramsnet |
Enable diagrams.net (draw.io) | false |
http_method |
Http method to use (GET or POST)Note: On POST the retrieved images are stored next to the including page in the build directory |
GET |
request_timeout |
Timeout for HTTP requests in seconds. Increase this value if you encounter timeouts with large diagrams or overloaded kroki server instances. | 30 |
user_agent |
User agent for requests to the kroki server | kroki.plugin/<version> |
file_types |
File types you want to use Note: not all file formats work with all diagram types https://kroki.io/#support |
[svg] |
file_type_overrides |
Overrides for specific diagram types to set the desired file type | [] |
tag_format |
How the image will be included in the resulting HTML (img, object, svg) |
img |
fail_fast |
Errors are raised as plugin errors | false |
cache_dir |
Custom directory for caching rendered diagrams By default uses $XDG_CACHE_HOME/kroki, ~/.cache/kroki, or temp directory |
(automatic) |
diagram_background_color_light |
Background color for diagrams in light mode (CSS color value) | (none) |
diagram_background_color_dark |
Background color for diagrams in dark mode (CSS color value) | (none) |
Example:
- kroki:
server_url: !ENV [ KROKI_SERVER_URL, 'https://kroki.io' ]
file_types:
- png
- svg
file_type_overrides:
mermaid: png
fail_fast: !ENV CI
Caching
The plugin automatically caches rendered diagrams to improve build performance, especially useful during mkdocs serve
when diagrams would otherwise be re-rendered on every file save.
Note: Caching only applies when using http_method: POST. The GET method generates URLs pointing to the Kroki server
and doesn't download diagram content.
How it works:
- Diagrams are cached based on their content, type, format, and options
- Unchanged diagrams are retrieved from cache instead of being re-rendered
- Both in-memory and file-based caching are used for optimal performance
- LRU strategy: Frequently accessed diagrams stay in cache, unused ones expire after 3 days
- Cache cleanup runs automatically on plugin initialization with minimal overhead
Cache location (fallback hierarchy):
$XDG_CACHE_HOME/kroki(if XDG_CACHE_HOME is set)~/.cache/kroki(if HOME is set)- System temp directory +
/kroki(final fallback) - Custom location: Set
cache_dirin plugin configuration to override
Example with custom cache directory:
- kroki:
cache_dir: .cache/kroki # Store cache in project directory
Usage
Use code-fences with a tag of kroki-<Module> to replace the code with the wanted diagram.
Diagram options can be set as well.
Example for BlockDiag:
```kroki-blockdiag no-transparency=false
blockdiag {
blockdiag -> generates -> "block-diagrams";
blockdiag -> is -> "very easy!";
blockdiag [color = "greenyellow"];
"block-diagrams" [color = "pink"];
"very easy!" [color = "orange"];
}
```
You can render diagram from file with @from_file: directive:
```kroki-bpmn
@from_file:path/to/diagram.bpmn
```
Display Options
You can control the display size and alignment of diagrams using display-width, display-height, and display-align options. These options set inline CSS styles on the rendered element.
Size Options
```kroki-plantuml {display-width=500px}
@startuml
Alice -> Bob: Hello
Bob --> Alice: Hi!
@enduml
```
You can use both width and height together:
```kroki-blockdiag {display-width=400px display-height=200px}
blockdiag {
A -> B -> C;
}
```
Alignment
Use display-align to position diagrams horizontally. Valid values are left, center, and right.
```kroki-mermaid {display-width=300px display-align=center}
graph LR
A[Start] --> B[End]
```
This sets display: block and appropriate margin values:
center:margin-left: auto; margin-right: autoright:margin-left: auto; margin-right: 0left:margin-left: 0; margin-right: auto
Notes:
- Display options are handled by the plugin and are not sent to the Kroki server
- Setting only
display-widthordisplay-heightallows the browser to scale proportionally - These options work with all
tag_formatsettings (img,object,svg) - Size values can be any valid CSS value (e.g.,
500px,50%,auto,20em)
Background Color
You can set a background color for diagrams that adapts to light/dark themes. This is useful when diagrams have transparent backgrounds that don't display well in certain color schemes.
Global Configuration
Set default background colors for all diagrams in mkdocs.yml:
plugins:
- kroki:
diagram_background_color_light: white
diagram_background_color_dark: "#333"
Per-Diagram Override
Override the global settings for individual diagrams using bg-light and bg-dark:
```kroki-plantuml {bg-light=#f5f5f5 bg-dark=#1a1a1a}
@startuml
Alice -> Bob: Hello
@enduml
```
How It Works
- When both light and dark colors are set, the plugin uses the CSS
light-dark()function:background: light-dark(white, #333);
- When only one color is set, it applies as a simple background:
background: white;
- When neither is set, no background style is applied
Notes:
- The
light-dark()CSS function requires the page to havecolor-scheme: light darkset. MkDocs themes like Material for MkDocs handle this automatically. - Per-diagram options (
bg-light,bg-dark) override global settings - You can set only one color per-diagram while inheriting the other from global config
- Works with all
tag_formatsettings (img,object,svg)
Contributors
Want to appear in the list of contributors?
Get started by reading the Contribution Guidelines
See Also
Diagram examples can be found here.
More information about installing a self-manged Kroki-Service here.
More Plugins for MkDocs can be found here
Pre-Release-Versions
Install the newest pre-release version using pip:
pip install -i https://test.pypi.org/simple/ mkdocs-kroki-plugin
Development
Setup
git clone git@github.com:AVATEAM-IT-SYSTEMHAUS/mkdocs-kroki-plugin.git
cd mkdocs-kroki-plugin
uv sync
Pre-commit Hooks
Install the pre-commit hooks to run linting, type checking, and tests automatically on commit:
uv run pre-commit install
To run all hooks manually:
uv run pre-commit run --all-files
Testing
Run tests:
uv run pytest
Run tests with coverage:
uv run pytest --cov
Linting & Formatting
Run ruff for linting and formatting:
uv run ruff check .
uv run ruff format .
Type Checking
Run mypy:
uv run --group types mypy kroki
Preview playground using mkdocs
uv run task playground:mkdocs
Preview playground using techdocs-cli
uv run task playground:techdocs
Creating a Release
Use the release script to create a new version:
./release.py <version>
For example:
./release.py 1.2.3
The script will:
- Validate the version format (semantic versioning: X.Y.Z)
- Check that the working tree is clean
- Update the
__version__inkroki/__init__.py - Create a commit:
chore: Bump version to X.Y.Z - Create an annotated git tag:
vX.Y.Z - Push the commit and tag to GitHub
- Open your browser to create a GitHub release where you can add the changelog
Requirements:
- Clean working tree (no uncommitted changes)
- Version must follow semantic versioning format (e.g., 1.2.3)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mkdocs_kroki_plugin-1.2.0.tar.gz.
File metadata
- Download URL: mkdocs_kroki_plugin-1.2.0.tar.gz
- Upload date:
- Size: 15.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1027c5581b06dd599bae11d4d2a5265f648dbd2b233d4bfe828df187126ee9f7
|
|
| MD5 |
706256ee8d56cba838032feca2c6bc24
|
|
| BLAKE2b-256 |
1afe85190d8a68e0ab145a39a9d300ca60450fe019e56c16b9d7773c9db1e9cf
|
File details
Details for the file mkdocs_kroki_plugin-1.2.0-py3-none-any.whl.
File metadata
- Download URL: mkdocs_kroki_plugin-1.2.0-py3-none-any.whl
- Upload date:
- Size: 18.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6923e7769548cefbd5f79585e8c4c8a992348d138395db4174adfb0bbdea983a
|
|
| MD5 |
cabeca07b30bade534c6c868adbcc846
|
|
| BLAKE2b-256 |
0f5569d1927ba4311efe0a741f7e63f3052e02fa906da504b300853a29e7b777
|