# Pandoc changelog > The universal document converter between markup, word-processor and typesetting formats. - Vendor: John MacFarlane - Category: Developer Tools - Official site: https://pandoc.org - Tracked by: What's New (https://whatsnew.fyi/product/pandoc) - Harvested from: GitHub (jgm/pandoc) - Entries below: 10 (newest first) 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'. ## Releases ### 3.10.1 — pandoc 3.10.1 - Date: 2026-07-22 - Version: 3.10.1 - Original notes: https://github.com/jgm/pandoc/releases/tag/3.10.1 - Permalink: https://whatsnew.fyi/product/pandoc/releases/3.10.1 - **added** — t2t (Txt2Tags markup) is now an output format - **added** — New module Text.Pandoc.Writers.Txt2Tags, exporting writeTxt2Tags - **added** — Support auto_identifiers extension with typst input - **added** — New flake.nix allows use of 'nix build' and 'nix run' with pandoc - **changed** — Defaults file no longer requires .yaml extension; pandoc will add it only if no file exists with the specified name - **changed** — Use '#divider()' (typst 0.15) for typst horizontal rules instead of defining a custom horizontalRule function - **changed** — Ordered sublists must start with 1 or equivalent (e.g. i) - **changed** — Automatically enable auto_identifiers when a table of contents is requested - **changed** — Use starmath instead of MathML for math in ODT, improving appearance and editability of equations - **fixed** — RST reader: nested placeholder resolution for inline elements (regression from pandoc 3.6) - **fixed** — RST reader: treat undefined substitution references as plain text - **fixed** — ODT reader: don't create Emph just because of changed font - **fixed** — RTF reader: support multi-paragraph list items - **fixed** — RTF reader: support legacy \pn/\pntext paragraph numbering - **fixed** — Docx reader: improve horizontal rule detection - **fixed** — Docx reader: key list numbering off abstractNumId, fixing numbering for restarted lists - **fixed** — LaTeX reader: handle \hypertarget with one braced parameter - **fixed** — LaTeX writer: provide a way to use table instead of longtable via float class on tables - **fixed** — Markdown writer: fix ordered list indentation bug ``` I'm pleased to announce the release of pandoc 3.10.1, available in the usual places: Binary packages & changelog: https://github.com/jgm/pandoc/releases/tag/3.10.1 Source & API documentation: http://hackage.haskell.org/package/pandoc-3.10.1 This release contains many small improvements and bug fixes. Some of the more notable ones are mentioned here (see the changelog for details): - t2t (Txt2Tags markup) is now an output format. - It is now possible to use a defaults file without an extension; pandoc will add the .yaml extension only if no file exists with the name specified. - The auto_identifiers extension may now be used with typst input. (however, it is not enabled by default.) - We now use '#divider()' (typst 0.15) for typst horizontal rules, instead of defining our own horizontalRule function. - It is now finally possible to force LaTeX to use a regular floating table rather than a longtable, which is especially important for two-column layouts (longtable does not support them). One does this by adding the `float` class to the table's attributes. - starmath is now used instead of MathML for math in ODT. This produces much better results and improves the editability of equations. - We now automatically enable auto_identifiers when a table of contents is requested, since these require identifiers to link to. - A new flake.nix allows use to use 'nix build' and 'nix run' with pandoc. API changes: New module Text.Pandoc.Writers.Txt2Tags, exporting writeTxt2Tags, also re-exported by Text.Pandoc.Writers. Thanks to all who contributed, especially new contributors Can H. Tartanoglu, Chirag Dhamange, Enrico Spinielli, Robertas, Scott Talbert, Tobias Deiminger, luginf. ```
Click to expand changelog - New output format `t2t` (Txt2Tags markup, )) (luginf). - New module Text.Pandoc.Writers.Txt2Tags, exporting `writeTxt2Tags` (loginf) \[API change\]. Also exported from Text.Pandoc.Writers. - Change adding of `.yaml` extension in `--defaults` option (#11717). Previously it was always added if the specified filename lacked an extension. Now it is only added if there is no file with the original name. This facilitates using `--defaults` with bash/zsh `<(..)` or `=(..)`. - RST reader: - Fix nested placeholder resolution for inline elements (#11753, Tobias Deiminger). (Regression from pandoc 3.6.) - Treat undefined substitution references as plain text (#11727). This mirrors rst2html behavior. - Markdown reader: - Ordered sublists must start with 1, er equivalent, e.g. i (#11735). This brings the markdown parser in line with commonmark, and avoids a lot of unintended list starts. Note that ordered lists that are not sublists may still start with numbers other than 1. - ODT reader: - Don’t create Emph just because of changed font (#11691). - RTF reader: - Support multi-paragraph list items. - Support legacy `\pn/\pntext` paragraph numbering (#11686). - Docx reader: - Improve horizontal rule detection (#11689). - Key list numbering off `abstractNumId`, fixing numbering for restarted lists (#8367). - LaTeX reader: - Handle `\hypertarget` with one braced parameter (#7418). - DokuWiki reader: - Skip non-cell content after table row (#11739). - Typst reader: - Support `auto_identifiers` extension (#11041). The extension is available for the typst reader but is off by default; enable it with `-f typst+auto_identifiers`. The related `gfm_auto_identifiers` and `ascii_identifiers` extensions are also made available. - Recognize `divider()` for horizontal rule (#11540). - HTML reader: - Fix unused variable warning in CI (#11704, Robertas). - Strip `language-` from all classes, not just first (#11701). Also combine classes from both code and pre class if they are nested. - Powerpoint writer: - Keep tables and surround _[Truncated at 4000 characters — full notes: https://github.com/jgm/pandoc/releases/tag/3.10.1]_ ### 3.10 — pandoc 3.10 - Date: 2026-06-04 - Version: 3.10 - Original notes: https://github.com/jgm/pandoc/releases/tag/3.10 - Permalink: https://whatsnew.fyi/product/pandoc/releases/3.10 - **added** — Add --typst-input CLI option to pass parameters to typst evaluator via sys.inputs - **changed** — groff is now the default pdf-engine for ms format, replacing pdfroff - **added** — auto_identifiers extension and related extensions are now available for the man reader - **changed** — OpenDocument/ODT writer now uses predefined styles instead of emitting automatic styles for every paragraph - **added** — Markdown reader now allows grid tables to be indented by up to three spaces - **fixed** — Markdown reader: fix calculation of column widths for default columns in grid tables - **fixed** — HTML reader: parse aside as a Div with class aside instead of using raw HTML - **added** — HTML reader: add header class to Divs created from headers - **fixed** — Docx reader: fix bug in bitmask checking that led to some table rows being wrongly considered header rows - **fixed** — Docx reader: improve treatment of tblHeader element to not consider it a header if w:val is 0 - **changed** — Docx reader: with citations extension, prefer citation-key as the key for item data if defined - **fixed** — Docx reader: don't look to ext tags for image extent - **added** — Man reader: support auto_identifiers, gfm_auto_identifiers, and ascii_identifiers extensions for section headings - **fixed** — Man reader: better handling of .TP macro to include all material until next indentation-changing macro - **fixed** — Roff reader: handle backslash line continuation in table cells - **fixed** — LaTeX reader: evaluate theorem name when used rather than when \newtheorem command is encountered - **fixed** — LaTeX reader: put identifier from label on table attributes rather than adding an enclosing Div - **fixed** — Typst reader: fix issue parsing figure inside rotate or box - **fixed** — RTF reader: fix tables parsed as deeply nested tables - **fixed** — Docx writer: fix display of paragraph with just inline math by adding zero-width space ``` I'm pleased to announce the release of pandoc 3.10, available in the usual places: Binary packages & changelog: https://github.com/jgm/pandoc/releases/tag/3.10 Source & API documentation: http://hackage.haskell.org/package/pandoc-3.10 In addition to the usual basket of bug fixes and small improvements, the following changes are worth mention: - This release adds a --typst-input option, which allows passing arbitrary `sys.inputs` parameters to the typst evaluator. - groff is now the default pdf-engine for the ms format, replacing pdfroff. - The auto_identifiers extension (and related extensions) are now available for the man reader. - OpenDocument/ODT now uses predefined styles instead of emitting automatic styles for every paragraph. This yields more idiomatic, and more easily stylable, output, resolving a handful of longstanding issues. If you use a custom reference.odt, it may need some updating. API changes: - Text.Pandoc.App.Opt: Opt has a new fieldi optTypstInputs. - Text.Pandoc.Options: ReaderOptions has a new field readerTypstInputs. Thanks to all who contributed, especially new contributors Dan Jacobson, Johan Larsson, Keenan Brock, Meher Chaitanya, Sai Asish Y, and nibras shami. ```
Click to expand changelog - Add `--typst-input` CLI option (#11588). This allows one to pass parameters to typst, which are available at `sys.inputs`, just as `typst` itself does with its `--input` option. - Avoid trailing spaces in `--help` output (#11623). - Make groff the default pdf-engine for `ms` output (#11558). Formerly it was pdfroff. - Set default User-Agent request header to `pandoc/VERSION`. This can be overridden using the `--request-header` option. - Markdown reader: - Allow grid tables to be indented (#11671, Johan Larsson). Like the other table syntaxes (pipe, simple, and multiline tables) and block-level constructs generally, a grid table may now be indented by up to three spaces and still be recognized as a table. Previously the grid-table parser required the table to begin at the left margin, so an indented grid table was parsed as a paragraph. - Fix calculation of column widths for default columns in grid tables (#11664). This fixes a bug which produced too-narrow columns in some cases. - Don’t produce empty Raw element with `--strip-comments` (#11625). - Fix quotes in inline notes (#11613, Andrew Dunning). - Allow spaces inside attributes in super/sub (#11589). - Simplify `checkNotes`, remove dead code - Various small performance optimizations. - HTML reader: - Parse aside as a Div with class “aside” (instead of using raw HTML) (#11626). - Add “header” class to Divs created from headers. - Docx reader: - Fix bug in bitmask checking (#8299). This led to some table rows being wrongly considered header rows. - Improve treatment of `tblHeader` element (#8299). If `tblHeader` exists but has `w:val="0"`, then don’t consider the element a header. - With `citations` extension, prefer `citation-key` as the key for item data, if it is defined (#11581; cf. #10366, #11567). The `id` key used by Zotero is not exposed by their API and is generally not what is wanted when converting to biblatex. - Don’t look to `ext` tags for image extent (#11580). This reverts a change from 7ff1b798c4e6681ef9050899442d80883116573a. The change was mistaken and could cause images to be parsed with the wrong sizes. - Man reader: - Support `auto_identifiers`, `gfm_auto_identifiers`, and `ascii_identifiers` extensions (#8852, Meher Chaitanya). Section headings parsed from .SH and .SS macros now receive auto-generated id attributes when the extension is enabled (as it is by default). This enables `--toc` to produce working anchor links. - Better handling of `.TP` macro (#11668). We parse these as DefinitionList items, but we previously sometimes stopped prematurely in including material _[Truncated at 4000 characters — full notes: https://github.com/jgm/pandoc/releases/tag/3.10]_ ### 3.9.0.2 — pandoc 3.9.0.2 - Date: 2026-03-19 - Version: 3.9.0.2 - Original notes: https://github.com/jgm/pandoc/releases/tag/3.9.0.2 - Permalink: https://whatsnew.fyi/product/pandoc/releases/3.9.0.2 - **fixed** — Fix regression in Typst template introduced in 3.9.0.1 ``` I'm pleased to announce the release of pandoc 3.9.0.2, available in the usual places: Binary packages & changelog: https://github.com/jgm/pandoc/releases/tag/3.9.0.2 Source & API documentation: http://hackage.haskell.org/package/pandoc-3.9.0.2 This release just fixes a bad regression in the typst template. ```
Click to expand changelog - Typst template: fix regression introduced in 3.9.0.1 (#11538).
### 3.9.0.1 — pandoc 3.9.0.1 - Date: 2026-03-18 - Version: 3.9.0.1 - Original notes: https://github.com/jgm/pandoc/releases/tag/3.9.0.1 - Permalink: https://whatsnew.fyi/product/pandoc/releases/3.9.0.1 - **fixed** — Don't block everything while pandoc.wasm loads - **fixed** — Fix bug with Unicode filenames in WASM GUI - **fixed** — Catch errors loading pandoc in WASM GUI - **fixed** — Recognize media inside textboxes in Docx reader - **fixed** — Properly handle media stored with packaged-rooted paths such as /media in Docx reader - **fixed** — Preserve non-textbox content when unwrapping textboxes in Docx reader - **added** — Handle bibliography command in Typst reader and add bibliography section to document - **added** — Handle block content in cells in Textile reader - **added** — Support w:gridBefore table row property in Docx reader - **added** — Support \footnotemark and \footnotetext commands in LaTeX reader - **added** — Support supertabular environment in LaTeX reader - **fixed** — Fix relative linked images in ODT Reader - **added** — Recognize Preformatted_20_Text style in ODT Reader - **added** — Support Preformatted Text style in ODT Reader - **fixed** — Fix bug with lists_without_preceding_blankline in Markdown reader - **changed** — Don't add carriage return after \ for hard break in Typst writer - **changed** — Improve handling of data: URIs in images in Typst writer - **fixed** — Fix escaping of quotes in Typst writer - **added** — Include alt attributes on images in Typst writer - **fixed** — Properly escape . after bracketed argument in Typst writer ``` I'm pleased to announce the release of pandoc 3.9.0.1, available in the usual places: Binary packages & changelog: https://github.com/jgm/pandoc/releases/tag/3.9.0.1 Source & API documentation: http://hackage.haskell.org/package/pandoc-3.9.0.1 This is a bug-fix release, with no major new features or API changes, but lots of small improvements. See the changelog for details. Thanks to all who contributed, especially new contributors Agriya Khetarpal, Peter Briggs, Sidney Mau, and λx.x. ```
Click to expand changelog - WASM GUI: - Don’t block everything while pandoc.wasm loads. - Fix bug with Unicode filenames (#11447). - Catch errors loading pandoc. - Docx reader: - Recognize media inside textboxes (#11053, Raymond Berger). - Properly handle media stored with packaged-rooted paths such as `/media` (#11518). This can be produced by the online version of Word. With this change, media stored at an absolute path will be stored with its original name and not given a SHA1-based name. - Preserve non-textbox content when unwrapping textboxes (#11510, #6893, #11412, #5394, #9633). Treat text inside a textbox containing an image as a figure caption. - Typst reader: - Handle bibliography command (#11460). If this is present, a bibliography section is added to the document and the bibliography paths are added to `bibliography` in the metadata. This sets things up for using `--citeproc`. - Textile reader: - Handle block content in cells (#11455). - Docx reader: - Support `w:gridBefore` table row property (#11464, Jan Tojnar). - LaTeX reader: - Support `\footnotemark` and `\footnotetext` (#11450). These commands allow separating the footnote mark from its content, useful in tables, minipages, and other contexts where \footnote cannot be used directly. - Support supertabular environment (#11523, bodigrim). - ODT Reader: - Fix relative linked images (#11369, Tuong Nguyen Manh). - Recognize `Preformatted_20_Text` style Jan Tojnar This is used by LibreOffice, and we will switch to that as well. - Add block smushing logic (Jan Tojnar). - Support Preformatted Text style (#4841, Jan Tojnar). - Markdown reader: - Fix bug with `lists_without_preceding_blankline` (#11534). - Typst writer: - Don’t add a carriage return after `\` for hard break (#11446). They are not necessary. Note that they can still be included if you use `--wrap=preserve` and add a newline in your source document. - Improve handling of data: URIs in images. Instead of using an SVG with a link containing the data URI (the solution of #10460), we can now simply produce a `bytes` object with the requisite bytes. Typst figures out the format automatically. - Fix escaping of quotes (#11463). - Include alt attributes on images (mcanouil). - Properly escape `.` after bracketed argument (#11511). - Docx writer: - Don’t depend on `extractTarget` from Docx reader. - Fix section breaks with `--top-level-division` (#11482, #10578). - EPUB writer: - Add cover metadata for EPUB3 (#11479). This allows file managers to show cover thumbnails for EPUB3 files as well. - Update allowed values for EPUB3 metadata `identifier.scheme` (#11481, Pascal Wagler). - ODT writer: - Rename inline source class to match LibreOffice (#3390, Jan Tojnar). Rename the text style we use to represent `Code` inlines from `Source_20_Text` to `Source_Text`. This is the same name LibreOffice Writer uses so it will be recognized by the Character Styles section of the Styles menu. - Remove font size from inline source class (Jan Tojnar). This matches what LibreOffice Writer is doing. Also fixes literals inside headings being too small. - Modernize `Preformatted Text` & `Source Text` styles (Jan Tojnar). Presumably, `font-family-generic` and `font-pitch` will allow to find a replacement on systems that do not have `Courier New`. _[Truncated at 4000 characters — full notes: https://github.com/jgm/pandoc/releases/tag/3.9.0.1]_ ### 3.9 — pandoc 3.9 - 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 - **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]_ ### 3.8.3 — pandoc 3.8.3 - Date: 2025-12-01 - Version: 3.8.3 - Original notes: https://github.com/jgm/pandoc/releases/tag/3.8.3 - Permalink: https://whatsnew.fyi/product/pandoc/releases/3.8.3 - **added** — Add asciidoc as an input format - **added** — Add xlsx (Microsoft Excel) as an input format, where each worksheet turns into a section containing a table - **added** — Add pptx (PowerPoint) as an input format - **added** — Add bbcode as an output format with variants: bbcode_fluxbb, bbcode_phpbb, bbcode_steam, bbcode_hubzilla, and bbcode_xenforo - **added** — Export new module Text.Pandoc.Readers.AsciiDoc with readAsciiDoc function - **added** — Export new module Text.Pandoc.Readers.Pptx with readPptx function - **added** — Export new module Text.Pandoc.Readers.Xlsx with readXlsx function - **added** — Export new module Text.Pandoc.Writers.BBCode with writeBBCode and variant functions - **added** — Export insertCurrentSpansAtColumn, takePreviousSpansAtColumn, and decrementTrailingRowSpans from Text.Pandoc.Writers.Shared - **added** — Export allRowsEmpty and tableBodiesToRows from Text.Pandoc.Shared - **added** — Add reveal.js scroll and scrollSnap options to HTML writer and template - **added** — Add Space elements in Djot reader to represent breakable spaces - **fixed** — Revert \linebreak to LineBreak in LaTeX reader - **fixed** — Fix spurious paragraph breaks in math environments in LaTeX reader - **fixed** — Fix rawTeXParser to make macro expansion in raw LaTeX depend on the latex_macros extension setting - **fixed** — Fix performance issue in Markdown reader with links containing apostrophes - **fixed** — Handle REF link instruction in Docx reader - **fixed** — Check recursively for caption styles in Docx reader to recognize caption styles built on top of basic caption style - **fixed** — Fix Typst reader to handle document metadata and #title function - **fixed** — Fix intraword emphasis handling in RST reader ``` I'm pleased to announce the release of pandoc 3.8.3, available in the usual places: Binary packages & changelog: https://github.com/jgm/pandoc/releases/tag/3.8.3 Source & API documentation: http://hackage.haskell.org/package/pandoc-3.8.3 This release adds three new input formats (asciidoc, pptx, and xlsx) and one new output format (bbcode + variants). It fixes a number of bugs (including some regressions in 3.8). See the changelog for full details. API changes: + New exported module Text.Pandoc.Readers.AsciiDoc, exporting readAsciiDoc. + New module Text.Pandoc.Readers.Pptx, exporting readPptx. + New module Text.Pandoc.Readers.Xlsx, exporting readXlsx. + Text.Pandoc.Readers: Export readAsciiDoc, readXlsx, readPptx. + New module Text.Pandoc.Writers.BBCode, exporting writeBBCode, writeBBCodeSteam, writeBBCodeFluxBB, writeBBCodePhpBB, writeBBCodeHubzilla, writeBBCodeXenforo. + Text.Pandoc.Writers: Export writeBBCode, writeBBCodeSteam, writeBBCodeFluxBB, writeBBCodePhpBB, writeBBCodeHubzilla, writeBBCodeXenforo . + Text.Pandoc.Writers.Shared: Export insertCurrentSpansAtColumn, takePreviousSpansAtColumn and decrementTrailingRowSpans. + Text.Pandoc.Shared: Export allRowsEmpty and tableBodiesToRows. Thanks to all who contributed, especially new contributors Anton Antich, and Asliddinbek Azizovich, and James Barlow. ```
Click to expand changelog - Add `asciidoc` as an input format (#1456). - Add `xlsx` (Microsoft Excel) as an input format (Anton Antich). Each worksheet turns into a section containing a table. - Add `pptx` (PowerPoint) as new input format (Anton Antich). - Add `bbcode` as a new output format (#11242, reptee). Several variants of BBCode are also supported: `bbcode_fluxbb` (FluxBB), `bbcode_phpbb` (phpBB), `bbcode_steam` (Hubzilla), `bbcode_hubzilla` (Hubzilla), and `bbcode_xenforo` (xenForo). - New exported module Text.Pandoc.Readers.AsciiDoc, exporting `readAsciiDoc` \[API change\]. - New module `Text.Pandoc.Readers.Pptx`, exporting `readPptx` (Anton Antich) \[API change\]. - New module `Text.Pandoc.Readers.Xlsx`, exporting `readXlsx` (Anton Antich) \[API change\]. - LaTeX reader: - Revert `\linebreak` as LineBreak (#11272). `\linebreak` is more of a hint, it shouldn’t produce a hard break. - Better handling of `\makeatletter` in parsing raw LaTeX (#11270). - Fix spurious paragraph breaks in math environments (#11265, Emmanuel Ferdman). Previously, a math environment with extra space before the `\end` would get rendered with a blank line, which LaTeX treats as a paragraph break. - Change type on `rawLaTeXParser` in Text.Pandoc.LaTeX.Parsing. The preparser doesn’t need to return a value. - Fix `rawTeXParser` (#11253). Make macro expansion in raw LaTeX depend on the setting of the `latex_macros` extension. Previously macros were always expanded, even in raw TeX in markdown. In addition, there was previously a bug that caused content to be garbled in certain cases. - Handle `ifstrequal` at a lower level, like the other `if` commands (#11253). - Move `ifstrequal`, `iftoggle`, etc., which were misplaced in `environments`, to `blockCommands`, so these commands work properly. - Docx reader: - Handle REF link instruction (#11296, Ezwal). - Check recursively for caption styles (Albert Krewinkel). The docx reader uses caption styles to identify figures and captioned tables. It now checks for known caption styles in the full styles hierarchy of a paragraph instead of just checking the style directly. This allows to recognize caption styles that are built on top of the basic *caption* style, as is sometimes the case in sophisticated styles. - Markdown reader: - Fix performance issue in links with `'` (#10880). - Typst reader: - Handle document metadata and `#title` (jgm/typst-hs#80). Note that previously, the typst reader never return _[Truncated at 4000 characters — full notes: https://github.com/jgm/pandoc/releases/tag/3.8.3]_ ### 3.8.2.1 — pandoc 3.8.2.1 - Date: 2025-10-20 - Version: 3.8.2.1 - Original notes: https://github.com/jgm/pandoc/releases/tag/3.8.2.1 - Permalink: https://whatsnew.fyi/product/pandoc/releases/3.8.2.1 - **fixed** — HTML reader now allows blank space between open and close iframe tags - **fixed** — RTF reader improves hyperlink parsing - **added** — Org reader now parses parameter lists on unknown blocks, trying lisp-style, python-style, and fallback formats - **added** — Org reader now supports dynamic blocks - **fixed** — Docx writer now properly handles nested comment spans - **fixed** — RST writer no longer uses simple tables with RowSpans - **fixed** — Typst writer now escapes open paren after non-space characters - **fixed** — Typst template now ensures that title block is properly centered - **fixed** — LaTeX writer and template small fix for unnumbered tables for compatibility with older LaTeX installations - **fixed** — Corrected anchor references to pandoc.text module documentation - **fixed** — Fixed golden test regeneration in Docx reader test - **changed** — Updated citeproc to 0.11 to fix significant performance regression with --citeproc and chicago-author-date.csl style - **changed** — Allow unicode-data 0.8 ``` I'm pleased to announce the release of pandoc 3.8.2.1, available in the usual places: Binary packages & changelog: https://github.com/jgm/pandoc/releases/tag/3.8.2.1 Source & API documentation: http://hackage.haskell.org/package/pandoc-3.8.2.1 This is primarily a bug-fix release. There are no API changes. The main motivation for the release is to fix a serious performance regression with --citeproc and the default CSL style, chicago-author-date.csl. This style was recently revised in a way that took much longer for citeproc to parse. This version of pandoc is built with citeproc 0.11, which fixes the performance regression. One new feature (added by Albert Krewinkel) is that the Org reader now parses parameter lists on unknown blocks, and also supports dynamic blocks. Thanks to all who contributed, especially new contributors Emmanuel Ferdman, FoxChillz, mourino, and priiduonu. ```
Click to expand changelog - HTML reader: allow blank space between open and close `iframe`. - RTF reader: improve hyperlink parsing (#11211). - Org reader: - Parse parameter lists on unknown blocks (#11188, Albert Krewinkel). The reader tries to parse the rest of the opening line of a block, e.g., `#+begin_myblock …`, as a parameters list. It first assumes that the parameters are in lisp-style (`:key value`), then alternatively tries to read python-style key-value pairs (`key=value`) and falls back to reading the entire remaining line as a single `parameter` attribute. - Add support for dynamic blocks. - Docx writer: properly handle nested comment spans (#8189, #6959, mourino). - RST writer: Don’t use simple tables with RowSpans (#11214, Tuong Nguyen Manh). - Typst writer: Escape open paren after non-space (#11210). This fixes an issue that occurs if an open paren comes right after e.g. `#strong[test]`. - Typst template: ensure that title block is properly centered (#11221). - LaTeX writer/template: small fix for unnumbered tables for compatibility with older LaTeX installations (#11201). Thanks to @priiduonu for the solution. - MANUAL.txt: Fixed missing backtick (#11209, FoxChillz). - Correct anchor references to `pandoc.text` module documentation (#11111, Emmanuel Ferdman). - Fixed golden test regeneration in Docx reader test. - Allow unicode-data 0.8. - Use citeproc 0.11. This fixes a significant performance regression in pandoc 3.8, which was due to a rewrite of the default chicago-author-date.csl file. Performance with `--citeproc` is now on par with what we had in pandoc 3.7, even with the revised Chicago styles.
### 3.8.2 — pandoc 3.8.2 - Date: 2025-10-05 - Version: 3.8.2 - Original notes: https://github.com/jgm/pandoc/releases/tag/3.8.2 - Permalink: https://whatsnew.fyi/product/pandoc/releases/3.8.2 - **fixed** — Fix regression in typst template since 3.8 which caused links to be omitted - **added** — Add new default Markdown extension `table_attributes` which allows attributes to be added to tables by putting them after the caption - **added** — Implement `table_attributes` extension for Markdown reader and writer to allow arbitrary attributes on tables - **changed** — Add `Ext_table_attributes` constructor to Extension API - **changed** — Typst writer: escape semicolons that might come right after a command to avoid superfluous semicolons - **fixed** — Fix strikeout in links in LaTeX writer by protecting `\url` and `\href` inside an mbox for `soul` commands - **changed** — Rewrite `oneOfStrings` in Text.Pandoc.Parsing more efficiently - **changed** — Update to released texmath 0.13.0.1 ``` I'm pleased to announce the release of pandoc 3.8.2, available in the usual places: Binary packages & changelog: https://github.com/jgm/pandoc/releases/tag/3.8.2 Source & API documentation: http://hackage.haskell.org/package/pandoc-3.8.2 This release fixes a regression in the typst template (since 3.8), which caused links to be omitted. It also adds a new default Markdown extension, `table_attributes`, which allows attributes to be added to tables by putting them after the caption. API change: Add `Ext_table_attributes` constructor to Extension. Thanks to all who contributed. ```
Click to expand changelog - Markdown reader/writer: implement new `table_attributes` extension (#10884). When `table_attributes` is enabled (as it is by default for pandoc’s Markdown), attributes can be attached to a table by including them at the end of the caption. Previously the writer would emit an identifier in this position, but the reader didn’t handle it. Now arbitrary attributes are allowed, and they work in both the reader and writer. - Typst writer: don’t add superfluous semicolons (#11196). Previously we added semicolons after inline commands not followed by spaces, but mainly this was to deal with one issue: the presence of a semicolon after an inline command, which would be swallowed as a command separator (#9252). This commits adopts an approach that should avoid so many superfluous semicolons: it escapes semicolons that might come right after a command. - Typst template: fix 3.8 regression in which links disappear (#11194). A template change in 3.8 added a show rule for links which causes them to disappear except in special cases. - Text.Pandoc.Parsing: rewrite `oneOfStrings` more efficiently. - LaTeX writer: Fix strikeout in links (#11192, Tuong Nguyen Manh). As in #1294 `\url` and `\href` need to be protected inside an mbox for `soul` commands. - Text.Pandoc.Extensions: Add `Ext_table_attributes` constructor for `Extension` \[API change\]. - Use released texmath 0.13.0.1. - Update FSF contact information in COPYING (#11183, Bensun Muite). - MANUAL.txt: remove some redundancy (#11178, Reuben Thomas).
### 3.8.1 — pandoc 3.8.1 - Date: 2025-09-29 - Version: 3.8.1 - Original notes: https://github.com/jgm/pandoc/releases/tag/3.8.1 - Permalink: https://whatsnew.fyi/product/pandoc/releases/3.8.1 - **added** — New output format vimdoc for Vim documentation - **added** — New shorthands variable allows activating babel shorthands in LaTeX/PDF output - **added** — New module Text.Pandoc.Writers.Vimdoc, exporting writeVimdoc - **added** — New functions tableWithSpans, tableWithSpans', toTableComponentsWithSpans, and toTableComponentsWithSpans' in Text.Pandoc.Parsing - **added** — New function removeLinks in Text.Pandoc.Shared - **added** — Export functions formatTypstBlock, formatTypstInline, styleToTypst from Text.Pandoc.Highlighting - **added** — Support for reading typst pagebreak, parsed as a HorizontalRule inside a wrapper Div with class page-break - **added** — Parse :alt: on figure in RST reader - **added** — Support col spans for simple tables in RST reader - **changed** — --syntax-highlighting now works as expected for typst output - **changed** — Improve superscript/subscript/inline note parsing in Markdown reader - **changed** — Docx reader uses Tasty.Golden for tests allowing updates with --accept - **changed** — LaTeX writer now makes beamer footnotes compatible with pauses - **changed** — Markdown writer improves handling of implicit figures - **changed** — Markdown writer uses approximate pipe tables when it's the only option - **fixed** — Fix simple table alignment in Markdown reader by taking wide characters into account - **fixed** — Fix regression in simple table parsing in RST reader - **fixed** — Fix syntax highlighting in Typst writer - **fixed** — Fix regression from 3.8 in highlighted code in Docx writer - **removed** — Remove coloring for links in epub.css so that the reader's defaults will be used ``` I'm pleased to announce the release of pandoc 3.8.1, available in the usual places: Binary packages & changelog: https://github.com/jgm/pandoc/releases/tag/3.8.1 Source & API documentation: http://hackage.haskell.org/package/pandoc-3.8.1 This release introduces a few new features and fixes some bugs and regressions. Of special note: - New output format vimdoc (for Vim documentation). - --syntax-highlighting now works as expected for typst output. - New shorthands variable allows activating babel shorthands in LaTeX/PDF output. - Removed coloring for links in epub.css, so that the reader's defaults will be used. API changes: - New module Text.Pandoc.Writers.Vimdoc, exporting writeVimdoc. - Text.Pandoc.Parsing: new functions tableWithSpans, tableWithSpans', toTableComponentsWithSpans, and toTableComponentsWithSpans'. - Text.Pandoc.Shared: new function removeLinks. - Text.Pandoc.Highlighting: export functions formatTypstBlock, formatTypstInline, styleToTypst (from skylighting). Thanks to all who contributed, especially Tuong Nguyen Manh (who has been working hard to improve table support) and new contributors Raymond Berger and reptee. ```
Click to expand changelog - New output format `vimdoc` (Vim documentation format) (#11132, reptee). - \[API change\] Added module Text.Pandoc.Writers.Vimdoc, exporting `writeVimdoc`. - Markdown reader: - Improve superscript/subscript/inline note parsing (#8652). We do not allow inline notes to be followed by `(` or `[`. Otherwise, we parse inline notes before superscripts. Also, the sub/superscript parsers have been adjusted so that they really exclude unescaped spaces (as they did not before, when the spaces occurred in nested inlines). - Fix simple table alignment (#11136, Tuong Nguyen Manh). Take wide characters into account when determining the alignment. - LaTeX reader: - Ignore `\pandocbounded` (#11140). - XML reader: - Parse `` (#11137, massifrg). - Typst reader: - Add support for reading typst pagebreak (#11101, Raymond Berger). The pagebreak is parsed as a HorizontalRule inside a wrapper Div with class `page-break`. - Docx reader: - Handle figures in indented paragraphs (#11028). - Change default for textwidth. This should only be used if `sectPr` is not found. - Properly calculate table column widths (#9837, #11147). Previously we assumed that every table took up the full text width. Now we read the text width from the document’s `sectPr`. - Use Tasty.Golden for Docx reader tests. This way we can update them with `--accept`. - RST reader: - Fix regression in simple table parsing (#11150). - SkippedContent warning if table directive contains non-tabular content. - Simple tables: leading space in a cell should not cause the contents to be parsed as a block quote (#11146). - Parse `:alt:` on figure (#11140). Also give a better default if `alt` is not specified, using the stringified caption rather than the filename. - Support col spans for simple tables (Tuong Nguyen Manh). - Markdown writer: - Improve handling of implicit figures (#11140). Allow implicit figures when alt text differs from caption (in this case, we use an image attribute to add the alt). - Use approximate pipe tables when it’s the only option (#11128). If we have a table with row/colspans that can rendered as an approximate pipe table (without row/colspans), and no other table format is enabled that could render the table, we fall back to an “approximate” pipe table, with no row/colspans. - RST writer: - Ensure blank line before directives (#11162). - Add col spans for simple tables (#10127, Tuong Nguyen Manh). - OpenDocument writer: - Add missing table elements (#10002, Tuong Nguyen Manh). Add missing header rows after the first one, footer rows as well as TableBody header rows. - Docx writer: - Fix regre _[Truncated at 4000 characters — full notes: https://github.com/jgm/pandoc/releases/tag/3.8.1]_ ### 3.8 — pandoc 3.8 - Date: 2025-09-06 - Version: 3.8 - Original notes: https://github.com/jgm/pandoc/releases/tag/3.8 - Permalink: https://whatsnew.fyi/product/pandoc/releases/3.8 - **added** — Add a new input and output format xml that exactly represents a pandoc AST in a more easily human-readable form than JSON - **added** — Add a new command line option --syntax-highlighting that takes the values 'none', 'default', 'idiomatic', a style name, or a path to a theme file - **added** — Add smart_quotes and special_strings extensions for org mode to more closely reproduce Emacs org-mode behavior - **added** — Create directory of output file if it doesn't exist - **added** — Add new modules Text.Pandoc.Readers.XML and Text.Pandoc.Writers.XML - **added** — Add Point and Pica as constructors of ImageSize and Avif constructor of ImageType - **added** — Export new functions from Text.Pandoc.Class: getRequestHeaders, setRequestHeaders, getSourceURL, getTrace - **changed** — Update --version copyright dates and use hardcoded string 'pandoc' for the program name per GNU guidelines - **changed** — Text.Pandoc.Extensions: added constructors Ext_smart_quotes and Ext_special_strings - **changed** — Text.Pandoc.App now exports versionInfo function that takes three parameters - **changed** — Text.Pandoc.Parsing: tableWith and tableWith' now return a list of lists of Blocks allowing for multiple header rows - **changed** — Text.Pandoc.Class: CommonState is now opaque and does not support its fields - **changed** — LaTeX reader: change handling of math environments to retain original environments like align and equation in Math inlines instead of downshifting them - **changed** — Org reader: improve sub- and superscript parsing to correctly handle text preceded by space or at the start of a paragraph - **fixed** — Make -t chunkedhtml -o - output to stdout rather than creating a directory called - - **fixed** — Typst reader: fix addition of image path prefix to use posix separator - **fixed** — HTML reader: don't drop the initial newline in a pre element - **deprecated** — --no-highlighting and --highlight-style options are deprecated in favor of --syntax-highlighting - **removed** — Remove the old compact_definition_lists extension ``` I'm pleased to announce the release of pandoc 3.8, available in the usual places: Binary packages & changelog: https://github.com/jgm/pandoc/releases/tag/3.8 Source & API documentation: http://hackage.haskell.org/package/pandoc-3.8 This release comes with many small improvements and a few larger ones. Among the more visible changes: + A new input/output format xml, which exactly represents a pandoc AST in a more easily human-readable form than JSON. The format is documented in doc/xml.md, and schemas can be found in tools/pandoc-xml.*. + A new command line option --syntax-highlighting, which takes the values 'none', 'default', 'idiomatic', a style name, or a path to a theme file. --no-highlighting and --highlight-style are deprecated. + New extensions smart_quotes and special_strings for org mode. These allow pandoc's parsing to more closely reproduce Emacs org-mode's behavior. + The old compact_definition_lists extension has been removed. API changes: + New modules Text.Pandoc.Readers.XML (exporting readXML) and Text.Pandoc.Writers.XML (exporting writeXML). + Text.Pandoc.Extensions: added constructors Ext_smart_quotes, Ext_special_strings; removed Ext_compact_definition_lists. + Text.Pandoc.App now exports versionInfo, a function that takes three parameters that can be filled in by pandoc-cli. + Text.Pandoc.Parsing: tableWith and tableWith' now return a list of lists of Blocks, allowing for multiple header rows. + Text.Pandoc.ImageSize: Add Point and Pica as constructors of ImageSize. Add Avif constructor of ImageType. + Text.Pandoc.Class: CommonState is now opaque and does not support its fields. To compensate for this, we now export several new functions: getRequestHeaders, setRequestHeaders, getSourceURL, getTrace. Thanks to all who contributed, especially new contributors Christopher Kenny, Erik Post, Repetitive, Reuben Thomas, Ryan Gibb, Sean Soon, and massifrg. ```
Click to expand changelog - Add a new input and output format `xml`, exactly representing a Pandoc AST and isomorphic to the existing `native` and `json` formats (massifrg). XML schemas for validation can be found in `tools/pandoc-xml.*`. The format is documented in `doc/xml.md`. Pandoc now defaults to this reader and writer when the `.xml` extension is used. Two new exported modules are added \[API change\]: Text.Pandoc.Readers.XML, exporting `readXML`, and Text.Pandoc.Writers.XML, exporting `writeXML`. A new unexported module Text.Pandoc.XMLFormat is also added. - Add a new command line option `--syntax-highlighting`; this takes the values `none`, `default`, `idiomatic`, a style name, or a path to a theme file. It replaces the `--no-highlighting`, `--highlighting-style`, and `--listings` options, which will still work but with a deprecation warning. (Albert Krewinkel) - Create directory of output file if it doesn’t exist (#11040). - Update `--version` copyright dates (#10961), and use a hardcoded string “pandoc” for the program name in `--version`, per GNU guidelines. - Add `smart_quotes` and `special_strings` extensions (Albert Krewinkel). Currently these only affect `org`. Org mode makes a distinction between smart parsing of quotes, and smart parsing of special strings like `...`. The finer grained control over these features is necessary to truthfully reproduce Emacs Org mode behavior. Special strings are enabled by default, while smart quotes are disabled. - Remove the old `compact_definition_lists` extension. This was neded to preserve backwards compatibility after pandoc 1.12 was released, but at this point we can get rid of it. - Make `-t chunkedhtml -o -` output to stdout (as documented), rather than creating a directory called `-` (#11068). - RST reader: Support multiple header rows (#10338, TuongNM). - LaTeX reader: - Support soft hyphens (Albert Krewinkel). - Parse `\mini _[Truncated at 4000 characters — full notes: https://github.com/jgm/pandoc/releases/tag/3.8]_