# Changelog

This changelog is generated automatically from [GitHub Releases](https://github.com/posit-dev/multimark/releases).


# v0.3.2

*2026-08-08* · [GitHub](https://github.com/posit-dev/multimark/releases/tag/v0.3.2)

Packaging fix release: no functional changes from v0.3.0.


# v0.3.1

*2026-08-08* · [GitHub](https://github.com/posit-dev/multimark/releases/tag/v0.3.1)

Packaging fix release: no functional changes from v0.3.0.


# v0.3.0

*2026-08-08* · [GitHub](https://github.com/posit-dev/multimark/releases/tag/v0.3.0)

multimark `v0.3.0` adds a full AST parsing API, adopts the Python stable ABI for forward-compatible wheels, and ships pre-built Pyodide/WebAssembly wheels for browser-based Python environments. Python 3.14 is now tested in CI, and a single abi3 wheel per platform covers all CPython versions from 3.9 onward.


### New Features

- **Streaming parser** -- New [Parser](reference/Parser.html#multimark.Parser) class for incremental Markdown parsing. Feed content in chunks with `parser.feed()`, then render to any output format or access the AST via `parser.finish()`. Supports context manager usage for automatic resource cleanup. ([\#6](https://github.com/posit-dev/multimark/issues/6))

- **AST access** -- New [parse()](reference/parse.html#multimark.parse) function and [Node](reference/Node.html#multimark.Node) class expose the full CommonMark/GFM abstract syntax tree. Inspect document structure, traverse with `node.walk()`, read properties like [heading_level](reference/Node.heading_level.html#multimark.Node.heading_level), [url](reference/Node.url.html#multimark.Node.url), and [literal](reference/Node.literal.html#multimark.Node.literal), mutate the tree in place, and render subtrees independently. ([\#6](https://github.com/posit-dev/multimark/issues/6))

- **Pyodide / WebAssembly wheels** -- Pre-built wheels for Pyodide are now published to PyPI, enabling multimark in browser-based Python environments such as JupyterLite, Shinylive, and Marimo WASM mode. ([\#6](https://github.com/posit-dev/multimark/issues/6))

- **Python stable ABI (abi3) wheels** -- Wheels now use the `cp39-abi3` tag, providing a single wheel per platform that works with all CPython versions from 3.9 onward -- including future releases like 3.14. ([\#4](https://github.com/posit-dev/multimark/issues/4))


### Enhancements

- Python 3.14 is now included in the CI test matrix. ([\#6](https://github.com/posit-dev/multimark/issues/6))
- Added manually triggered CI workflows for testing native wheel, Pyodide wheel, and sdist builds before a release. ([\#6](https://github.com/posit-dev/multimark/issues/6))
- Centralized all cibuildwheel configuration in `pyproject.toml` so CI and local builds share the same settings. ([\#6](https://github.com/posit-dev/multimark/issues/6))
- Added Makefile targets for local wheel and sdist builds (`make dist-wheel`, `make dist-pyodide`, `make dist-sdist`, `make dist-all`). ([\#6](https://github.com/posit-dev/multimark/issues/6))


### Documentation

- Added a user guide page on parsing and AST usage. ([\#6](https://github.com/posit-dev/multimark/issues/6))
- Added `WHEELS.md` documenting the complete wheel build matrix, local build commands, and pre-release testing workflows. ([\#6](https://github.com/posit-dev/multimark/issues/6))
- Added parser types ([Parser](reference/Parser.html#multimark.Parser), [Node](reference/Node.html#multimark.Node), [NodeType](reference/NodeType.html#multimark.NodeType), [ListType](reference/ListType.html#multimark.ListType), [DelimType](reference/DelimType.html#multimark.DelimType), [parse](reference/parse.html#multimark.parse)) to the API reference. ([\#6](https://github.com/posit-dev/multimark/issues/6))


# v0.2.0

*2026-06-09* · [GitHub](https://github.com/posit-dev/multimark/releases/tag/v0.2.0)

Multimark `v0.2.0` introduces a command-line interface for converting Markdown directly from the terminal. The CLI supports all five output formats, GFM extensions, and rendering options. This makes it easy to use multimark in shell pipelines, scripts, and agent workflows without writing Python.


### New Features

- **Command-line interface** -- New `multimark` CLI command converts Markdown from a file or stdin to HTML, LaTeX, man, CommonMark, or XML. Supports all GFM extensions (`-e table`, `-e strikethrough`, etc.) and rendering flags (`--smart`, `--unsafe`, `--footnotes`, and more). Built with Click for shell completion and automatic help generation. ([\#1](https://github.com/posit-dev/multimark/issues/1))

- **`--width` CLI option** -- Controls line wrapping for LaTeX, man page, and CommonMark output directly from the command line. Defaults to no wrapping; set a column width (e.g., `--width 72`) to wrap long paragraphs. ([\#2](https://github.com/posit-dev/multimark/issues/2))


# v0.1.3

*2026-05-20* · [GitHub](https://github.com/posit-dev/multimark/releases/tag/v0.1.3)

Packaging fix release: no functional changes from `v0.1.0`.


# v0.1.2

*2026-05-20* · [GitHub](https://github.com/posit-dev/multimark/releases/tag/v0.1.2)

Packaging fix release: no functional changes from `v0.1.0`.


# v0.1.1

*2026-05-20* · [GitHub](https://github.com/posit-dev/multimark/releases/tag/v0.1.1)

Packaging fix release: no functional changes from `v0.1.0`.


# v0.1.0

*2026-05-20* · [GitHub](https://github.com/posit-dev/multimark/releases/tag/v0.1.0)

This is the first public release of multimark: fast Python bindings to cmark-gfm, the C reference implementation of CommonMark with GitHub Flavored Markdown extensions.

multimark provides five output renderers (HTML, LaTeX, groff man, XML, and normalized CommonMark) through a minimal, consistent API. All GFM extensions are supported (tables, strikethrough, autolinks, task lists, and tag filtering) and raw HTML is safely stripped by default. Pre-built wheels are available for Linux, macOS, and Windows across Python 3.9-3.13, with no system dependencies required.


## Highlights

- **Five renderers** -- [markdown_to_html()](reference/markdown_to_html.html#multimark.markdown_to_html), [markdown_to_latex()](reference/markdown_to_latex.html#multimark.markdown_to_latex), [markdown_to_man()](reference/markdown_to_man.html#multimark.markdown_to_man), [markdown_to_commonmark()](reference/markdown_to_commonmark.html#multimark.markdown_to_commonmark), and [markdown_to_xml()](reference/markdown_to_xml.html#multimark.markdown_to_xml), all sharing the same interface.
- **GFM extensions** -- Enable tables, strikethrough, autolinks, task lists, and tag filtering via the `extensions=` parameter.
- **Options flags** -- Boolean keyword arguments (`smart`, `unsafe`, `hardbreaks`, `sourcepos`, `footnotes`, `normalize`) plus a composable [Options](reference/Options.html#multimark.Options) bitmask for advanced flags.
- **Safe by default** -- Raw HTML is stripped unless `unsafe=True` is explicitly set.
- **Cross-platform wheels** -- Built with cibuildwheel for Linux, macOS, and Windows (Python 3.9-3.13).
