# Hugo vs Htmlpress

> Dos generadores de sitios estáticos de un solo binario: HTML plano centrado en docs frente a Go de propósito general.

[Hugo](https://gohugo.io) 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](https://www.docsy.dev) y [Hugo Book](https://github.com/alex-shpak/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](/es/deployment/) para ver guías por hosting.

## Ver también

- [Redacción](/es/authoring/) — la superficie HTML de htmlpress.
- [Personalización](/es/customization/) — las claves de configuración y los escapes de htmlpress.
- [Comparativa](/es/comparison/) — volver al índice.
