3 августа 2006 года Джон Макфарлейн выложил на свой сайт первый релиз pandoc — конвертера документов на Haskell, написанного за 3000 строк кода. Он не думал, что проект проживёт двадцать лет, обернётся двумя сотнями релизов, поддержкой 51 входного и 76 выходных форматов и установкой на миллионы компьютеров.
Всё началось с увлечения Haskell: Макфарлейн прочитал A Gentle Introduction to Haskell и решил написать парсер Markdown. В отличие от реализаций на Perl, Python, Ruby и PHP, работавших через regex, pandoc строил абстрактное синтаксическое дерево и уже из него рендерил HTML и другие форматы. Это позволяло поддерживать N×M конвертаций — достаточно написать N парсеров и M рендереров.
Первый публичный релиз вышел в 2006-м. В октябре турецкий разработчик Рекай Окташ упаковал pandoc для Debian, что заметно подняло видимость проекта. Дальше pandoc рос под нужды автора: DocBook, таблицы, сноски, ConTeXt. В 2007-м pandoc появился на Hackage, а cabal-install открыл дорогу внешним зависимостям.
Pandoc 1.0 (2008) принёс MediaWiki, OpenDocument, ODT и fenced code blocks с подсветкой синтаксиса. Для ODT Макфарлейн написал библиотеку zip-archive, для подсветки — highlighting-kate. В 2012-м pandoc научился создавать docx, в 2013-м — работать с YAML-метаданными, Lua-writer’ами и JSON-фильтрами. В 2014-м Макфарлейн написал спецификацию CommonMark, а в 2015-м pandoc получил поддержку CommonMark.
Pandoc 2.0 (2017) — большая архитектурная перестройка: появилась монада PandocMonad, позволившая читателям и писателям выполнять I/O, и Lua-фильтры вместо JSON-фильтров. Дальше были GitHub-flavored Markdown, PowerPoint, ipynb, defaults-файлы, новые таблицы, переписанный citeproc на Haskell. В 2018-м Handshake пожертвовал проекту 100 000 долларов на стипендии мейнтейнерам. Позже добавили --sandbox и возможность запускать pandoc как веб-сервер.
В 2023-м проект разделили на pandoc, pandoc-lua-engine, pandoc-server и pandoc-cli. Тогда же появилась поддержка Typst — для неё пришлось написать интерпретатор языка. Позже добавили djot, ANSI-writer, Excel-ридер, BBCode-writer. В феврале 2026-го вышел pandoc 3.9 с компиляцией в WASM: полная версия работает в браузере, а GUI-интерфейс «pandoc for the people» проектировали с помощью Claude Opus.
Основные пакеты содержат 85 684 строки Haskell, с зависимостями — вдвое больше. На GitHub закрыто 7346 issues, вклад внесли более 600 человек. Сам Макфарлейн — 372 317 строк.
Выбор Haskell автор объясняет случайностью. Но именно язык позволил поддерживать проект в одиночку: сильная типизация, алгебраические типы данных и чистота защищают от ошибок. Rust, возможно, быстрее и компактнее, но Haskell эргономичнее.
Макфарлейн признаёт: LLM уже неплохо конвертируют форматы, и со временем могут вытеснить такие инструменты. Пока у pandoc три преимущества: детерминированность, надёжность и энергоэффективность. Но будущее может быть за нейросетями. Тем не менее двадцатилетняя история pandoc спасла людям кучу времени.