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>
Process flow
data URI
sequenceDiagram
participant application as MkDocs, Pelican<br/>or your application
participant markdown as Python Markdown
participant extension as KrokiDiagramExtension
participant engine as Kroki Server
application->>markdown: Markdown + Diagrams
markdown->>extension: Preprocessor
extension->>engine: Diagram code
engine-->>engine: Convert
engine-->>extension: Image Data
extension-->>extension: Base64 encode
extension-->>markdown: Markdown + data URI image
markdown-->>application: HTML + data URI image
Direct link (GET API)
sequenceDiagram
participant application as MkDocs, Pelican<br/>or your application
participant markdown as Python Markdown
participant extension as KrokiDiagramExtension
participant engine as Kroki Server
application->>markdown: Markdown + Diagrams
markdown->>extension: Preprocessor
extension-->>extension: Encoded code<br/>base64+deflate
extension-->>markdown: Markdown + Kroki direct link
markdown-->>application: HTML + Kroki direct kink
application->>engine: GET API<br/><img src="http[s]">
engine-->>application: Image data
Metadata
Release files for markdown-kroki 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| markdown_kroki-0.4.0.tar.gz | 99.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| markdown_kroki-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 108.9 kB
Release files / markdown_kroki-0.4.0.tar.gz
| Download URL | markdown_kroki-0.4.0.tar.gz |
|---|---|
| Size | 99.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cb5452c4a5841a7cfb525b292e5b7e7717c7483d70a63c85d9be95fcefb733f4
|
|
BLAKE2b-256 checksum How to use checksums |
db2af946b5dd4886141377cc313bf7fe722f8550dede5bc911310933c48a2aa3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 30, 2025.
Transparency logRelease files / markdown_kroki-0.4.0-py3-none-any.whl
| Download URL | markdown_kroki-0.4.0-py3-none-any.whl |
|---|---|
| Size | 9.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0ee81f2fe918bc59f3f17bb94ac027cdd04ae723ef0bfc98525ba7c013db8225
|
|
BLAKE2b-256 checksum How to use checksums |
31c1f880c09c32bffa16096438aaaec3ca6eb0c7bc17036cc7cf22f05f84c343
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 30, 2025.
Transparency log