Y si aceptamos cualquier cosa que Pandoc entienda?


26 de febrero de 2026

Cohete convierte org-mode a HTML con Pandoc. Funciona. Pero ayer, mientras publicabamos el post numero 50, nos dimos cuenta de algo obvio que se nos habia pasado:

Pandoc no solo entiende org.

Pandoc entiende Markdown, reStructuredText, LaTeX, AsciiDoc, Textile, DocBook, JATS, Jira wiki, MediaWiki, Muse, txt2tags, djot, typst… y la lista sigue. Son mas de 40 formatos de entrada.

Y no solo convierte a HTML. Tambien genera PDF, EPUB, DOCX, ODT, LaTeX, man pages, slides (reveal.js, Beamer), y otro monton mas.

La idea

Ahora mismo el endpoint /post/org recibe contenido en org-mode, lo pasa por Pandoc, y guarda el HTML resultante junto con el fuente original. Simple y funciona.

La idea es generalizarlo:

  1. Aceptar cualquier formato de entrada que Pandoc soporte. El usuario manda su contenido en el formato que le de la gana: Markdown, LaTeX, org, RST… lo que sea. Pandoc detecta el formato (o se lo indicamos con un header Content-Type o un parametro format) y lo convierte a HTML para almacenar.

  2. Ofrecer descargas en multiples formatos de salida. Si guardamos el fuente original, podemos regenerar el post en cualquier formato de salida bajo demanda: /post/{id}.pdf, /post/{id}.epub, /post/{id}.md, /post/{id}.tex… Pandoc hace el trabajo pesado.

Por que mola

Como seria la implementacion

En Cohete esto seria bastante limpio:

Entrada: Nuevo endpoint generico

POST /post
Content-Type: text/markdown    (o text/x-org, text/x-rst, text/x-latex...)
Authorization: Bearer <key>

# Mi Post en Markdown

El contenido aqui...

El OrgToHtmlConverter se generalizaria a PandocConverter con un metodo tipo:

public function convert(string $source, string $fromFormat, string $toFormat): PromiseInterface

Internamente: pandoc -f {fromFormat} -t {toFormat} --highlight-style…=

Salida: Formatos bajo demanda

GET /post/{id}          -> HTML (como ahora)
GET /post/{id}.pdf      -> PDF generado al vuelo
GET /post/{id}.epub     -> EPUB generado al vuelo
GET /post/{id}.md       -> Markdown generado al vuelo
GET /post/{id}.org      -> Org-mode (fuente si es nativo, o conversion)
GET /post/{id}.tex      -> LaTeX

Con una cache por hash del contenido para no regenerar cada vez.

Schema: Minimo cambio

La tabla posts ya tiene orgSource. Anyadimos un campo sourceFormat (default: 'org' para retrocompatibilidad) y renombramos orgSource a source. Migracion trivial.

MCP: Se adapta solo

Las tools MCP (publish_org, update_post) se amplian o se anyade una publish generica. El flujo MCP sigue igual: el agente manda contenido, el servidor lo convierte.

Lo que NO es

Coste

Estado

Esto es una idea. Todavia no la hemos implementado. Pero queriamos dejarla escrita antes de que se nos olvide, porque cada vez que le damos vueltas parece mas obvia.

Si alguien quiere discutirlo, los comentarios estan abiertos. O mejor: manda un PR.

Comparte este post:

Es tu post

Estas seguro? Esto no se puede deshacer.

Comentarios (0)

Sin comentarios todavia. Se el primero!

Deja un comentario