return to table of content

Htmx 2.0.0 has been released

recursivedoubts
47 replies
23h15m

hey folks, i'm the creator of htmx

this isn't much of a feature upgrade, but we took the opportunity to clean up a few things and drop IE support, which will help us slim down the library over time

hopefully it's an easy upgrade for most htmx users, upgrade guide is here:

https://htmx.org/migration-guide-htmx-1/

happy to answer any questions

llmblockchain
7 replies
22h40m

Does this release have head-support built in or still requires an extension? I thought 2.0 was going to release with head support...

recursivedoubts
6 replies
22h29m

we went back and forth on it but ultimately concluded that it bloated the core too much so we kept it as an extension

nop_slide
2 replies
22h18m

Looks like it moved to here

https://extensions.htmx.org/

But this is weirdly hard to find on the new site as searching just opens a scoped google search.

Probably would be good to setup redirects to the new extensions site.

recursivedoubts
1 replies
22h11m

yes, need to improve that aspect of the docs, sorry!

nop_slide
0 replies
21h54m

no need to apologize :)

big congrats on the launch!

llmblockchain
1 replies
21h11m

As long as hx-boost is in core, it would make more sense to have head support in core? It's difficult to really leverage hx-boost without being able to manage the head in responses.

recursivedoubts
0 replies
20h55m

yeah, i go back and forth on it a lot

could still fold it in at some point in the 2.x line!

gaganyaan
7 replies
22h57m

Are there any efforts to push functionality like this into the HTML standard? It would be nice if htmx eventually became unnecessary as browsers implemented it, and the work you're doing with proving it out in the wild seems like a crucial part of that.

recursivedoubts
4 replies
22h54m

yes, there are, alex petros, an htmx maintainer, gave a talk at Big Sky Dev Con on the shortest path to htmx-like functionality in HTML here:

https://www.youtube.com/watch?v=inRB6ull5WQ

we are talking w/the chrome developers about these ideas, i'm cautiously optimistic

asimops
1 replies
22h5m

Do you also plan on talking with the Mozilla people? And with Apple? Or will this be a kind of big daddy Google knows what's best for you, ads included?

recursivedoubts
0 replies
22h1m

I don't have contacts in those groups, but chrome is in contact w/them and has pushed forward hypermedia-friendly features e.g. https://developer.mozilla.org/en-US/docs/Web/API/View_Transi...

i have told my chrome team contacts about bugs in other browsers (e.g. safari not properly updating completion results when datalist elements are replaced asynchronously) and they have communicated these issues to those teams and gotten them fixed

if anyone reading this from other browser teams is interested in getting in contact w/me they can email me at carson at bigsky dot software

Alifatisk
1 replies
22h9m

we are talking w/the chrome developers about these ideas

I hope this does not become a chrome-only feature in that case

recursivedoubts
0 replies
22h3m

