mdformat-zola
Mdformat plugin for Zola-flavored Markdown. It formats Zola content files while keeping shortcodes, heading anchors, and code-block annotations intact.
Plain mdformat mangles Zola content. It reflows shortcode bodies (a Mermaid diagram becomes one escaped line), escapes
the * in {{/* … */}}, and wraps long inline shortcodes mid-call. This plugin adds Zola's syntax to mdformat so those
constructs round-trip.
Zola syntax
Each construct below gets one stable form. Where Zola treats ordering as insignificant, the plugin sorts.
Shortcodes
The plugin normalizes inline shortcodes {{ name(args) }} and their escaped form {{/* name(args) */}}: it collapses
whitespace, sorts arguments by name, and settles on one quote style. It does not wrap or escape them.
Input:
{{ youtube( autoplay=true , id="dQw4w9WgXcQ" ) }}
Output:
{{ youtube(autoplay=true, id="dQw4w9WgXcQ") }}
Body shortcodes {% name(args) %} … {% end %} (and the escaped {%/* … */%}) get the same treatment on their opening
tag. A raw body such as a Mermaid diagram stays byte-for-byte:
{% mermaid() %}
graph TD
A["velodex[x]"] --> B[*]
{% end %}
The body of a prose shortcode is Markdown that Zola re-renders, so the plugin formats it. By default this applies to
admonition, aside, callout, caution, details, important, note, quote, tip, and warning; every other
shortcode keeps its body verbatim. Point the plugin at your own set with the markdown_shortcodes option, on the CLI or
in .mdformat.toml:
mdformat --zola-markdown-shortcodes quote,note,sidebar content/
# .mdformat.toml
[plugin.zola]
markdown_shortcodes = ["quote", "note", "sidebar"]
Pass an empty value to keep every body verbatim.
Heading anchors
Zola lets you pin a heading's id and classes with a
{#id .class} suffix. The plugin puts the id first, then the classes in alphabetical order:
## Introduction {.lead #intro}
Formats to:
## Introduction {#intro .lead}
Code-block annotations
The plugin reorders Zola's
syntax-highlighting annotations to a fixed
sequence (linenos, linenostart, hl_lines, hide_lines, name), normalizes their whitespace, and keeps unknown
annotations:
```rust, hl_lines=3-4 8-9,linenos , linenostart=10
Formats to:
```rust,linenos,linenostart=10,hl_lines=3-4 8-9
Internal links such as [text](@/pages/about.md#anchor) survive as ordinary links, no special handling needed.
Bundled features
Installing the plugin pulls in the mdformat plugins that cover the rest of Zola's Markdown flavor (GitHub-Flavored
Markdown with footnotes, definition lists, alerts, and TOML +++ frontmatter), plus code formatters for fenced blocks:
Markdown syntax:
- mdformat-gfm - tables, strikethrough, task lists, autolinks
- mdformat-front-matters - TOML/YAML/JSON frontmatter
- mdformat-gfm-alerts - blockquote alerts (
[!NOTE],[!WARNING]) - mdformat-footnote - footnotes
- mdformat-deflist - definition lists
Code-block formatting:
- mdformat-ruff - Python blocks with ruff
- mdformat-shfmt - shell blocks with shfmt
- mdformat-config - JSON, YAML, TOML blocks
- mdformat-web - HTML, CSS, JavaScript blocks
- mdformat-pyproject - pyproject.toml blocks
Usage
mdformat content/
Metadata
Release files for mdformat-zola 1.0.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 | |
|---|---|---|---|
| mdformat_zola-1.0.0.tar.gz | 21.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mdformat_zola-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 34.8 kB
Release files / mdformat_zola-1.0.0.tar.gz
| Download URL | mdformat_zola-1.0.0.tar.gz |
|---|---|
| Size | 21.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c6db4f8e2b1e51ff88db6c7fa84d11664ff2c4fb352a139439d29005ade4736d
|
|
BLAKE2b-256 checksum How to use checksums |
156a26ab37dd54e8f48c0379d0d4d49e85968e409e4c4b126bbd14a30c7010ad
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 Jul 3, 2026.
Transparency logRelease files / mdformat_zola-1.0.0-py3-none-any.whl
| Download URL | mdformat_zola-1.0.0-py3-none-any.whl |
|---|---|
| Size | 13.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
32808ba2b708dc288d9a4ba9628e78e889d0a8ed52d3c7e5223c6229c9b0483f
|
|
BLAKE2b-256 checksum How to use checksums |
432a119bb8a0f42b85bf341b7da34284da4a561a2342f5517ecfd761b145314c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 Jul 3, 2026.
Transparency log