htmx began life as intercooler.js, a library built around jQuery that added behavior based on HTML attributes.
For developers who are not familiar with it, jQuery is a venerable JavaScript library that made writing cross-platform JavaScript a lot easier during a time when browser implementations were very inconsistent, and JavaScript didn’t have many of the convenient APIs and features that it does now.
Today many web developers consider jQuery to be “legacy software.” With all due respect to this perspective, jQuery is currently used on 75% of all public websites, a number that dwarfs all other JavaScript tools.
We are going to work to ensure that htmx is extremely stable in both API & implementation. This means accepting and documenting the quirks of the current implementation.
Someone upgrading htmx (even from 1.x to 2.x) should expect things to continue working as before. here appropriate, we may add better configuration options, but we won’t change defaults. We are going to be increasingly inclined to not accept new proposed features in the library core.
People shouldn’t feel pressure to upgrade htmx over time unless there are specific bugs that they want fixed, and they should feel comfortable that the htmx that they write in 2025 will look very similar to htmx they write in 2035 and beyond.
We will consider new core features when new browser features become available, for example we are already using the experimental moveBefore() API on supported browsers.
However, we expect most new functionality to be explored and delivered via the htmx extensions API, and will work to make the extensions API more capable where appropriate.
htmx does not aim to be a total solution for building web applications and services: it generalizes hypermedia controls, and that’s roughly about it.
This means that a very important way to improve htmx — and one with lots of work remaining — is by helping improve the tools and techniques that people use in conjunction with htmx.
Doing so makes htmx dramatically more useful without any changes to htmx itself.