agreed, but the chrome team is in communication w/the other browser makers and often drives new standards (e.g. https://developer.mozilla.org/en-US/docs/Web/API/View_Transi...)

their latest features have started leaning into improving the hypermedia infrastructure of the web so i'm optimistic

niutech
1 replies
3h35m

HTML already allows a lot of HTMX functionality with just 166 bytes of JS glue code, see HTMZ: https://leanrada.com/htmz

You can make tabs, accordions, carousels, modals, popovers and even Pure HTML Out-Of-Order Streaming (PHOOOS) using only HTML & CSS: https://kodus.pl

recursivedoubts
0 replies
2h31m

yep, it's an interesting idea

we are planning on implementing a minimalist version of alex's ideas from "The Birth & Death of htmx" talk as a POC for people to look at too.

logankeenan
2 replies
20h41m

Have you considered replacing xhr with fetch? I believe it would allow htmx to be used in even more places. Fetch can be hijacked so returning data to the htmx framework isn't limited to the network. You could "run" a server in the browser or have a native app render HTML as well.

Perhaps, there's already a good way to hijack xhr that I'm unaware of too.

Edit: Relevant link: https://logankeenan.com/posts/client-side-server-with-rust-a...

recursivedoubts
1 replies
20h28m

yeah, looked at it, unfortunately fetch() and xhr have a non-intersecting set of features (in particular, upload progress for xhr) so we decided not to touch it

i may restructure the internals to allow for mocking out responses using events, it comes up, especially w/ extensions

logankeenan
0 replies
20h22m

That'd be great, and I'd love to help in any way I can! Feel free to @mention me on Github. https://github.com/logankeenan

Thanks for making htmx!

DLA
2 replies
23h6m

Huge congrats on the major number release. HTMX is simply wonderful. Using it for a major project as we speak!

jack_riminton
1 replies
23h0m

Would love to hear more about how you’re using it

DLA
0 replies
4h8m

We are building an enterprise application that manages (create, update data) and interacts with (read, display, enable user to browse via linked entities) a large-scale knowledge graph. In some views we have live updates from the server with SSEs (alerts, logs, etc.). Everything is rendered server side with Go + stdlib templates, Material Design Bootstrap for CSS, and HTMX for all the in interactive bits like fetching and rendering an entity's properties panel, enabling add/edit for entity or edge properties, and so on. Search updates results with HTMX. Entity/property edits are done with HTMX "panels".

The entire experience using Go + Fiber (gofiber.io) + templates + HTMX (htmx.org) is fantastic. This approach has allowed us to create a beautiful modern application that's highly performant, interactive in all the places you'd expect, and simple code, deps, devops, etc.

w4
1 replies
19h20m

Not a question, but I just wanted to say that HTMX is a joy to work. I’m using it in production to slowly replace VueJS wherever full SPA interactions aren’t needed, and it has made development so much simpler. HTMX is such a breath of fresh air from the over-engineered jenga tower that web dev has evolved into over the past decade.

Thank you!

recursivedoubts
0 replies
2h32m

:) great to hear

niutech
1 replies
3h44m

As for slimming down over time, HTMX 1.0 was 26KB minified, now version 2.0 is 48KB minified. Why has it blown up by 184%, when it dropped IE support? Why don't keep it lightweight? Compare it with e.g. Petite Vue, which is 16KB minified.

recursivedoubts
0 replies
2h32m

htmx 1.9.12 was 44kb:

https://bundlephobia.com/package/htmx.org@1.9.12

and 2.0.0 was 45.3:

https://bundlephobia.com/package/htmx.org@2.0.0-beta4

i think that the better web components support blew is up a little. there is a reasonable amount of fat we can cut around IE support that is still in there, planning on doing so over the next few months & slowly

17ms over emerging 4G (and hopefully cached forever after that) doesn't freak me out too much

recursivedoubts
0 replies
21h52m

2.x

recursivedoubts
0 replies
22h30m

unpoly is a great library that sets the standard for progressive enhancement

i often recommend it for people that want a more "batteries included" hypermedia-oriented library

jpgvm
1 replies
22h50m

As someone that has long since soured on frontend things despite having tried everything from the start - mootools, jQuery, backbone.js, SproutCore, Ember, React, Vue, etc.

I genuinely think htmx is the only one I have liked even after I built something substantial in it.

To me that is big, to be able to walk away from a significant amount of time with something and say "yeah! I want to use that again!" instead of some variant of "it's the least bad option" is both rare and cherished so thanks for all the hard work.

recursivedoubts
0 replies
22h46m

:) glad to hear it, definitely appeals to some people (and disgusts some other people!)

gws
1 replies
22h59m

No question but I wanted to say, I was pulling my hair out trying to figure out which js framework was less of an overkill, and finding htmx was pure joy

recursivedoubts
0 replies
22h46m

:) that's great to hear, i hope you find it useful

recursivedoubts
0 replies
22h16m

IE support, haven't removed some of the shims, planning on doing so over time

droptablemain
1 replies
20h54m

He's the creator, but not the CEO. That title belongs to me...and you.

recursivedoubts
0 replies
20h21m
dpe82
1 replies
22h38m

Thanks for all your hard work; htmx is a breath of fresh air and an escape from the morass of needless complexity.

