# Pandoc 3.9 — pandoc 3.9 - Product: Pandoc (https://whatsnew.fyi/product/pandoc) - Vendor: John MacFarlane - Date: 2026-02-04 - Version: 3.9 - Original notes: https://github.com/jgm/pandoc/releases/tag/3.9 - Permalink: https://whatsnew.fyi/product/pandoc/releases/3.9 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **added** — Support for compiling pandoc to WASM to enable browser-based use, with limitations on HTTP resource fetching and system commands - **added** — Full-featured GUI interface for pandoc available at https://pandoc.org/app - **added** — Defaults files may now be in either JSON or YAML format - **added** — Variable interpolation now works for the `defaults` field of a defaults file - **added** — --extract-media will create a zip archive if the specified path has a .zip extension - **added** — Special `reset-citation-positions` class on headings to reset citation position information for --citeproc - **added** — Support for `alerts` extension in pandoc's Markdown - **added** — Support for PDF standards and tagging via lualatex - **added** — Text.Pandoc.Shared now exports hasLineBreaks - **added** — MediaWiki reader supports behavior switches that add fields to metadata - **added** — ODT reader now supports table row and column spans - **added** — DocBook reader now supports "role" attribute - **changed** — PandocError's PandocHttpError constructor now takes Text as argument instead of HttpException - **changed** — MediaWiki reader now handles ``, ``, ``, and `` tags as Code or Span elements with classes instead of raw HTML - **fixed** — RST reader fix for definition lists where term ends with `-` - **fixed** — HTML reader now properly handles style tags in the body - **fixed** — HTML reader now parses inline style elements as RawInline - **fixed** — Markdown reader fix for parsing of inline math (`$...$`) to disallow blank lines before closing delimiter - **fixed** — Markdown reader now allows superscripted spans instead of parsing them as inline notes - **fixed** — MediaWiki reader improved handling of inline tags and non-recognized tags - **fixed** — RTF reader ensures new paragraph on `\pard` and improves hyperlink parsing ``` I'm pleased to announce the release of pandoc 3.9, available in the usual places: Binary packages & changelog: https://github.com/jgm/pandoc/releases/tag/3.9 Source & API documentation: http://hackage.haskell.org/package/pandoc-3.9 Starting with this release, pandoc can be compiled to WASM, making it possible to use pandoc in the browser. A full-featured GUI interface is provided at https://pandoc.org/app. Defaults files may now be in either JSON or YAML, and variable interpolation works now for the `defaults` field of a defaults file, making it easier for defaults files to extend others. --extract-media will now create a zip archive containing the media (instead of a directory) if the specified path has a .zip extension. A special class on headings can now be used to reset 'subsequent' status for citations processed using --citeproc. This can be important for some styles, which require that full citation information be given for the first citation to a work in any given chapter. The 'alerts' extension can now be used with pandoc's Markdown. Support has been added for PDF standards and tagging via lualatex. API changes: - Text.Pandoc.Shared exports hasLineBreaks. - The PandocHttpError constructor for PandocError now takes a Text as argument instead of HttpException. Thanks to all who contributed, especially new contributors Albert Lei, Anton Melnikov, Chris Callison-Burch, Jacob Larkin, Yann Trividic, You Jiangbin, benniekiss, and har7an. ```
Click to expand changelog - Add support for compiling pandoc to WASM. (To build, `make pandoc.wasm`.) A stanza in `cabal.project` contains the necessary build modifications. We owe this almost entirely to TerrorJack, who created the original proof of context and came up with the necessary build flags and patches to some dependencies. `pandoc.wasm` has almost all the power of regular pandoc. The main limitations is that it operates in a WASM sandbox and thus cannot use HTTP to fetch resources and cannot run system commands. As a result, JSON filters cannot be used, `--embed-resources` works only with resources that have been explicitly provided in the WASM sandbox, and PDFs cannot be produced (since that requires running external commands). However, Lua filters can be used, as long as they do not run system commands. A JavaScript bridge module, `wasm/pandoc.js`, is provided; this handles the setup necessary to run `pandoc.wasm` in a browser. In addition, a full-featured GUI interface is provided in the `wasm` subdirectory. `make serve` from that directory and it will run locally, or visit . Note that once the relevant code has been downloaded by the browser, it runs entirely in the browser, and the conversions never touch a server. The GUI was developed in interaction with Claude Code. This app includes a WASM version of Typst and can produce PDF output via Typst. - Defaults files may now be either JSON or YAML (though a `.yaml` extension will still be assumed if the file has no extension). The structure of a JSON defaults file is isomorphic to that of a YAML defaults file. - Variable expansion now works even for the `defaults` field of defaults files (#8024, Jacob Larkin). - `--extract-media` will now create a zip archive containing the media (instead of a directory) if the path provided has a `.zip` extension. - Processing with `--citeproc` is now affected by a `reset-citation-positions` class on headings. When the `reset-citation-positions` class is added to a top-level heading, `--citeproc` will reset position information at that point in the document. This is needed in order to ensure that the first citation in a chapter to a work that has been cited in a previous chapter will not be in abbreviated form. - RST reader: - Fix definition lists where term ends with `-` (#11323). This reverts some old code giving special treatment to line _[Truncated at 4000 characters — full notes: https://github.com/jgm/pandoc/releases/tag/3.9]_