markdown-kroki
Diagram extension for Python-Markdown using Kroki server.
This extension converts various diagram code blocks into Base64 encoded data: URI or direct image link. This enables PDF generation with tools like MkDocs to PDF/WeasyPrint without requiring JavaScript(e.g. Mermaid)
Install
pip install markdown-kroki
Requirements
Internet access to the public Kroki server
Default setting with no options.
Self-Managed Kroki server (recommended)
Here is a sample Docker Compose file.
ref. Kroki.io > Install > Using Docker or Podman
docker compose up -d
The default port used by MkDocs (
mkdocs serve
) may conflict with the default port of a Dockerized Kroki instance. Consequently, you will need to change the port configuration for one of them.
Usage
```{diagram language} formant=[svg|png] {img tag attribute}="value" {diagram option}="value"
```
- format (optional): Output image format default to svg
- img tag attribute (optional): alt, width, height, class, id, style, title
- diagram option (optional): refer to Diagram options
MkDocs Integration
# mkdocs.yml
markdown_extensions:
- markdown_kroki:
kroki_url: http://localhost:18000 # default: https://kroki.io
img_src: link # default: data/data URI, link/direct link
Pelican Integration
# pelicanconf.py
MARKDOWN = {
'extension_configs': {
'markdown.extensions.codehilite': {'css_class': 'highlight'},
'markdown.extensions.extra': {},
'markdown_kroki': { # Add these
'kroki_url': 'http://localhost:18000',
'img_src': 'link'
},
},
'output_format': 'html5',
}
Python code
import markdown
from markdown_kroki import KrokiDiagramExtension
markdown_text = """```plantuml format="svg" theme="sketchy-outline" width="300"
@startuml
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
@enduml
```"""
html_output = markdown.markdown(markdown_text, extensions=[
KrokiDiagramExtension(kroki_url='https://kroki.io')])
print(html_output)
<p><img src="data:image/svg+xml;base64,PHN2ZyBhcmlhLXJvbGVkZXNjcmlwdGlvbj0ic2VxdWVuY2UiIHJvbGU
9ImdyYXBoaWNzLWRvY3VtZW50IGRvY3VtZW50IiB2aWV3Qm94PSItNTAgLTEwIDc1MCA1NzQiIHN0eWxlPSJtYXgtd2lkd
Gg6IDc1MHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk
...
...
...
IHgxPSIyNzYiLz48L3N2Zz4=" width="300" ></p>