My only question: how can I get a set of those sweet sweet floppy disks?

recursivedoubts
0 replies
22h30m

working on it, need to see if the disk guy will dropship

bun_terminator
1 replies
23h3m

Thank you. htmx has me (a c++ dev) back in the web game. I can finally build entire web frontends without a single line of explicit js.

recursivedoubts
0 replies
22h58m

really great to hear, i love that htmx helps folks that have been knocked out of web development get back into it

aquariusDue
1 replies
22h11m

I'll join the others in praise of HTMX, it's a joy adding dynamic functionality to any website now. Thank you!

recursivedoubts
0 replies
2h31m

:) thank you i hope you continue to find htmx useful

stereo
0 replies
12h0m

Your front page still says “IE11 compatible”.

nickpeterson
0 replies
22h29m

Another, “I really like htmx” comment, currently using it for an internal corporate webapp, it’s great.

jmorgan
0 replies
22h8m

Thank you for building htmx!

wruza
19 replies
21h52m

Htmx users, can you please share your backend stacks and approaches? Me specifically interested in templaters for node (+ts) and your thoughts on endpoint management, but all ideas are welcome I guess.

wruza
3 replies
17h4m

Well, as I expected, templating is the hardest part of migrating to htmx on nodejs.

After reviewing few templaters/etc (handlebars, ejs, lit-html, virtual-dom) and few abstractions (html``, just ``, h()), barely anything seems too easy and too freedom-y. Arcane syntaxes, high character noise (ejs, lit, js), lack of typing (all non-`` based), trivial screw ups (virtual-dom, handlebars), experimental status (lit ssr). Sigh.

unsupp0rted
2 replies
7h7m

This was my experience as well. No great template generator on the node side.

I use PUG. I don’t like to close HTML tags. This cuts 30% of the visual bloat out of my templates.

michaelcampbell
1 replies
5h34m

removingspacesgotridofalotofmybloatonregulartexttoo.

One man's structure is another man's "bloat", I guess.

unsupp0rted
0 replies
3h52m

PUG actually adds spaces: it's indentation based.

What it removes is the visual bloat of closing html tags.

So instead of:

    <div id='foo' class='bar baz'>
         <p>Some content</p>
    </div>
    <div id='foo2' class='bar2 baz2'>
         <p>More content</p>
         <p>Another paragraph</p>
    </div>
In PUG you do:

    #foo.bar.baz
        p Some content
    #foo2.bar2.baz2
        p More content
        p Another Paragraph
Even without syntax highlighting, it's plain at a glance where markup stops and content starts in PUG.

And it's easier to visually parse element IDs and chained classes this way too.

pondidum
2 replies
20h42m

Go: go templates and fiber for http serving. I have a mini framework for adding some structure to the templates (folder per feature: contains controller, templates, etc, and some naming conventions)

jjude
0 replies
13h51m

I too use go + fiber + htmx.

mini framework for adding some structure to the templates

Would be good to read little more about this mini-framework

Art9681
0 replies
20h24m

This is my stack as well and it works great.

fprotthetarball
1 replies
19h52m

My backend for a simple web application I'm working on is entirely in Rust. Highlights:

- axum: web application framework - https://github.com/tokio-rs/axum

- axum-htmx: axum extractors, responders, guards for htmx - https://github.com/robertwayne/axum-htmx

- rusqlite: SQLite bindings - https://github.com/rusqlite/rusqlite

- maud: HTML templating as a macro - https://maud.lambda.xyz

The way maud lets you compose markup works very nicely with htmx. The HX-Request header lets you know if the request is coming from htmx or if it is a regular request. You either call the top-level function if it's a regular request to get the entire page rendered, or call a subset of functions to get the appropriate partial rendered if it's an htmx request.

It's also nice to easily have tests for the rendered pages. My unit tests cover verification of the rendered HTML, too.

brunoqc
0 replies
15h17m

Do you use something like cargo-watch for "hot reload"?

amanzi
1 replies
14h47m

