Teknologi & innovasjonPublisert: 30. juli 20258 min lesing

HTMX guide på norsk — interaktive nettsider uten tunge JavaScript-rammeverk

Oppdager du at du ikke trenger React? HTMX gir deg AJAX, WebSockets og Server-Sent Events rett fra HTML.

Norsk Næring
Norsk NæringRedaksjon
HTMX lar deg legge til moderne interaktivitet i nettsider med enkle HTML-attributter — uten å…

HTMX lar deg legge til moderne interaktivitet i nettsider med enkle HTML-attributter — uten å skrive JavaScript.

Lær HTMX på norsk: bygg interaktive nettsider med HTML-attributter. Fungerer med Django, FastAPI, Flask og andre backend-rammeverk.

Annonse

Hva er HTMX og hvem lagde det?

HTMX er et lite JavaScript-bibliotek (under 14 kB) som lar deg lage interaktive nettsider ved å legge til spesielle attributter i HTML. Det ble laget av Carson Gross og er en videreføring av det eldre biblioteket Intercooler.js. Filosofien bak er hypermedia-drevet webutvikling: HTML er kraftig nok til å uttrykke applikasjonens tilstand, og serveren bør sende HTML — ikke JSON — som svar.

HTMX ble overraskende populær fra 2022 og fremover, delvis som en reaksjon mot kompleksiteten i moderne JavaScript-SPA-utvikling. Mange utviklere oppdaget at de ikke trengte React eller Vue for å lage gode brukeropplevelser — HTMX og en god server-side template-motor var nok.

HTMXs kjernekonsepter

HTMX bygger på noen enkle, men kraftige attributter:

  • hx-get / hx-post — gjør AJAX-forespørsler til serveren når elementet klikkes, uten å laste hele siden.
  • hx-target — definerer hvilket element som skal oppdateres med serversvaret (CSS-selector).
  • hx-swap — bestemmer hvordan svaret settes inn: innerHTML (standard), outerHTML, beforebegin, afterend m.fl.
  • hx-trigger — lar deg definere hendelser som utløser forespørselen: click, change, keyup[keyCode==13], intersect (scroll inn i visningsfeltet).
  • hx-push-url — oppdaterer nettleserens URL-linje uten full sideoppdatering, for korrekt back-knapp-funksjon.
  • hx-boost — konverterer vanlige lenker og skjemaer til AJAX automatisk, med progressiv forbedring.

Et praktisk eksempel: live søk

Uten HTMX ville et live søkefelt kreve JavaScript-kode for å lytte på input-hendelser, gjøre fetch()-kall, parse JSON-svaret og manipulere DOM. Med HTMX skriver du kun HTML: <input name="q" hx-get="/søk" hx-target="#resultater" hx-trigger="keyup changed delay:300ms" placeholder="Søk..."> <div id="resultater"></div>.

Serveren din (Django, FastAPI, Rails, Laravel — hva som helst) mottar GET /søk?q=... og returnerer et HTML-fragment med søkeresultatene. HTMX setter inn dette fragmentet i #resultater-elementet. Det er alt. 300ms delay forhindrer at det sendes en forespørsel for hvert tastetrykk.

Annonse

HTMX med ulike backend-rammeverk

HTMXs store styrke er at det fungerer med alle server-side rammeverk. Med Django kan du bruke django-htmx-utvidelsen for enkel integrasjon og delvis mal-rendering. Med FastAPI returnerer endepunkter HTML-fragmenter via Jinja2-templates. Rails har utmerket HTMX-støtte og mange kombinerer det med Hotwire Turbo for ekstra funksjonalitet.

Mønsteret er alltid det samme: serveren mottar en forespørsel, genererer HTML, og returnerer det. Ingen JSON serialisering, ingen JavaScript deserialisering, ingen state management. Kompleksiteten flyttes tilbake til serveren der den hører hjemme for de fleste applikasjoner.

WebSockets og Server-Sent Events

HTMX støtter også sanntidsoppdateringer via WebSockets og Server-Sent Events (SSE) med enkle HTML-attributter. For en live oppdateringsstrøm bruker du hx-sse="connect:/hendelser" og hx-swap="innerHTML" på et container-element — HTMX kobler til SSE-strømmen og oppdaterer elementet automatisk når serveren sender nye meldinger.

Dette er kraftig for dashboards, notifikasjoner og chat-applikasjoner. Du trenger ikke Socket.io eller kompleks WebSocket-håndtering i frontend — HTMX tar seg av alt, og backend sender HTML-fragmenter via SSE-strømmen.

