BookinglyTech News
Software

htmx 4.0 cambia XMLHttpRequest por fetch y hace explícita la herencia de atributos

La primera versión mayor de la librería hipermedia desde 2024 llega tras ocho meses de trabajo, se salta la 3 y esconde una ruptura silenciosa en la herencia de atributos.

2 min de lecturaInfoQ0 vistas

htmx 4.0.0 ya está publicado. Es la primera versión mayor desde la 2.0, llegó después de ocho meses de trabajo y se salta la 3 directamente. Carson Gross, su creador, había prometido que nunca habría un htmx 3, y resume el salto con una palabra: "Oops".

El cambio de base es el transporte: fuera XMLHttpRequest, dentro fetch(). Para quien solo usa hx-get y hx-post, el comportamiento es el mismo de siempre, pero el script sigue pesando unos 14KB y el cambio habilita streaming nativo y las dos funciones que el equipo destaca.

La primera es el morphing integrado, apoyado en idiomorph, que conserva el estado del DOM durante las actualizaciones: el foco en un input, por ejemplo, no se pierde. La segunda es la etiqueta hx-partial, que permite que una sola respuesta actualice varios objetivos de forma limpia, en lo que viene a ser una versión más ordenada de los intercambios fuera de banda.

La herencia explícita es la trampa

Los atributos del padre ya solo llegan a los hijos si se marcan con el sufijo :inherited. Un ejemplo:

<div hx-confirm:inherited="Are you sure?">
  <button hx-delete="/item/1">Delete</button>
</div>

Aquí está el problema para quien migre a lo bruto: un hx-headers que pasaba un token CSRF a los elementos hijos deja de funcionar sin ese sufijo, el servidor empieza a responder 403 y a simple vista nada parece roto. El equipo publica un comprobador de línea de comandos que detecta precisamente esto, además de atributos renombrados y eventos antiguos: npx htmx.org@4.0.0 upgrade-check -- ./templates.

Los nombres de evento se han normalizado al patrón htmx:phase:action, así que htmx:afterRequest pasa a ser htmx:after:request. El historial ya no guarda una copia del DOM en localStorage, sino que vuelve a pedir la página, lo que deja funcionar a scripts de terceros. También hay un tiempo máximo de petición de 60 segundos y varios renombrados de atributos, como hx-disable, que pasa a ser hx-ignore.

La 4.0 se distribuye bajo la etiqueta next de npm, no bajo latest, así que nadie que use un enlace a CDN sin versión fijada se actualiza sin querer. La rama 2.x seguirá soportada indefinidamente.

El recibimiento en Hacker News pasó de 700 puntos, con gente elogiando el stack de Go, SQLite y htmx y lo bien que lo manejan los asistentes de IA. No todo fueron aplausos: un desarrollador de .NET y Angular sostuvo que htmx te obliga a mezclar presentación con lógica de negocio, y otro le dio la razón diciendo que su equipo vuelve a React.

La migración no es urgente si no se toca nada, y ese es justo el punto: quien actualice tiene que revisar la herencia antes que cualquier otra cosa, porque el fallo se manifiesta en el servidor y no en el navegador. Hay una guía de novedades de htmx 4 con el detalle completo.