John MacFarlane ha publicado una retrospectiva por los veinte años de pandoc. La primera versión, publicada bajo la GPL el 3 de agosto de 2006, tenía unas 3.000 líneas de Haskell sin más dependencias que la biblioteca estándar de GHC, y convertía entre Markdown, reStructuredText, HTML y LaTeX, además de RTF y S5 como salida.

El origen es gratamente accidental: MacFarlane, filósofo de profesión, quería aprender Haskell tras leer sobre él en el blog de Greg Restall, y eligió un analizador de Markdown como proyecto de práctica. A diferencia de las implementaciones de Markdown de la época (en Perl, Python, Ruby y PHP), basadas en expresiones regulares, pandoc generaba un verdadero árbol de sintaxis abstracta mediante combinadores de parsers, lo que permitía N readers por M writers. Hitos tempranos: el paquete Debian de Recai Oktaş, el traslado a Hackage en 2007 y pandoc 1.0 en septiembre de 2008 con writers para MediaWiki, Texinfo, OpenDocument y ODT, bloques de código delimitados con resaltado de sintaxis y generación de citas mediante CSL.

Después llegaron grandes cambios arquitectónicos: el sistema de plantillas en 1.4 (2010), la migración de Google Code a GitHub en 2010, la salida docx en 1.9 (2012), los writers personalizados en Lua, los bloques de metadatos YAML y los filtros JSON en 2013, y el soporte de commonmark en 1.14 (2015) — nacido del fallido grupo de trabajo «Standard Markdown», al que John Gruber se opuso, lo que provocó el cambio de nombre. Pandoc 2.0 (2017) introdujo la abstracción PandocMonad, que permite a readers y writers realizar E/S, además de los filtros Lua integrados construidos por Albert Krewinkel sobre hslua. Una donación de 100.000 dólares de Handshake en 2018 financió estipendios para mantenedores durante cinco años.

Pandoc 3.0 (2023) dividió el monolito en pandoc, pandoc-lua-engine, pandoc-server y pandoc-cli. Después se añadieron un reader de Typst (que requirió un intérprete de lenguaje completo), el formato de marcado djot y, con pandoc 3.9 (febrero de 2026), la compilación a WASM, lo que permite ejecutar pandoc en el navegador.

Estadísticas: pandoc admite ahora 51 formatos de entrada y 76 de salida — 3.876 conversiones distintas. Los cuatro paquetes centrales suman 85.684 líneas de Haskell, aproximadamente el doble contando las dependencias propias de pandoc. Más de 600 personas han contribuido; se han resuelto 7.346 issues en GitHub. MacFarlane atribuye la viabilidad de un proyecto así en tiempo libre a los tipos de datos algebraicos de Haskell, su fuerte tipado estático y su pureza.

De cara al futuro, admite que los LLM ya convierten formatos de documentos de forma aceptable y que algún día podrían superar a los conversores deterministas — pero pandoc mantiene ventajas por ahora: mucho menor consumo de energía, salida determinista y mayor fiabilidad. Concluye orgulloso de un proyecto que ha ahorrado incontables horas de trabajo tedioso a usuarios de todo el mundo.