Hugo vs Htmlpress
Hugo es un generador de sitios estáticos de propósito general escrito en Go. Se distribuye como un único binario, compila extremadamente rápido y sirve para todo, desde blogs y portafolios hasta sitios de documentación mediante temas de la comunidad como Docsy y Hugo Book.
De un vistazo
| Aspecto | Htmlpress | Hugo |
|---|---|---|
| Lenguaje / runtime | Rust (binario único, sin runtime) | Go (binario único, sin runtime) |
| Framework de UI | Ninguno (HTML + CSS plano, web components htmlpress-*) |
Plantillas de Go (HTML + CSS) |
| Herramienta de compilación | Binario de htmlpress | Binario de Hugo |
| Formato de contenido | Páginas HTML y Markdown | Markdown con shortcodes de Hugo |
| Licencia | MIT, autoalojado | Apache-2.0, autoalojado |
| Modelo de salida | Estático prerenderizado | Estático prerenderizado |
Arquitectura
htmlpress es un único binario de Rust que se instala desde npm
(gethtmlpress), PyPI o crates.io. Envuelve cada página HTML en un
layout con una navegación y un tema; no hay bundler, ni framework de UI, ni API de
plugins. Cada archivo integrado (el layout, los estilos, los scripts y cada
componente) se puede escapar: un archivo en la misma ruta bajo
.htmlpress/ lo reemplaza.
Hugo es un único binario de Go: sin dependencias de runtime ni paso de instalación
de paquetes. La estructura del sitio se basa en convenciones: content/,
layouts/, static/, themes/,
config.toml (o .yaml/.json). Los layouts usan
la sintaxis html/template de Go. Los temas se añaden como submódulos de
git o se copian en themes/<name>/. El layout de htmlpress es HTML
plano sin sintaxis de plantillas: el binario rellena sus elementos de marcador
htmlpress-*.
Hugo no es específico para documentación. El mismo binario impulsa blogs, sitios de marketing, portafolios y docs: el caso de uso de documentación se cubre mediante temas, no con tipos de sección de primera clase.
En htmlpress la disposición del contenido no tiene restricciones: escanea por glob
(include/exclude en htmlpress.yaml, todos los
archivos .html por defecto), y la URL de una página sigue su ruta de
archivo bajo la base del glob, así que docs/**/*.html sirve
docs/guide.html en /guide/. No hace falta una carpeta
docs/. La navegación se construye a partir de las carpetas y del
<meta name="order"> de cada página; el index.html de
una carpeta da nombre a su grupo. Hugo lee de content/, con una
estructura de URLs que refleja el árbol de directorios (y overrides de frontmatter
por sección).
Superficie de contenido
Hugo acepta Markdown con frontmatter; htmlpress acepta por igual páginas HTML y Markdown con frontmatter.
Hugo incrusta componentes con shortcodes: funciones con plantillas
de Go que se invocan desde Markdown con
{{< shortcode-name arg="value" >}}. Los shortcodes se definen en
layouts/shortcodes/*.html como fragmentos de plantilla de Go y emiten
HTML directamente. El equivalente más cercano en htmlpress es un componente del
proyecto: .htmlpress/components/<name>/<name>.html rellena
cada <htmlpress-<name>> en tiempo de compilación.
Hugo admite extensiones de Markdown basadas en Goldmark (notas al pie, tablas,
listas de definiciones, matemáticas mediante plugins). Para una interactividad más
rica, el patrón habitual es incrustar un <script> o usar un
framework de JS como isla dentro de un shortcode.
Las páginas de htmlpress son HTML semántico plano, al que el tema da estilo a partir
de los propios elementos. Los bloques más ricos son elementos personalizados
htmlpress-* (htmlpress-callout,
htmlpress-tabs, htmlpress-filetree,
htmlpress-cards, …), cuyo CSS y JS se enlazan solo en las páginas que
usan la etiqueta. Un proyecto añade su propia etiqueta con
.htmlpress/components/<name>/<name>.html, que reemplaza la
etiqueta en tiempo de compilación.
htmlpress no tiene frontmatter: los metadatos de una página son su propio
<head> — <title>,
<meta name="description">,
<meta name="order">, <meta name="layout"> y
<meta name="image">; las demás etiquetas de
<head> se conservan. Hugo acepta frontmatter en TOML, YAML o JSON
con campos como title, date, draft,
weight, taxonomies, además de campos definidos por el
usuario.
Matriz de funciones
| Capacidad | Htmlpress | Hugo |
|---|---|---|
| Versionado | Parcial (una sección o un despliegue por versión) | No (manual mediante ramas/sitios) |
| Internacionalización (i18n) | Sí (traducciones, selector de idioma, 7 idiomas de interfaz incluidos) | Sí (integrada, modo multilingüe) |
| Búsqueda | Sí (integrada, en el cliente) | No (la aporta el tema o un servicio externo) |
| Blog | No | Sí (cualquier sección se puede ordenar por fecha) |
| Registro de cambios | No | No (manual) |
| Sitemap | Sí (con site definido) |
Sí (integrado) |
| RSS | No | Sí (integrado, por sección) |
| Temas | Escapes en .htmlpress/ + tokens --htmlpress-* |
Directorios de temas con overrides de plantillas |
| Plugins | No (componentes del proyecto en .htmlpress/components/) |
Hugo Modules (Go), shortcodes, hooks |
| Rutas personalizadas |
Cualquier archivo .html; layouts adicionales en
.htmlpress/layouts/
|
Layouts + secciones de contenido |
| Toolchain independiente | Un único binario de Rust (npm, PyPI o crates.io) | Un único binario de Go |
| Velocidad de compilación | Binario nativo, sin bundler | Entre los SSG más rápidos |
Salida y despliegue
Ambas herramientas producen HTML estático + recursos listos para cualquier hosting
estático. Hugo emite en public/ por defecto; htmlpress emite en
.htmlpress/build/.
htmlpress escribe cada página como HTML estático en .htmlpress/build/,
junto con robots.txt, un sitemap.xml cuando
site está definido, una copia en Markdown de cada página,
llms.txt y las skills para agentes en
.well-known/agent-skills/. La clave base sirve el sitio
bajo una subruta. Consulta Despliegue para ver guías
por hosting.
Ver también
- Redacción — la superficie HTML de htmlpress.
- Personalización — las claves de configuración y los escapes de htmlpress.
- Comparativa — volver al índice.
Hecho con ❤ y Htmlpress