Ytelse og sammenligning med SPA

HTMX-applikasjoner har noen klare fordeler over tradisjonelle SPA-applikasjoner:

JavaScript bundle (React-app)~150–500 kB
JavaScript bundle (HTMX-app)~14 kB
Time to Interactive (React)2–5 sekunder
Time to Interactive (HTMX)< 1 sekund
Kodelinjer frontend (typisk)80–90 % færre

Når passer HTMX og når passer det ikke?

HTMX er ideelt for innholdsdrevne applikasjoner med moderat interaktivitet: admin-paneler, dashboards, CRUD-applikasjoner, søkesider og skjemaer. Det passer spesielt godt for team med sterk backend-kompetanse som ikke vil bruke tid på å lære et komplekst JavaScript-rammeverk.

HTMX passer derimot dårlig for høyt interaktive applikasjoner som sanntidssamarbeid (Google Docs-lignende), komplekse brukergrensesnitt med mye lokal tilstand, og offline-kapabilitet. For slike brukstilfeller er React, Vue eller SvelteKit bedre valg. Det finnes heller ingen ulemper ved å bruke begge: HTMX for de enkle delene, og et lite SPA-komponent der det trengs.

Filosofien bak HTMX

HTMX utfordrer antagelsene i moderne webutvikling.

"HTMX er ikke en tilbakevending til fortiden. Det er en anerkjennelse av at nettleseren er en kraftig hypermedia-klient, og at vi ikke alltid trenger å konvertere den til et JavaScript runtime-miljø."

— Carson Gross, skaperen av HTMX, i "Hypermedia Systems"-boken (2023)
Annonse

Ofte stilte spørsmål

Hva handler «HTMX guide på norsk — interaktive nettsider uten tunge JavaScript-rammeverk» om?

Lær HTMX på norsk: bygg interaktive nettsider med HTML-attributter. Fungerer med Django, FastAPI, Flask og andre backend-rammeverk.

Hva er HTMX og hvem lagde det?

HTMX er et lite JavaScript-bibliotek (under 14 kB) som lar deg lage interaktive nettsider ved å legge til spesielle attributter i HTML. Det ble laget av Carson Gross og er en videreføring av det eldre biblioteket Intercooler.js. Filosofien bak er hypermedia-drevet webutvikling: HTML er kraftig nok til å uttrykke applikasjonens tilstand, og serveren bør sende HTML — ikke JSON — som svar.

Hva bør du vite om hTMXs kjernekonsepter?

HTMX bygger på noen enkle, men kraftige attributter:

Hva bør du vite om et praktisk eksempel: live søk?

Uten HTMX ville et live søkefelt kreve JavaScript-kode for å lytte på input-hendelser, gjøre fetch()-kall, parse JSON-svaret og manipulere DOM. Med HTMX skriver du kun HTML: <input name="q" hx-get="/søk" hx-target="#resultater" hx-trigger="keyup changed delay:300ms" placeholder="Søk..."> <div id="resultater"></div>.

Hva bør du vite om hTMX med ulike backend-rammeverk?

HTMXs store styrke er at det fungerer med alle server-side rammeverk. Med Django kan du bruke django-htmx-utvidelsen for enkel integrasjon og delvis mal-rendering. Med FastAPI returnerer endepunkter HTML-fragmenter via Jinja2-templates. Rails har utmerket HTMX-støtte og mange kombinerer det med Hotwire Turbo for ekstra funksjonalitet.

Hva bør du vite om webSockets og Server-Sent Events?

HTMX støtter også sanntidsoppdateringer via WebSockets og Server-Sent Events (SSE) med enkle HTML-attributter. For en live oppdateringsstrøm bruker du hx-sse="connect:/hendelser" og hx-swap="innerHTML" på et container-element — HTMX kobler til SSE-strømmen og oppdaterer elementet automatisk når serveren sender nye meldinger.

Norsk Næring
Skrevet avNorsk NæringRedaksjon

Norsk Næring er en del av redaksjonen i Norsk Næring og dekker teknologi & innovasjon. Redaksjonen kvalitetssikrer alt innhold mot oppdaterte og pålitelige kilder.

Redaksjonell merknad: Dette innholdet er utarbeidet av Norsk Næring med hjelp av kunstig intelligens og kvalitetssikret av redaksjonen. Informasjonen er ment som generell veiledning og erstatter ikke profesjonell rådgivning. Feil eller unøyaktigheter? Kontakt oss på help@norsknæring.no.