Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

mdformat-mkdocs

Build Status PyPI version

An mdformat plugin for mkdocs and packages commonly used with MkDocs (mkdocs-material, mkdocstrings, and python-markdown)

In addition, mdformat-mkdocs will intentionally provide support for Zensical, which is working towards feature parity with mkdocs (as of mid-2026) and may add features ahead of mkdocs.

Supports:

  • Indents are converted to four-spaces instead of two
    • Note: when specifying --align-semantic-breaks-in-lists, the nested indent for ordered lists is three, but is otherwise a multiple of four
  • Unordered list bullets are converted to dashes (-) instead of *
  • By default, ordered lists are standardized on a single digit (1. or 0.) unless --number is specified, then mdformat-mkdocs will apply consecutive numbering to ordered lists for consistency with mdformat
  • MkDocs-Material Admonitions*
    • *Note: mdformat-admon will format the same admonitions, but for consistency with the mkdocs styleguide, an extra space will be added by this package (#22)
  • MkDocs-Material Content Tabs*
    • *Note: the markup (HTML) rendered by this plugin is sufficient for formatting but not for viewing in a browser. Please open an issue if you have a need to generate valid HTML.
  • MkDocs-Material Definition Lists
  • mkdocstrings Injection Blocks
    • Preserves ::: identifier blocks and their indented YAML options verbatim, including when nested inside lists with --align-semantic-breaks-in-lists
  • mkdocstrings Anchors (autorefs)
  • mkdocstrings Cross-References
  • Python Markdown "Abbreviations"*
    • *Note: the markup (HTML) rendered for abbreviations is not useful for rendering. If important, I'm open to contributions because the implementation could be challenging
  • Python Markdown "Attribute Lists"
    • Preserves attribute list syntax when using --wrap mode
  • PyMdown Extensions "Arithmatex" (Math/LaTeX Support) (Material for MkDocs Math)
    • This plugin combines three math rendering plugins from mdit-py-plugins:
      1. dollarmath: Handles $...$ (inline) and $$...$$ (block) with smart dollar mode that prevents false positives (e.g., $3.00 is not treated as math)
      2. texmath: Handles \(...\) (inline) and \[...\] (block) LaTeX bracket notation
      3. amsmath: Handles LaTeX environments like \begin{align}...\end{align}, \begin{cases}...\end{cases}, \begin{matrix}...\end{matrix}, etc.
    • Can be deactivated entirely with the --no-mkdocs-math flag
  • Python Markdown "Snippets"*
    • *Note: the markup (HTML) renders the plain text without implementing the snippet logic. I'm open to contributions if anyone needs full support for snippets

Features with Implicit Support

The following MkDocs/Material/PyMdown syntax passes through mdformat-mkdocs unchanged — it is not modified or corrupted, but it is also not actively normalized:

Note on PyMdown ProgressBar: The syntax [=50% "50%"] resembles an undefined link reference and will be escaped to \[=50% "50%"\] by default. Use --ignore-missing-references to preserve it, or avoid this extension if you use mdformat without that flag.

See the example test files, ./tests/pre-commit-test.md and ./tests/format/fixtures.md

mdformat Usage

Add this package wherever you use mdformat and the plugin will be auto-recognized. No additional configuration necessary. For additional information on plugins, see the official mdformat documentation here

Optional Extras

This package specifies two optional "extra" plugins ('recommended' and 'recommended-mdsf' ) for plugins that work well with typical documentation managed by mkdocs:

pre-commit/prek

repos:
  - repo: https://github.com/executablebooks/mdformat
    rev: 1.0.0
    hooks:
      - id: mdformat
        additional_dependencies:
          - mdformat-mkdocs
          # Or
          # - "mdformat-mkdocs[recommended-mdsf]>=5.1.0"
          # Or
          # - "mdformat-mkdocs[recommended]"

uvx

uvx --with=mdformat-mkdocs mdformat

Or with pipx:

pipx install mdformat
pipx inject mdformat mdformat-mkdocs

HTML Rendering

To generate HTML output, any of the plugins can be imported from mdit_plugins. For more guidance on MarkdownIt, see the docs: https://markdown-it-py.readthedocs.io/en/latest/using.html#the-parser

from markdown_it import MarkdownIt

from mdformat_mkdocs.mdit_plugins import (
    material_admon_plugin,
    material_content_tabs_plugin,
    mkdocstrings_autorefs_plugin,
    mkdocstrings_crossreference_plugin,
    pymd_abbreviations_plugin,
)

md = MarkdownIt()
md.use(material_admon_plugin)
md.use(material_content_tabs_plugin)
md.use(mkdocstrings_autorefs_plugin)
md.use(mkdocstrings_crossreference_plugin)
md.use(pymd_abbreviations_plugin)

text = "- Line 1\n    - `bash command`\n    - Line 3"
md.render(text)
# <ul>
# <li>Line 1
# <ul>
# <li><code>bash command</code></li>
# <li>Line 3</li>
# </ul>
# </li>
# </ul>

Configuration

mdformat-mkdocs adds the CLI arguments:

  • --align-semantic-breaks-in-lists to optionally align semantic line breaks (continuation lines that aren't a nested list, code block, or admonition) to the width of the list marker: 3-spaces for numbered lists, 2-spaces for bulleted lists. If not specified, the default of 4-indents is followed universally.

    # with: mdformat
    1. Semantic line feed where the following line is
        three spaces deep
    
    - Semantic line feed where the following line is
        two spaces deep
    
    # vs. "mdformat --align-semantic-breaks-in-lists"
    1. Semantic line feed where the following line is
       three spaces deep
    
    - Semantic line feed where the following line is
      two spaces deep
    
  • --ignore-missing-references if set, do not escape link references when no definition is found. This is required when references are dynamic, such as with python mkdocstrings

  • --no-mkdocs-math if set, deactivate math/LaTeX rendering (Arithmatex). By default, math is enabled. This can be useful if you want to format markdown without processing math syntax.

You can also use the toml configuration (https://mdformat.readthedocs.io/en/stable/users/configuration_file.html):

# .mdformat.toml

[plugin.mkdocs]
align_semantic_breaks_in_lists = true
ignore_missing_references = true
no_mkdocs_math = true

Contributing

See CONTRIBUTING.md

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mdformat_mkdocs-5.2.2rc0.tar.gz (33.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mdformat_mkdocs-5.2.2rc0-py3-none-any.whl (43.9 kB view details)

Uploaded Python 3

File details

Details for the file mdformat_mkdocs-5.2.2rc0.tar.gz.

File metadata

  • Download URL: mdformat_mkdocs-5.2.2rc0.tar.gz
  • Upload date:
  • Size: 33.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for mdformat_mkdocs-5.2.2rc0.tar.gz
Algorithm Hash digest
SHA256 617e1f749d077b971aa8a01aced8db62fc1ff827ea01151d4889b9e092a3fd78
MD5 6f7a8ad06240a40c375348f6f8a4c79b
BLAKE2b-256 e90230981315e32950cd23479084355e48595d58a03ed924311b9e781c18d2a5

See more details on using hashes here.

Provenance

The following attestation bundles were made for mdformat_mkdocs-5.2.2rc0.tar.gz:

Publisher: tests.yml on KyleKing/mdformat-mkdocs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mdformat_mkdocs-5.2.2rc0-py3-none-any.whl.

File metadata

File hashes

Hashes for mdformat_mkdocs-5.2.2rc0-py3-none-any.whl
Algorithm Hash digest
SHA256 de94b5a25d029f7dc110418a013153b7a447ede3454f9cf669f28e0731a59e19
MD5 18184fed5818c15584def7332d69e93c
BLAKE2b-256 54632c51dbf338e419dc785021a7323b8f9a225bfe078cbaa948f8c9d469f704

See more details on using hashes here.

Provenance

The following attestation bundles were made for mdformat_mkdocs-5.2.2rc0-py3-none-any.whl:

Publisher: tests.yml on KyleKing/mdformat-mkdocs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page