Back
SiTech Professional Insights
Twenty Years of Pandoc
SiTech Team3 წთ. საკითხავი

Twenty Years of Pandoc

John MacFarlane marks twenty years since pandoc 0.1: 51 input formats, 76 output formats, 3,876 conversions and over 600 contributors later — and asks what LLMs mean for its future.

John MacFarlane, the creator of pandoc, has published a retrospective marking twenty years since the first release of the document converter. He uploaded pandoc 0.1 to his website on August 3, 2006, releasing it under the GPL. The first version was about 3,000 lines of Haskell code with no dependencies beyond GHC’s standard library, and could convert Markdown, reStructuredText, HTML and LaTeX documents into any of those formats, plus RTF and S5. Two hundred releases later, it has become the most popular program written in Haskell, supports more than fifty document formats and is installed on millions of computers.

Why Haskell — and why an AST

MacFarlane says the choice went the other way around from what people assume: he decided to use Haskell first, then decided to write a document converter in it. Intrigued by a friend’s blog post about Haskell, he read A Gentle Introduction to Haskell and looked for something to build in order to learn the language. Markdown implementations at the time were regex-based transformers in Perl, Python, Ruby and PHP; pandoc instead parsed Markdown into a real abstract syntax tree (AST) and rendered that to other formats — a more reliable and extensible architecture, since N readers and M writers give N × M conversions.

Two decades of releases

Pandoc 1.0 arrived in September 2008 with writers for MediaWiki, Texinfo, OpenDocument and ODT, and fenced code blocks with syntax highlighting; MacFarlane wrote the zip-archive and highlighting-kate libraries Haskell was missing. Pandoc 1.9 (2012) added Word docx output. Pandoc 2.0 (2017) reworked readers and writers so they could perform I/O where formats required it, and introduced Lua filters running directly on the pandoc AST. Pandoc 3.0 (2023) split the project into four packages — library, Lua engine, server and CLI — and added a native Figure element; later releases added Typst support (3.1.3) and djot (3.1.12), and pandoc 3.9 (February 2026) made it possible to compile pandoc to WebAssembly to run in the browser.

By the numbers

The retrospective lists current statistics: 51 input formats and 76 output formats, for 3,876 distinct conversions; 85,684 lines of Haskell in the four core packages, roughly doubling when pandoc-specific dependencies are included; 7,346 issues resolved on GitHub; and more than 600 contributors over the years, with Albert Krewinkel, Jesse Rosenthal and Christian Despres among the largest. In 2018 the project received a $100,000 donation from Handshake, used over five years to pay small stipends to the most active maintainers.

Whither pandoc

MacFarlane asks how long such a tool will remain necessary. LLMs already translate between document formats reasonably well, and may one day be more reliable than pandoc; for now, he argues, pandoc has three advantages — it uses far less energy, its output is deterministic and predictable, and its conversions are more reliable. He plans to keep improving pandoc regardless, and closes the essay with “Happy 20th birthday, pandoc!”

SSiTech

SiTech — AI-powered web development

We build fast, modern websites and bring AI into real business workflows. Have a project or a question? We'd love to help.