Aller au contenu

Le média des artisans du web dimanche 30 août 2026

Front-end

htmx 4.0 migre vers fetch() et rend l’héritage des attributs explicite

htmx 4.0.0, publié le 28 août 2026, réécrit son moteur autour de fetch() et impose des ruptures de comportement. L'héritage des attributs, le nommage des événements et la gestion de l'historique changent, sans casser la ligne 2.x installée par défaut.

La bibliothèque htmx a publié sa version 4.0.0 le 28 août 2026, au terme de huit mois de travail. Le changement le plus profond est invisible pour l’utilisateur final : le moteur interne abandonne XMLHttpRequest au profit de fetch(). Ce socle ouvre la voie au streaming de fragments HTML, mais il s’accompagne de ruptures de comportement que tout projet en 2.x devra intégrer avant de basculer.

De XMLHttpRequest à fetch() : un moteur réécrit

Le passage à fetch() simplifie l’implémentation et rend possible le rendu progressif : les fragments renvoyés par le serveur peuvent s’afficher au fur et à mesure de leur arrivée, sans attendre la fin de la réponse. La contrepartie est nette : toute extension, tout intercepteur ou toute bibliothèque qui se greffait sur la couche requête de htmx 2.x cessera de fonctionner tant qu’elle n’aura pas été adaptée à la nouvelle API.

Trois ruptures de comportement à anticiper

La première touche l’héritage des attributs, désormais explicite. Un attribut n’est plus propagé aux éléments enfants par défaut ; il faut le suffixer par :inherited. L’attribut hx-disinherit, qui servait à bloquer cette propagation, disparaît car il n’a plus d’objet.

<!-- htmx 2.x : hérité implicitement -->
<div hx-confirm="Confirmer ?">…</div>

<!-- htmx 4.0 : héritage à déclarer -->
<div hx-confirm:inherited="Confirmer ?">…</div>

La deuxième concerne les événements, uniformisés selon le motif htmx:phase:action. Les scripts qui écoutaient les anciens noms doivent être repris.

htmx 2.xhtmx 4.0
htmx:beforeRequesthtmx:before:request
htmx:afterRequesthtmx:after:request
htmx:beforeSwaphtmx:before:swap
htmx:configRequesthtmx:config:request
htmx:xhr:*supprimés
hx-varshx-vals avec préfixe js:
hx-promptextension à charger

La troisième porte sur l’historique. htmx 4.0 n’utilise plus localStorage par défaut : lors d’un retour arrière, la page est rechargée depuis le serveur. Les projets qui dépendaient du cache local peuvent restaurer un comportement proche via la nouvelle extension hx-history-cache, adossée à sessionStorage.

Le cœur de htmx 4.0 n’est pas une nouvelle syntaxe, mais un moteur réécrit autour de fetch() qui rend le streaming de HTML possible.

Morphing natif, streaming et nouvelles extensions

htmx 4.0 intègre le morphing des échanges sans dépendance externe, sur la base de l’algorithme idiomorph : un fragment remplace la cible en préservant l’état du DOM existant. Une balise <hx-partial> fait son apparition pour orchestrer des remplacements de type out-of-band de façon plus lisible. Autour du moteur, une famille d’extensions accompagne la transition.

La version 4.0 reste publiée sous l’étiquette npm next, tandis que la ligne 2.x conserve latest jusqu’au début 2027. Les projets qui chargent htmx via une URL de CDN sans numéro de version ne seront donc pas mis à niveau par accident.

Parmi les extensions notables : hx-preload pour le préchargement, hx-download pour les téléchargements de fichiers, hx-sse et hx-ws pour le streaming par flux d’événements et WebSocket, hx-multipart pour les réponses composites, et hx-alpine-compat pour cohabiter avec Alpine.js. Un paquet htmax.js regroupe htmx et un jeu d’extensions prêtes à l’emploi.

Migration : outillage et calendrier

Un vérificateur en ligne de commande passe les gabarits en revue et signale les héritages implicites, les attributs renommés ou supprimés, les anciens noms d’événements et les API obsolètes.

npx [email protected] upgrade-check -- ./templates

L’équipe fournit aussi des fichiers de compétences destinés aux assistants de code (htmx-guidance, htmx-debugging, htmx-extension-authoring, htmx-upgrade-from-htmx2), pour assister le diagnostic et la reprise d’une base 2.x.

Ce qu’il faut retenir

htmx 4.0.0 est une version de rupture assumée : le moteur passe à fetch(), l’héritage devient explicite, les événements sont renommés et l’historique cesse de reposer sur localStorage. Rien n’oblige à migrer dans l’immédiat, puisque la 2.x reste l’installation par défaut, mais les équipes qui visent le streaming de fragments ont désormais un chemin balisé, outillage de vérification inclus.

J’ai déployé htmx en production sur plusieurs projets clients, et le suffixe :inherited est le genre de rupture que j’accueille bien : l’héritage implicite de la 2.x était une source de surprises difficiles à tracer. Mon conseil reste toutefois de ne pas se précipiter. Tant que la 2.x tient la place de latest, mieux vaut lancer le upgrade-check sur une branche dédiée, mesurer l’ampleur du chantier, et migrer quand le streaming apporte un gain réel plutôt que par réflexe de nouveauté. — Simon Janvier

Pour aller plus loin

Annonce officielle et notes de version : htmx 4.0.0 has been released.

À lire aussi sur Mail Studio

Partager LinkedIn Bluesky Hacker News E-mail

À lire aussi