Django user here. HTMX fits in perfectly with the Django templating system. A fairly common approach is to use the same view but check for the HTMX header and then return a template file with the specific bit of HTML being swapped. There's also work in the Django space to be able to return parts of a template based on the request, which will suit HTMX perfectly too.

magnusstaberg
0 replies
12h21m

We use Django with https://htpy.dev/ as templating system.

wry_discontent
0 replies
4h49m

I usually use Clojure, Huff for html templating, and whatever DB libs. Pretty much whatever is in Biff[1] is what I want to use.

[1] https://biffweb.com/

swlkr
0 replies
18h49m

rust and ryde (my own framework on top of axum and rusqlite)

simonbarker87
0 replies
21h2m

NestJS with Handlebars templates. I don’t love Handlebars but I have past experience with it so was the most pragmatic choice.

I’m interested in trying EdgeJS as a templating alternative to HB but haven’t got round to it yet.

I’ve added a NestJS error handler that looks to see if the request came from an htmx request and then serve the error response as html, if not then it sends back json since I do have json api end points as well in the back end.

prisenco
0 replies
16h43m

Go with fasttemplate.

Most people prefer templ but I don't like logic in templates, I just want to parse values. I keep different states in different template files.

Each template file is a portion of a full page which makes it easy to create an endpoint that pulls the partial with the latest values. HTMX can then hit that endpoint to load or refresh values.

Endpoints are usually

    domain/page/partial
so if I'm on a configuration page at

    example.com/config
then the endpoint for the privacy settings partial would be

    example.com/config/privacy
Going directly there in a browser would get a 404 because I check for the HX-Request header.

Endpoint handlers return a processed template with the current state. I use those functions to both compose the full page on the backend, and to build the output for the partial endpoint.

I don't automatically expose all partials. I add endpoints as I need them. This is probably more idiomatically Go than anything to do with htmx.

jsnelgro
0 replies
12h20m

Htmx + Kotlin with ktor and the html dsl was really fun to play with on a personal project. Static typing, autocomplete and a full-fledged programming language available to use in your html markup is a game changer. I was structuring my endpoints as pairs of "data" and "render", where the render endpoint just reused the function for the date endpoint.

SwiftyBug
0 replies
11h34m

Go + Templ + htmx

Templ is great when you need to separate reusable components.

Raticus79
0 replies
21h15m

I'll be trying things out with FastAPI and Jinja templating

PyWoody
0 replies
18h39m

Flask+SQLite+TailwindCSS.

It's basically cheating. The setup is dead-simple to operate.

simonbarker87
11 replies
21h50m

One of the happiest days of coding in the last 10 years for me happened in September last year when I added htmx to an internal self serve web app I develop for our company. With the addition of maybe 5 htmx attributes I was able to delete about 500 lines of client side JS.

The app is now chock full of htmx interactions and has very little client side JS for the size of the app and it’s a joy to work on.

Without htmx I would not be able to turn around features as quickly as I do for the wider team so thank you, thank you, thank you.

I’ve been in web dev for 20 years and this feels like what we should have made all along.

The one area I would like to see some development is the file upload experience, I’ve had to do something a bit weird to get htmx and dropzone playing nice.

cztomsik
8 replies
20h53m

can you comment on what those 500 lines actually were? react+redux?

simonbarker87
5 replies
12h45m

It was all normal JS code to handle a complicated form we have on a customer facing portal page. By moving to htmx I was able to rely on the server side to handle basically everything with only a small addition of code to what it was already doing.

unsupp0rted
2 replies
7h14m

Isn’t that moving code around, not deleting it?

dlisboa
1 replies
7h9m

Most likely that code already existed server-side and was duplicated client-side. It's what usually happens since frontend code can't enforce invariants.

simonbarker87
0 replies
4h14m

Near enough exactly this

ghnws
1 replies
5h56m

I'm qurious what that code was doing that could be just moved to the backend. Usually forms have some validation for a better experience with the final validation on the server. Did you get rid of that and just show an error if the submission failed?

simonbarker87
0 replies
4h12m

Near enough yes but it was a nice helpful error message with the form fully populated as they left it - as far as it looks the user it’s client side validation as the service responds with just the correct html for the form and htmx swaps out the chunk of html.

