Die Bibliothek htmx hat am 28. August 2026 nach acht Monaten Arbeit ihre Version 4.0.0 veröffentlicht. Die tiefgreifendste Änderung bleibt für Endnutzer unsichtbar: Der interne Motor löst sich von XMLHttpRequest und setzt auf fetch(). Dieses Fundament ermöglicht das Streaming von HTML-Fragmenten, bringt aber Breaking Changes mit, die jedes 2.x-Projekt vor dem Umstieg verarbeiten muss.
Von XMLHttpRequest zu fetch(): ein neu geschriebener Motor
Der Wechsel zu fetch() vereinfacht die Implementierung und ermöglicht progressives Rendern: Vom Server zurückgegebene Fragmente können erscheinen, sobald sie eintreffen, ohne auf die vollständige Antwort zu warten. Der Preis ist deutlich: Jede Erweiterung, jeder Interceptor und jede Bibliothek, die sich in die Request-Schicht von htmx 2.x eingeklinkt hatte, funktioniert erst wieder nach Anpassung an die neue API.
Drei Verhaltensbrüche, auf die man sich vorbereiten sollte
Der erste betrifft die Attributvererbung, die nun explizit ist. Ein Attribut wird standardmäßig nicht mehr an Kindelemente weitergegeben; es braucht das Suffix :inherited. Das Attribut hx-disinherit, das diese Weitergabe blockierte, entfällt, weil es keinen Zweck mehr hat.
<!-- htmx 2.x: implizit vererbt -->
<div hx-confirm="Bestätigen?">…</div>
<!-- htmx 4.0: Vererbung wird deklariert -->
<div hx-confirm:inherited="Bestätigen?">…</div>Der zweite betrifft die Events, vereinheitlicht nach dem Muster htmx:phase:action. Skripte, die auf die alten Namen hörten, müssen überarbeitet werden.
| htmx 2.x | htmx 4.0 |
|---|---|
htmx:beforeRequest | htmx:before:request |
htmx:afterRequest | htmx:after:request |
htmx:beforeSwap | htmx:before:swap |
htmx:configRequest | htmx:config:request |
htmx:xhr:* | entfernt |
hx-vars | hx-vals mit dem Präfix js: |
hx-prompt | Erweiterung nachladen |
Der dritte betrifft die History. htmx 4.0 nutzt localStorage nicht mehr standardmäßig: Beim Zurücknavigieren wird die Seite erneut vom Server geladen. Projekte, die auf den lokalen Cache setzten, können ein ähnliches Verhalten über die neue Erweiterung hx-history-cache auf Basis von sessionStorage wiederherstellen.
Der Kern von htmx 4.0 ist keine neue Syntax, sondern ein um fetch() neu gebauter Motor, der HTML-Streaming ermöglicht.
Natives Morphing, Streaming und neue Erweiterungen
htmx 4.0 integriert das Morphing der Austausche ohne externe Abhängigkeit auf Basis des idiomorph-Algorithmus: Ein Fragment ersetzt das Ziel und bewahrt dabei den bestehenden DOM-Zustand. Ein neues <hx-partial>-Tag orchestriert Out-of-Band-Austausche lesbarer. Rund um den Motor begleitet eine Familie von Erweiterungen den Übergang.
Version 4.0 bleibt unter dem npm-Tag next veröffentlicht, während die 2.x-Reihe latest bis Anfang 2027 behält. Projekte, die htmx über eine CDN-URL ohne Versionsnummer laden, werden somit nicht versehentlich aktualisiert.
Zu den bemerkenswerten Erweiterungen zählen hx-preload für das Vorladen, hx-download für Dateidownloads, hx-sse und hx-ws für Streaming per Event-Stream und WebSocket, hx-multipart für zusammengesetzte Antworten und hx-alpine-compat für das Zusammenspiel mit Alpine.js. Ein htmax.js-Bundle vereint htmx mit einem gebrauchsfertigen Satz an Erweiterungen.
Migration: Werkzeuge und Zeitplan
Ein Kommandozeilen-Prüfer geht die Templates durch und meldet implizite Vererbung, umbenannte oder entfernte Attribute, alte Event-Namen und veraltete APIs.
npx [email protected] upgrade-check -- ./templatesDas Team liefert außerdem Skill-Dateien für Coding-Assistenten (htmx-guidance, htmx-debugging, htmx-extension-authoring, htmx-upgrade-from-htmx2), um die Diagnose und die Migration einer 2.x-Basis zu unterstützen.
Was bleibt
htmx 4.0.0 ist ein bewusster Breaking Release: Der Motor wechselt zu fetch(), die Vererbung wird explizit, Events werden umbenannt und die History stützt sich nicht mehr auf localStorage. Nichts zwingt zur sofortigen Migration, da 2.x die Standardinstallation bleibt, doch Teams mit dem Ziel Fragment-Streaming haben nun einen klar markierten Weg, inklusive Prüfwerkzeug.
Ich habe htmx in mehreren Kundenprojekten in Produktion gebracht, und das Suffix :inherited ist genau die Art Bruch, die ich begrüße: Die implizite Vererbung in 2.x war eine Quelle schwer nachvollziehbarer Überraschungen. Mein Rat bleibt dennoch, nichts zu überstürzen. Solange 2.x das Tag latest hält, lohnt es sich, upgrade-check auf einem eigenen Branch laufen zu lassen, den Umfang zu messen und dann zu migrieren, wenn Streaming einen echten Gewinn bringt statt aus Neugier. — Simon Janvier
Weiterführend
Offizielle Ankündigung und Release Notes: htmx 4.0.0 has been released.
