Ehundu 1.0: la primera versión estable del generador de sitios estáticos en PHP hecho en Bilbao
Ehundu, el generador de sitios estáticos en PHP que he desarrollado en Bilbao, estrena su versión 1.0: formato congelado, compromiso de estabilidad y diecisiete webs reales funcionando con él.

El 2 de noviembre publiqué Ehundu 1.0.0. Dicho así, en una línea, parece poca cosa: un número que pasa de 0.16 a 1.0. Pero detrás de ese salto hay meses de trabajo, una buena colección de webs migradas, más de ciento cincuenta decisiones apuntadas una a una con sus razones y una promesa que hasta ahora no me había atrevido a hacer: lo que funciona hoy con Ehundu seguirá funcionando mañana.
Por cierto, si estás leyendo esto en paigar.eu, lo estás leyendo en una página que ha tejido Ehundu. Este blog dejó Lume y se pasó a Ehundu conservando todas sus direcciones, de modo que nadie debería haber notado la mudanza. Que es, en realidad, lo único que se le puede pedir a una buena mudanza.
Qué es Ehundu y por qué en PHP
Ehundu es un generador de sitios estáticos escrito en PHP. Recibe contenido en Markdown, datos en YAML y plantillas en Twig, y devuelve HTML plano, del de toda la vida, listo para servirse desde cualquier sitio. Funciona desde la terminal, como casi todos los generadores, pero también desde dentro de un proceso web, y ahí está buena parte de su razón de ser.
La pregunta que más me han hecho mientras lo desarrollaba es por qué PHP, ahora que lo moderno parece ser JavaScript, Go o Rust. La respuesta es poco romántica y muy práctica: PHP está en todas partes. Cualquier alojamiento compartido, incluso el más modesto que pueda contratar una pequeña empresa, ejecuta PHP. Ehundu pide PHP 8.4 o superior y nada más: ni base de datos, ni programas externos, ni extensiones poco habituales. Eso permite compilar un sitio en el mismo servidor donde se publica, sin pasar por servicios de integración continua ni por plataformas que hoy son gratuitas y mañana ya veremos.
Ese es, en el fondo, el principio que lo guía todo: no depender de servicios ajenos. Software libre que se pueda mantener, sí; APIs de un proveedor concreto, no. El contenido son ficheros (Markdown, YAML, plantillas y recursos estáticos) y una carpeta copiada a otra máquina se compila exactamente igual. Si un día desaparece el alojamiento, o el proveedor de turno cambia sus condiciones, la web sigue ahí, en una carpeta, legible por cualquiera que sepa abrir un fichero de texto.
Un generador que habla castellano
Casi todas las herramientas de desarrollo web dan por hecho que quien las usa piensa en inglés. Ehundu no. Las carpetas se llaman contenido, plantillas y publico, y los campos de cada página son titulo, fecha o etiquetas. Puede parecer un detalle menor, pero cuando una web la va a tocar alguien que no es programador, o cuando la mantiene una agencia pequeña de aquí, que la estructura se lea en su idioma ahorra muchas explicaciones.
Lo mismo pasa con los errores. Los avisos de Ehundu están en castellano y señalan el fichero y la línea donde está el problema. Me parece una de esas cosas que nadie agradece cuando todo va bien y que todo el mundo agradece cuando algo falla un viernes a última hora.
Ese idioma no impide que el proyecto mire fuera: ehundu.com tiene versión en inglés, el código está en GitHub bajo licencia MIT y el paquete se instala con Composer desde Packagist, como cualquier otra librería del ecosistema PHP.
Ehundu significa tejer
El nombre viene del euskera: ehundu es tejer. Se pronuncia, más o menos, «e-ún-du», y la elección no es casual. Web, en inglés, es literalmente un tejido, una red, y un generador de sitios estáticos no hace otra cosa que entrelazar contenidos y plantillas hasta convertirlos en páginas. Me gustaba que el nombre contara lo que hace la herramienta y, de paso, dónde ha nacido.
El logotipo tiene una aguja, y esa aguja tiene nombre propio: Nidel, un perro de color canela que encontraron en un pajar y que acabó adoptado en casa. Nidel suena a needle, aguja en inglés, y no hay mejor metáfora que una aguja encontrada en un pajar para algo que pretende coser cosas pequeñas con paciencia.
Qué significa que sea la versión 1.0
Funcionalmente, Ehundu 1.0 hace lo mismo que hacía la 0.16. La diferencia no está en lo que el programa sabe hacer, sino en lo que promete. Con esta versión, el contrato deja de ser un borrador: el formato de los proyectos (formato: 1), la orden de consola y una lista corta de funciones de la librería PHP quedan congelados. Dentro de la versión 1, los cambios solo pueden sumar. Nada de lo que hoy funciona dejará de funcionar sin aviso, y si algún día hay que retirar algo, se anunciará antes en una versión menor.
Para llegar hasta aquí, las dos últimas versiones previas no añadieron ninguna funcionalidad nueva. Se dedicaron a revisar el contrato línea a línea contra el código real. Tres lectores independientes repasaron unas doscientas cincuenta afirmaciones de la documentación y comprobaron que unas doscientas eran exactas tal como estaban escritas. El resto se corrigió antes de congelar nada. Es un trabajo poco vistoso, pero creo que es lo que separa un proyecto personal de una herramienta en la que otra gente puede confiar.
Todas las decisiones de diseño, con sus porqués, están recogidas en un registro público. Quien quiera saber por qué algo funciona de una manera y no de otra puede leerlo sin tener que adivinarlo.
Lo que Ehundu ya sabe hacer
Cada página es un fichero Markdown con una pequeña cabecera, y los ajustes comunes de una carpeta, como su etiqueta o el patrón de sus direcciones, van en un único fichero _datos.yml. Las plantillas usan Twig, con colecciones y fechas localizadas en el idioma de cada página, y los códigos cortos permiten insertar imágenes, vídeos o documentos sin escribir HTML. Ehundu genera una página por cada etiqueta, reparte los listados largos en varias páginas, añade identificador y enlace permanente a los títulos, y ordena alfabéticamente sin tropezar con los signos de apertura ¿ y ¡, algo que cualquiera que haya trabajado con herramientas pensadas en inglés sabrá valorar.
Los sitios multilingües son ciudadanos de primera, con un título de canal RSS distinto para cada idioma. Las páginas que lo piden pueden salir también en PDF, las imágenes con varias anchuras reciben su srcset y cada página puede llevar su propio CSS y JavaScript, con una huella en el nombre del fichero para que la caché del navegador no juegue malas pasadas. Los enlaces que abren una pestaña nueva incluyen un aviso para los lectores de pantalla, porque la accesibilidad no debería ser una opción que alguien tenga que acordarse de activar.
A la hora de publicar, la vista previa reconstruye solo lo que ha cambiado, y ehundu desplegar sube el resultado a una carpeta, por FTP, por SFTP o a un almacenamiento compatible con S3, enviando únicamente los ficheros modificados. Las entradas programadas aparecen en su fecha y desaparecen cuando termina su periodo de vigencia, lo que resulta muy cómodo para eventos, ofertas o avisos temporales.
Compilar dentro de una petición web
La orden de consola es solo una capa fina sobre una librería PHP. Eso quiere decir que cualquier programa en PHP puede compilar un sitio durante una petición web, incluso en un alojamiento compartido:
$proyecto = Proyecto::abrir('/ruta/a/mi-sitio');
$informe = (new CompiladorEnProceso())->compilar($proyecto);
echo $informe->resumen();
Como esos alojamientos suelen limitar el tiempo que puede durar un proceso, Ehundu es capaz de repartir la compilación y la subida de un sitio grande entre varias peticiones. Y la compilación incremental recuerda el trabajo ya hecho entre un proceso y otro, de modo que una aplicación que integre el motor, como un panel de edición, no necesita reconstruir la web entera cada vez que alguien guarda un cambio. Para mí este era el punto clave: un sitio estático que el propio cliente pueda editar sin renunciar a la sencillez de lo estático.
Diecisiete webs ya tejidas con Ehundu
Una versión estable no se mide por lo que promete la documentación, sino por lo que aguanta en producción. El escaparate de ehundu.com reúne ya diecisiete sitios reales, y entre ellos hay de todo. Bilbonauta, mi diario de viajes, supera las mil páginas con galerías, mapas y presupuestos, todo escrito en Markdown y migrado desde Lume. La web de Idenautas pasa de los ciento setenta artículos. FRAME/SHIFT, una web de cine con reseñas e ilustraciones, genera más de seiscientas páginas con un archivo filtrable.
También hay webs que venían de Joomla y se han reconstruido con Ehundu, como la de la asociación jacobea Vía de Bayona Bureba, con su blog histórico y sus guías de alojamiento; la casa rural Kerizara, en Otxandio, en castellano y euskera; o el Restaurante Aralar, en tres idiomas, con información de alérgenos y cartas en PDF. Y hay migraciones desde Eleventy, como un directorio internacional de clínicas dentales que ha cambiado de motor sin tocar su diseño o la web de una asociación sin ánimo de lucro de Essen, publicada en Netlify.
Clínicas, un restaurante, un centro de día, una casa rural, un artista de graffiti, un local para fiestas infantiles en Begoña... Son webs de negocios pequeños y de proyectos personales, que es exactamente el terreno para el que nació Ehundu. Y la propia ehundu.com, en dos idiomas, con la documentación sacada directamente del repositorio del motor y sin una sola línea de JavaScript propio.
Cómo empezar con Ehundu
La instalación es la de cualquier paquete PHP:
composer require ehundu/ehundu
Para no empezar con la página en blanco, Ehundu ofrece siete andamios, proyectos listos con sus carpetas, plantillas y estilos, cada uno con su demostración en vivo: un sitio mínimo, un blog, una web de documentación, un portfolio, la web de un negocio local, un sitio multilingüe en castellano y euskera, y la página de un evento. La sección de primeros pasos de ehundu.com explica cómo ponerlos en marcha, y la documentación de referencia detalla el formato completo.
El código está en GitHub, publicado con licencia MIT. Se puede usar, estudiar, modificar y redistribuir sin pedir permiso a nadie, que es como creo que debería funcionar una herramienta pensada para no depender de nadie.
Lo que viene en la serie 1.x
La versión 1.0 no es un punto final. Ya hay tres novedades previstas para las próximas versiones de la serie: componentes con parámetros, generación de imágenes en varios tamaños y un buscador. Todas llegarán respetando la regla de oro de esta versión, la de sumar sin romper.
Después de tantos meses con el número cero por delante, ponerle a Ehundu un uno delante tiene algo de mayoría de edad. No porque esté terminado, que no lo está, sino porque ya puede salir de casa solo. Si haces webs para pequeñas empresas, si te cansa depender de plataformas que cambian las reglas cuando les conviene o si simplemente te apetece probar un generador de sitios estáticos que habla tu idioma, te invito a que te des una vuelta por ehundu.com y me cuentes qué te parece.