Its like old school for validation back in the CodeIgniter days.

smegsicle
0 replies
20h11m

all htmx does is replace divs on the page, so probably just code that did that

gofreddygo
0 replies
14h28m

can anyone comment on what 500 lines of react+redux actually do ?

niutech
1 replies
3h49m

You deleted 500 lines of JS and added 44KB of (minified) HTMX. Better use HTMZ, which is only 166 bytes (sic!) and provides most of the interactivity: https://leanrada.com/htmz/

jordiburgos
0 replies
2h30m

The problem is not the download size. The problem is the amount of code to maintain.

Devasta
10 replies
22h45m

HTMX is like a glimpse into the road not taken, where HTML is the main language of the web instead of JS. Sometimes the grass really is greener on the other side, and I hope as an industry we make the switch.

oblio
6 replies
22h26m

My cynical take: this is by design. Those web committees are staffed by companies that each have their non-web platform they're pushing (or were, until it died, see Microsoft), so even the most well meaning members are somehow contorted into compromises that make the web as a platform a bad technical choice in terms of actual design, but the best one in terms of flexibility and of course ubiquity.

It's completely stupid HTML, by default, doesn't have basic controls found in EVERY UI toolkit since circa 1980. The standard examples being ListView and TreeView.

maigret
1 replies
21h31m

Don’t attribute to malice… Many people working on frontend came from application or backend development and preferred the JavaScript model to a more declarative one. Not understanding enough the document context that drives the web. This makes everything more fragile and slow but hey “functionality” wins over everything else in todays world.

oblio
0 replies
21h7m

This doesn't explain ListView and TreeView. Or the lack of a DatePicker widget.

Look at Windows, MacOS, iOS, Android, Gtk, Qt.

Which of those doesn't have these widgets?

I'm tired of defending mega corps with thousands of employees with IQs through the roof, working on this for decades. It has to be latent malice. Banality of evil, if you will.

jwells89
1 replies
22h21m

It's completely stupid HTML, by default, doesn't have basic controls found in EVERY UI toolkit since circa 1980. The standard examples being ListView and TreeView.

This is one of my greatest frustrations with the web as a platform. These controls are so basic they should just be there, eliminating the need to sift through dozens of third-party implementations all with wildly varying feature sets, performance profiles, framework compatibility, levels of upkeep, etc to find one that works for your project.

oblio
0 replies
22h12m

Well, they're not, and I can't find any good reason for why they aren't, when we're putting entire GPUs languages in there, except for the fact that somewhere in the HQ of one or more of those companies guiding web standards there is a discussion that goes something like:

Web Platform Dev: Boss, can we add TreeView to HMTL?

Web Platform Boss: Sounds cool, what are the advantages and disadvantages of doing this?

Web Platform Dev: Advantage: cross platform widget that's going to be super useful to many developers, replacing 3rd party ones of varying quality. Disadvantage: would take N months to implement and M years to have full adoptions, and yeah, it would probably increase adoption of the web platform, maybe even on mobile platform, where there is a chance that indirectly we will lose about $1-2bn per year from our walled garden, coupled with other web platform enhancements we should also make, regarding progressive web apps, local storage, etc.

Walled Garden Boss: Hey, SVP, can we please FIRE Web Platform Dev and Web Platform Boss as what they said amounts to a 2% drop in our share price?

bryan_w
1 replies
16h13m

It is possible for normal everyday people to make contributions to the standards. I'm sure if you created a patch that showed these things working in firefox/webkit/chrome and wrote up a proposal and sent it to the correct listserv, you would at least have something more than baseless conspiracy to be mad about

oblio
0 replies
11h20m

I'm not a C dev and it's not my job to do something when people are literally paid for this stuff, a lot more than me. Every mainstream OS has what I'm talking about.

qw
1 replies
10h27m

One example of this is the lack of an include-tag that could fetch a fragment from the server (useful for headers/footers). Developers have wanted it for decades and have been forced to reproduce the functionality themselves using frames and/or javascript.

