Motor de maquetación de código abierto · v1.70.5
El tipógrafo programable para la web
Postext parte de markdown semántico y aplica reglas editoriales con siglos de historia (justificación Knuth-Plass, columnas equilibradas, flotantes que saben cuál es su sitio) para producir páginas de calidad editorial en HTML, canvas o PDF listo para imprenta.
Postext
En pocas palabras
Postext es un programa libre y gratuito que compone las páginas de libros, revistas e informes. Escribes el texto con unas pocas marcas sencillas y Postext lo convierte en páginas terminadas, como las de un libro impreso. Sigue reglas que los impresores usan desde hace siglos, para que el texto se lea bien. Las páginas pueden ir a una web, a una aplicación o a un PDF listo para imprenta. Está pensado para quien escribe, edita, diseña o programa.
Transcripción
Todo lo que dice el narrador, con una descripción de lo que aparece en pantalla.
- 0:00
En pantallaSobre fondo oscuro, «MAGUNCIA · 1455» encima de un filete dorado. Detrás del titular «Durante cinco siglos, la imprenta aprendió a componer la página.», el año avanza de 1455 a 2026 en grandes cifras perfiladas y alrededor caen términos del oficio: Justificación, Kerning, Viudas, huérfanas, Columnas equilibradas, Interlineado, Retícula base, guio·na·do, Medida, Flotantes, Cabeceras, Ríos. La cámara se mete en el punto final, que llena la pantalla de dorado.
NarraciónDurante cinco siglos, la imprenta aprendió a componer la página.
- 0:06
En pantallaTitular: «La web aprendió a maquetar interfaces. Nunca aprendió a componer una página.» Una ventana de navegador en example.com/longform/article muestra un artículo justificado a tres columnas, «Por qué falla la web»; etiquetas rojas señalan ríos de blanco, una huérfana, una viuda, una imagen que cae sobre el texto y una última columna desequilibrada. Al lado, una pastilla de código dice «column-count: 3;», seguida de «…y poco más.» y de una lista tachada con los mismos cinco defectos. La ventana se distorsiona y se desploma.
NarraciónLa web aprendió a maquetar interfaces. Nunca páginas. Por eso el texto largo sigue rompiéndose: ríos, viudas, huérfanas, colisiones.
- 0:19
En pantallaTras un destello blanco y un barrido de franjas azul, dorada y roja, el logotipo de Postext sube a su sitio con el lema «El tipógrafo programable para la web». Debajo: CÓDIGO ABIERTO · LICENCIA MIT · v1.7.0 · FUNCIONA EN TU NAVEGADOR.
NarraciónEsto es Postext: el tipógrafo programable para la web.
- 0:25
En pantallaSección 01 de 07, «Entra el contenido»: «Markdown dice qué es cada cosa.» Un archivo Markdown, 03-por-que-postext.md, se escribe solo: una directiva de parte, el título «Por qué Postext» con entradilla, un párrafo que cita la figura fig-flow con :ref, una línea ::resource y un bloque :::callout. Al lado, config.ts llama a buildDocument con maquetación a dos columnas, texto justificado y guionado para «es», bajo la frase «La configuración decide cómo se ve. El texto no contiene ni una decisión de maquetación.»
NarraciónEscribes Markdown semántico, que dice qué es cada cosa. La configuración decide cómo se ve.
- 0:33
En pantallaSección 02, «Pretext mide»: «Medido sin tocar el DOM.» Un título, un párrafo y un recuadro se escanean uno tras otro y unas cotas dan su altura en puntos; un panel de código muestra prepare(text, '25px Lora') y layout(prepared, width, 38), que devuelve una altura y un número de líneas. Dos barras compiten con 10.000 párrafos: «Reflow del navegador · DOM» apenas avanza y «Pretext · canvas + aritmética» se llena al instante, y un contador sube hasta 600× sobre «más rápido que el DOM midiendo texto, para que un libro entero se recomponga al escribir» e «Impulsado por @chenglou/pretext».
NarraciónCada párrafo se mide sin tocar el DOM, hasta seiscientas veces más rápido, gracias a Pretext, la librería que lo ha hecho posible.
- 0:43
En pantallaSección 03, «Postext decide»: «Cada línea colocada antes de pintar un píxel.» Un anillo de siete segmentos se ilumina por turnos, Estructura, Medición, Colocación, Flotantes, Refinado, Equilibrio y Ritmo, cada uno con una línea de explicación, mientras al lado se monta una página a dos columnas de la guía de Postext: los bloques etiquetados vuelan a sus columnas, una figura se desplaza a su sitio con la nota «:ref{id="fig-flow"} → pie de columna», cae la banda de apertura, aparecen las líneas, las columnas se nivelan y baja la retícula base. El anillo recorre las iteraciones 1 a 3 y muestra «Estable en 3 iteraciones» con una marca; un recuadro da la caja y la línea base de una línea.
NarraciónDespués, Postext decide. Siete pasadas colocan cada línea, llevan cada figura a su sitio y equilibran las columnas, hasta que nada se mueve.
- 0:55
En pantallaSección 04, «El documento virtual»: «Cambia una palabra. Solo se recompone lo que cambia.», con la nota «Como el virtual DOM de React, pero para páginas: el VDT, un árbol de documento virtual.» Siete páginas, de la p. 7 a la p. 13, en fila; un cursor marca una edición en la p. 11, el resto de esa columna se vuelve dorado como SUCIO y una franja pasa a la p. 12, que recibe una marca y ESTABLE, mientras las anteriores dicen SE SALTA y las siguientes INTACTA. Tres viñetas explican la regla y un panel titulado renderToHtmlIndexed() marca como PARCHEADO los nodos del árbol que han cambiado.
NarraciónTodo vive en un documento virtual, como el virtual DOM de React. Cambias una palabra, y solo se recompone lo que cambia.
- 1:05
En pantalla«¿Un documento largo? Solo se pinta lo que está en pantalla.» Una columna de páginas pasa por un marco dorado rotulado VIEWPORT, con un margen de 200 píxeles arriba y abajo: las páginas de dentro se dibujan enteras y las de fuera son contornos discontinuos. Un contador grande indica cuántas de las 48 páginas están pintadas en cada momento (IntersectionObserver · +200 px), junto a «Geometría: todas las páginas. Píxeles: solo lo que ves.»
NarraciónY en un libro largo, solo se pintan las páginas que están en pantalla.
- 1:12
En pantallaSección 05, «Justificación Knuth–Plass»: «Todas las formas de cortar el párrafo. A la vez.» A la izquierda, un párrafo sobre el corte de líneas compuesto de forma voraz, como lo hace el navegador, con sus líneas más abiertas en rojo. Debajo, cada palabra es un punto sobre una recta: arcos rojos para los cortes voraces, arcos azules tenues que prueban todos los cortes posibles y un camino dorado con la mejor combinación. A la derecha, la versión Knuth–Plass, de espaciado uniforme, con la fealdad de cada línea, la fórmula «(1 + fealdad + penalización)²» y una suma de deméritos menor.
NarraciónUn navegador corta las líneas de forma voraz, una a una. Postext usa Knuth-Plass, el algoritmo de TeX: sopesa todas las formas de cortar el párrafo entero y se queda con la más uniforme.
- 1:27
En pantallaSección 06, «Una maquetación, cinco salidas»: «Lo que ves es lo que va a imprenta.» Bajo la línea de código const vdt = buildDocument(content, config); una página se divide en cinco. Canvas (renderToCanvas(), mapas de bits exactos al píxel) lleva una lupa sobre su rejilla de píxeles; HTML (renderToHtml(), seleccionable y adaptable) recuadra cada bloque con su etiqueta <h1>, <p>, <figure>, etc.; en PDF (renderToPdf(), para imprenta, PDF/UA, CMYK) cuatro planchas de color entran en registro y aparecen marcas de corte y una tira de color. En EPUB 3 (renderToEpub(), libro electrónico, fijo o fluido) la página aparece en un lector de libros electrónicos con la etiqueta «Maquetación fija»; la pantalla se estrecha hasta el tamaño de un móvil, el texto se redistribuye y la etiqueta pasa a «Maquetación fluida». En Folio (postext-folio, un libro en 3D que pasa páginas) la página se abre en una doble página y una hoja gira sobre el lomo.
NarraciónUna maquetación, cinco salidas: canvas, HTML, PDF para imprenta, EPUB 3, fijo o fluido, y un libro en 3D. Lo que ves es lo que se imprime.
- 1:43
En pantallaSección 07, «Por qué un estándar abierto»: «LaTeX marcó el listón del papel. Hoy la edición vive también en cada pantalla.» Dos tarjetas: LaTeX, 1984, con aspas junto a «Pensado para la página impresa», «Atado a las fuentes y paquetes de una máquina», «Compilar, esperar, repetir» y «Sin maquetación editorial en la web adaptable»; Postext, 2026, con marcas junto a «Web, PDF de imprenta y EPUB 3, una maquetación», «Un solo archivo .postext lo lleva todo», «Se recompone en vivo mientras escribes» y «En cualquier navegador · sin servidores · MIT». La tarjeta de Postext se ilumina.
NarraciónLaTeX marcó el estándar del papel. Pero hoy la edición vive en todas las pantallas.
- 1:51
En pantallaRótulo «Un archivo, el libro entero» y titular «Un estándar abierto para la edición, más allá de donde llega LaTeX». Un icono de archivo .postext se abre en cinco piezas: preset.json (configuración y diseño), chapters/*.md (un Markdown por capítulo), fonts/*.woff2 (las propias tipografías), images/ · SVG (cada imagen, incluida) y resources (tablas, figuras y pies). Pie: «Un ZIP corriente: abierto, documentado y con licencia MIT. Cualquier herramienta puede leerlo y escribirlo.»
NarraciónPostext es un estándar abierto: un único archivo portátil, documentado y con licencia MIT, que cualquier herramienta puede leer y escribir.
- 2:04
En pantalla«La muestra · compuesta por el motor real»: un muro de páginas de la edición española de la guía se aleja en perspectiva mientras un contador llega a 48 páginas. Texto: «12 capítulos, 3 partes y una portada, maquetados en torno a medio segundo. Cada página de la guía de Postext, calculada en un navegador por postext v1.7.0 para esta pieza. Nada colocado a mano.» Después, etiquetas: Libros de texto, Revistas, Ediciones literarias, Catálogos.
NarraciónPor eso es capaz de maquetar libros de cientos de páginas en décimas de segundo.
- 2:11
En pantallaCierre: el logotipo de Postext con el lema «El tipógrafo programable para la web», la dirección postext.dev, una línea de terminal que escribe «$ pnpm add postext» y el pie «Código abierto · MIT · github.com/drnachio/postext».
NarraciónPostext. Código abierto, en postext.dev.
Capítulo 1 · Por qué Postext
Maquetación editorial, calculada para la web
La tipografía impresa pasó cinco siglos aprendiendo a componer una página; los navegadores aprendieron a maquetar una interfaz. Postext lleva lo primero a lo segundo.
CSS ofrece maquetación adaptable: flexbox, grid, columnas. Pero no sabe equilibrar columnas, mantener un título junto a su párrafo, evitar viudas y huérfanas ni llevar una figura a la cabeza de la columna siguiente. Son decisiones editoriales, depuradas durante siglos de imprenta.
Postext cubre ese vacío. Pásale markdown semántico y un objeto de configuración. Mide texto entre 300 y 600 veces más rápido que el DOM gracias a @chenglou/pretext (se abre en una nueva pestaña), y después calcula la geometría completa de cada página (cada línea, cada flotante y cada pie) y la dibuja con los backends de HTML, canvas o PDF listo para imprenta.
Entra markdown
:::part{number="I" title="Fundamentos"
palette="band=#2b4acb"}
:::
# Por qué Postext {lead="La tipografía
impresa pasó cinco siglos…"}
Postext es un **motor de maquetación
de código abierto** que lleva a la web
el oficio de la tipografía impresa,
como muestra :ref{id="fig-flujo"}.
:::callout{type="try"}
Cambia una palabra: la página
vuelve a componerse.
:::Salen páginas
En cifras
- más rápido que el DOM al medir texto: un libro entero se recompone mientras escribes
- 300–600×más rápido que el DOM al medir texto: un libro entero se recompone mientras escribes
- salidas de una sola maquetación: HTML, canvas, PDF listo para imprenta y EPUB 3
- 4salidas de una sola maquetación: HTML, canvas, PDF listo para imprenta y EPUB 3
- PDF etiquetado y accesible, con marcadores y color CMYK
- PDF/UAPDF etiquetado y accesible, con marcadores y color CMYK
- servidores: el motor funciona íntegramente en el navegador, con licencia MIT
- 0servidores: el motor funciona íntegramente en el navegador, con licencia MIT
Capítulo 2 · Capacidades
Lo que los tipógrafos siempre supieron
Seis cosas que una página necesita y que CSS nunca se pensó para decidir: el motor las calcula, siempre de la misma manera.
- 2.1
Justificación Knuth-Plass
El mismo algoritmo óptimo de corte de líneas que usa TeX, con separación silábica por patrones de TeX y control de huérfanas: bloques de texto homogéneos, sin ríos de blanco, más allá de lo que CSS puede expresar.
Leer en la documentación - 2.2
Recursos y referencias cruzadas
Figuras, diagramas SVG y tablas que flotan a la cabeza o al pie de columnas y páginas, como los flotantes de imprenta, con numeración por tipo y referencias cruzadas :ref que siempre se mantienen sincronizadas.
Leer en la documentación - 2.3
Tablas y pies
Tablas con tipografía propia para el cuerpo y la cabecera, divididas entre páginas con la cabecera repetida, y pies que siguen tu configuración: numerados y colocados junto al recurso que describen.
Leer en la documentación - 2.4
Diagramas a una tinta
Pasa los diagramas SVG a matices de una sola tinta según su luminancia, para que cada ilustración encaje con tu diseño y quede lista para imprimir con tinta directa.
Leer en la documentación - 2.5
Matemáticas en LaTeX
Ecuaciones en línea y en bloque escritas en LaTeX, que el motor mide y compone para que se asienten en la rejilla base junto al texto.
Leer en la documentación - 2.6
Web, PDF para imprenta y EPUB
Un motor de maquetación, cuatro salidas. Las mismas páginas calculadas se generan en HTML, canvas o PDF listo para imprenta (con marcadores, color CMYK y PDF etiquetado y accesible, PDF/UA) y salen como libro electrónico EPUB 3, página a página o con maquetación fluida.
Leer en la documentación
Cada página de la guía de Postext —cubierta, índice, portadillas y todo lo demás— la compone Postext, en tu navegador, mientras la lees.
Escaparate
Libros de verdad, compuestos en tu navegador
Un libro de texto, una revista, un poema épico anotado, un catálogo de exposición, un clásico chino en 120 capítulos, Las mil y una noches en árabe, una novela japonesa compuesta en vertical, un cómic en diez idiomas. Ábrelos en el Sandbox, cambia una regla y mira cómo se recompone cada página.
- Motor de maquetación de código abiertoPostextCada página se calcula en tu navegador
Guía de Postext
La guía incluida: 21 capítulos, cuatro partes y cubierta

Bioquímica Feduchi · Capítulo 1
Manual de bioquímica a columna y media: columna principal junto al lomo y columna exterior con figuras, conceptos clave y actividades

Cielo profundo
Revista de astronomía a dos columnas con aperturas a sangre, recuadros y destacados

Don Quijote · Gustave Doré
Edición literaria a columna y media con glosas al margen y láminas de Doré

Física universitaria (OpenStax)
Libro de texto a columna y media con ejemplos resueltos, comprobaciones, tablas y fórmulas

El paraíso perdido · Gustave Doré
Edición anotada del poema de Milton en doce libros: las notas de Verity al pie de página y las cincuenta láminas de Doré. Solo en inglés

Pintura española
Catálogo de exposición a una columna: ficha y comentario frente a la lámina a página completa

Señales 2020
Revista de la Agencia Europea de Medio Ambiente a dos columnas con aperturas fotográficas, recuadros, destacados y paneles de datos

Las mil y una noches · ألف ليلة وليلة
Las mil y una noches completas en árabe, en el texto de Bulaq: un libro clásico egipcio encuadernado a la derecha, cada página en un marco de doble filete, las noches escritas en palabras y las acuarelas de Sani ol-Molk. Solo en árabe

Sueño en el pabellón rojo · 紅樓夢
Novela clásica china en 120 capítulos, con las láminas de 1884: el texto de 1792 en chino tradicional, compuesto en vertical y con el lomo a la derecha, el mismo texto en chino simplificado y la traducción inglesa de Joly de los 56 primeros capítulos

Kokoro · こころ
La novela de Natsume Sōseki (1914) en japonés, compuesta en vertical y encuadernada a la derecha como la primera edición de Iwanami, con la cubierta, las guardas y la portada que diseñó Sōseki, tres de sus pinturas y furigana sobre las palabras difíciles. Solo en japonés

Pepper&Carrot · El cumpleaños de Pimienta
El episodio 8 del cómic de David Revoy en diez idiomas: las viñetas originales sin texto, con los bocadillos y la rotulación que el motor compone a partir de cada traducción oficial. La edición japonesa se rotula en columnas y, como la árabe, se lee de derecha a izquierda y se abre por la derecha
Capítulo 3 · Flujo de trabajo
Maquetación editorial en tres pasos
El contenido en markdown, el diseño en un objeto de configuración y las páginas en una sola llamada.
- 3.1
Escribe markdown semántico
Escribe tu contenido en markdown enriquecido: encabezados, listas, tablas, fórmulas, recuadros y referencias cruzadas :ref a tus figuras. Sin preocuparte por la maquetación: solo contenido.
- 3.2
Configura las reglas de maquetación
Define el tamaño de página, las columnas, la tipografía, el diseño de los títulos, los titulillos y la colocación de los flotantes en un objeto PostextConfig, o diséñalo visualmente en el Sandbox.
- 3.3
Genera HTML, canvas o PDF
Llama a buildDocument y obtén la geometría completa de la maquetación; después, dibújala con el backend de HTML, canvas o PDF listo para imprenta.
API
Una función, control total
Llama a buildDocument con tu contenido y un objeto de configuración. Recibes la geometría completa de las páginas: dibuja cualquier página como imagen con renderPage o compón el libro entero como PDF listo para imprenta con renderToPdf.
import { buildDocument, renderPage } from "postext";
import { renderToPdf } from "postext-pdf";
const doc = buildDocument(
{ markdown },
{
page: { sizePreset: "21x28" },
layout: { layoutType: "double" },
bodyText: {
fontSize: { value: 12, unit: "pt" },
textAlign: "justify",
hyphenation: { enabled: true, locale: "en-us" },
},
}
);
// Cada página, como imagen…
const cover = renderPage(doc.pages[0], doc);
cover.toBlob((png) => save(png, "cover.png"));
// …o el libro entero, como PDF listo para imprenta
// fontProvider: bytes TTF por familia y peso (consulta la documentación)
const pdf = await renderToPdf(doc, { fontProvider });Capítulo 4 · Formato abierto
Un archivo, el libro entero
Un archivo .postext incluye todo lo que un documento necesita para volver a componerse en cualquier máquina: un formato abierto y editable que cualquiera puede adoptar.
La mayoría de los formatos editoriales dispersan un proyecto. Una compilación de LaTeX depende de las fuentes y los paquetes instalados en una máquina concreta, y los archivos nativos de los grandes programas de maquetación enlazan imágenes y tipografías que quedan fuera de ellos. Al mover el proyecto, algo se pierde. Nosotros mismos chocamos con esos límites en LaTeX.
Un .postext es un archivo ZIP corriente que cualquiera puede abrir, leer y editar: un manifiesto JSON, un archivo Markdown por capítulo y los propios archivos de fuentes e imágenes. El Sandbox lo exporta, el skill de agente postext-port lo escribe y postext/bundle lo abre en cualquier programa para componer de nuevo las mismas páginas. El formato está documentado y tiene licencia MIT, listo para que cualquier herramienta lo lea y lo escriba.
- 4.1
preset.jsonConfiguración. Página, retícula, tipografías, estilos de encabezado y de párrafo, colores y titulillos, en JSON legible.
- 4.2
chapters/<lang>/*.mdCapítulos. Un archivo Markdown por capítulo: aquí, 22 capítulos en 2 idiomas.
- 4.3
fonts/*.woff2Tipografías. Los propios archivos de fuentes, no solo sus nombres: 23 archivos de Lora, Fraunces, Geist, Bricolage Grotesque y Geist Mono.
- 4.4
preset.json › resourcesRecursos. Pies, numeración, colocación y contenido de las 30 figuras y tablas a las que remite el texto.
- 4.5
resources/*.svgImágenes. Las propias ilustraciones, en SVG o mapa de bits, con la versión de cada idioma: 41 archivos.
Pruébalo
Abre la guía, obtén sus páginas
El primer ejemplo del Sandbox, la guía de Postext, es un único archivo .postext. Ábrelo en el navegador y convierte cada página en una imagen: sus tipografías, figuras y tablas salen del propio archivo.
Descargar la guíapostext-guide.postext · 1364 KBimport { openBundle, loadBundleFonts, registerBundleImages,
buildBundle, renderPageToCanvas } from "postext";
// La guía del Sandbox: configuración, capítulos, fuentes e imágenes
const file = await fetch("postext-guide.postext").then((r) => r.blob());
const book = await openBundle(file, { locale: "es" });
await loadBundleFonts(book); // sus propias tipografías
await registerBundleImages(book); // sus propias figuras
// Cada página de cada capítulo, como imagen
for (const doc of buildBundle(book))
for (const page of doc.pages) {
const canvas = document.createElement("canvas");
renderPageToCanvas(page, doc, canvas, { scale: 0.5 });
document.body.append(canvas);
}Instalación
Empieza en menos de un minuto
Un paquete, sin servidor y sin dependencias nativas. Añade postext-pdf cuando necesites imprimir.
// Inicio rápido
import { buildDocument, renderPage } from "postext";
import { renderToPdf } from "postext-pdf";
const doc = buildDocument({
markdown: "# Hello World\n\nYour content here.",
});
// La primera página, dibujada en un canvas
document.body.append(renderPage(doc.pages[0], doc));
// El documento entero, como PDF
const pdf = await renderToPdf(doc, { fontProvider });