Skip to main content

mdformat-obsidian

Build Status PyPI version

An mdformat plugin for Obsidian Flavored Markdown.

Features

  • Callouts - Alert-style blocks with custom titles and folding
    • Supports all standard callout types (note, tip, warning, etc.)
    • Custom callout types with any identifier
    • Foldable callouts with - or + indicators
    • Nested callouts
    • Case-insensitive type matching (normalized to uppercase for compatibility)
  • Inline Footnotes - Obsidian's ^[inline footnote] syntax
  • Task Lists - Extended checklist markers beyond [x] and [ ]
    • Supports [?], [/], [-], and other custom markers
    • Preserves marker style during formatting
  • Dollar Math - LaTeX math with $...$ and $$...$$ delimiters
    • Inline math: $E=mc^2$
    • Block math: $$\n...\n$$

[!NOTE] The format for GitHub Alerts differs slightly from Obsidian callouts. Obsidian supports folding, custom titles, and is case-insensitive. For improved interoperability, this package normalizes callout types to uppercase (e.g., [!tip] → [!TIP]).

mdformat Usage

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

Tip: this package specifies an "extra" ('recommended') for plugins that work well with GFM:

pre-commit / prek

repos:
  - repo: https://github.com/executablebooks/mdformat
    rev: 1.0.0
    hooks:
      - id: mdformat
        additional_dependencies:
          - mdformat-obsidian
          # - "mdformat-obsidian[recommended]"

uvx

uvx --with=mdformat-obsidian mdformat

Or with pipx:

pipx install mdformat
pipx inject mdformat mdformat-obsidian

HTML Rendering

To generate HTML output, use obsidian_plugin from mdit_plugins. This combines all Obsidian-flavored markdown features (callouts, footnotes, task lists, math). For more details, see the markdown-it-py documentation.

from markdown_it import MarkdownIt
from mdformat_obsidian.mdit_plugins import obsidian_plugin

md = MarkdownIt()
md.use(obsidian_plugin)

text = "> [!tip] Callouts can have custom titles\n> Like this one."
md.render(text)
# <div>
# <div data-callout-metadata="" data-callout-fold="" data-callout="tip" class="callout">
# <div class="callout-title">
# <div class="callout-title-inner">Callouts can have custom titles</div>
# </div>
# <div class="callout-content">
# <p>Like this one.</p>
# </div>
# </div>
# </div>

Accessibility Note: For improved semantics, callouts are rendered as <div> elements rather than <blockquote>. The > syntax is repurposed for callouts (not quotations), so using div elements better represents the content structure. See discussion on GitHub.

Caveats

  • LaTeX Math: Direct \begin{...} LaTeX environments are not supported. Use dollar math syntax ($...$ or $$...$$) instead.
  • HTML Output Only: The HTML rendering features are designed for programmatic HTML generation. For markdown-to-markdown formatting (the primary mdformat use case), these renderers are not invoked.
  • GitHub Compatibility: While callouts work in both Obsidian and GitHub, subtle formatting differences exist. This plugin prioritizes Obsidian compatibility.

Contributing

See CONTRIBUTING.md

Metadata

Release files for mdformat-obsidian 0.3.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mdformat-obsidian 0.3.2
File Size Uploaded
mdformat_obsidian-0.3.2.tar.gz 12.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mdformat-obsidian 0.3.2
File Interpreter ABI Platform
mdformat_obsidian-0.3.2-py3-none-any.whl Python 3 none any Details

Total release size: 27.8 kB

Release files / mdformat_obsidian-0.3.2.tar.gz

Download URL mdformat_obsidian-0.3.2.tar.gz
Size 12.7 kB
Tags Source
SHA-256 checksum
How to use checksums
1de557e61c65f563152a0337a9645924d88648b7c5ca3f2d3379141f5b9732ec
BLAKE2b-256 checksum
How to use checksums
c9a1a0db8ddef56aa3b30b1ed323f5cce129cf7d50b345d6090ce3796465553a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 18, 2026.

Transparency log

Release files / mdformat_obsidian-0.3.2-py3-none-any.whl

Download URL mdformat_obsidian-0.3.2-py3-none-any.whl
Size 15.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f52ecde1ff36b7083e3f694086cbe00e11975dcaf0890f840a01eb572baa0063
BLAKE2b-256 checksum
How to use checksums
0a8f3e34eabc5751d18d4b9dae52f589f5ca4c1427c39acea509e905807cb148
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 18, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.3.2 This release

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page