markdown-d2
markdown-d2 turns D2 diagrams into pictures in a site
built with zensical or Python-Markdown. You write a diagram as text in a d2
code block, and the build draws it, once for the light theme and once for the
dark one. A diagram with several steps gets buttons to move through them, with
a fade or a morph between steps, and any diagram can be opened full screen.
Everything happens when the site is built, so your readers download no extra software. A broken diagram stops the build with a message naming the page, the diagram and the line, instead of showing a broken picture.
Installation
uv add markdown-d2
The package brings its own Node through nodejs-wheel-binaries, so nothing
else needs installing.
Use with zensical
Add the fence to zensical.toml:
[project.markdown_extensions.pymdownx.superfences]
custom_fences = [
{ name = "d2", class = "d2", format = { object = "markdown_d2.formatter", kwds = { root = "docs" } }, validator = "markdown_d2.validator" },
]
Then write a diagram in any page:
```d2
you -> page: write
page -> site: build
```
The documentation
starts with a
tutorial, then shows how to step through
diagrams, import files and icons, change the look and
use markdown-d2 without zensical,
and lists every setting.
Developing
uv sync
uv run tox # lint, types, tests, docs
uv run tox -e browser # the figure in a real browser, with screenshots
The build copies D2 into the package, so after a change to
package-lock.json run uv sync --reinstall-package markdown-d2 before
testing; until then the tests still use the old copy.
D2
The wheel contains the WebAssembly build of D2 from the @d2lang/d2 package.
Its source is at https://github.com/d2lang/d2 under the MPL-2.0, and its
licence and notices are installed with the package in
markdown_d2/node_modules/@d2lang/d2/.
Metadata
Release files for markdown-d2 0.4.1
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_d2-0.4.1.tar.gz | 124.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| markdown_d2-0.4.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 11.8 MB
Release files / markdown_d2-0.4.1.tar.gz
| Download URL | markdown_d2-0.4.1.tar.gz |
|---|---|
| Size | 124.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b1ee7fc6536d46d5a928105764bc5581a44338efa051bf7df9129db28542d0ba
|
|
BLAKE2b-256 checksum How to use checksums |
51420afea2285ef1adc990b629666e625ae265bec24888df65655db4ce6cef94
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Oct 8, 2026.
Transparency logRelease files / markdown_d2-0.4.1-py3-none-any.whl
| Download URL | markdown_d2-0.4.1-py3-none-any.whl |
|---|---|
| Size | 11.7 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5a19f3cc51374d1fcd09b776a218d5d6cbd7163cb2caa8fa9171aad1a1676a2f
|
|
BLAKE2b-256 checksum How to use checksums |
de0efdebef1985e990b05c6b2fb0ec1069cc69db09185c892d0adef5510e19d6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Oct 8, 2026.
Transparency log