Devasta
0 replies
7h29m

https://www.w3.org/TR/xinclude/

The W3C specced out such a tag nearly 20 years ago, but because the browser devs are terrified of all things XML it was never implemented.

kyrra
0 replies
22h37m

I believe he makes some good arguments that we really still need both, but HTML could be more powerful and allow for less JS.

This is a good essay on the topic: https://htmx.org/essays/when-to-use-hypermedia/

Definitely one place htmx can be abused is oob-swap: https://htmx.org/attributes/hx-swap-oob/, which allows any given HTMX request to replace any part of the page. It sort of destroys the concept of locality of concern that HTMX pushes for.

fghfgh65h5
5 replies
22h20m

HTMX + static site generators is DOPE. If we had just these two things back in the 90's...

baggachipz
3 replies
22h15m

I'm probably totally ignorant, but how would htmx work with a static site generator? Isn't the whole point of htmx that it extends the front end to dynamically interact with the server and get responses to inject?

victorbjorklund
0 replies
20h25m

I used it on a couple of static sites. Sometimes you just want that "SPA" navigation without a full page reload but you dont need a full JS framework

mbreese
0 replies
22h7m

You could have static elements pre-rendered, but only loaded on demand. For example, if you had a blog with comments, you could have the comments pre rendered in htmx fragments, but only loaded when they are clicked.

Or a photo gallery with thumbnails that are enlarged when clicked.

At least, that’s one way it could work.

hedgehog
0 replies
22h8m

On a documentation site, photo gallery, etc, it is very reasonable to use something like htmx to implement navigation without triggering full page loads.

jerrygenser
2 replies
23h10m

Love the upgrade music. Wish more libraries would add upgrade music with major releases

callalex
1 replies
22h30m

I looked around but I can’t find the upgrade music you are referencing.

xakpc
1 replies
20h10m

htmx works great with dotnet btw (wrote a series on that)

omarelb
0 replies
2h38m

Sounds very interesting! Do you have a link by any chance?

recursivedoubts
1 replies
22h14m

@dang, i know there is an htmx filter on HN due to so many posts, but it'd be nice if this one could go to the top, it's a major release

jack_riminton
0 replies
21h5m

+1, if there’s so many posts then there’s clearly pent up demand to talk about it

mikemitchelldev
1 replies
21h19m

React's had such dominance for the last 10 years. I'm glad there's an alternative.

KnutThroughAway
0 replies
2h30m

Vue? Svelte? Preact? Solid? Even Angular is much saner than React. Nobody needs to use React. Never had to. HTMX is no alternative for highly interactive web apps, btw.

recursivedoubts
0 replies
22h26m

released exclusively on floppy disk for the first week! :)

digitalsin
1 replies
21h5m

It has already been pirated by various groups and made available for download assuming you have the bandwidth. Unbelievable. Big Sky has to make money somewhere.

recursivedoubts
0 replies
21h3m

unfair!

xakpc
0 replies
20h11m

as htmx CEO I approve this message

jph00
0 replies
23h3m

I just want to take advantage of this news to say: I love HTMX so much! :D It makes web development fun again. I can still use all the fancy js libs I want -- but my main logic lives on the server, using plain HTTP and HTML. Really clear and simple.

jononor
0 replies
21h17m

Has anyone here used htmx for embedded devices? That is to provide web UI served by the device, for configuration / data access / control? Can you share the experience and if you would use it again?

ctxcode
0 replies
22h4m

i havent used htmx yet, but it sounds like a breath of fresh air. no npm library with 1000 dependencies with slow build times. just plain simple js library like the good old days ^_^

bradgessler
0 replies
15h23m

Anybody know if there’s something like HTMX that plugs into Turbo? Every time I start using a stimulus controller, I have the thought that it should be more like HTMX instead.

Ayesh
0 replies
16h28m

I knew about Htmx and that HN loves it. But this post is what I actually got to take a good look, and oh my god it felt like such a fresh breath!

We have a few jQuery-era websites (that still work today because why not), and Htmx could be where we trim hundreds of lines.