250 comments

[ 0.23 ms ] story [ 51.7 ms ] thread
Is it just a coincidence that the image for this release is the same as for Omarchy Quattro? https://youtu.be/F7fe9pa8OeE
oh man that's embarassing, someone made that on twitter I didn't realize it was from omarchy, I've removed it, my bad
As CEO of HTMX, I am very proud of the work achieved by the team.
> Like it or not, a lot of people are using LLMs and we are providing the following skills files for

For what? Don't leave us hanging!

> Note that attributes like hx-disinherit

Looks like some copy is missing here

Great library. Really enjoy using it. Agents work really well with the kind of site you build with it and it’s very easy to build. Thanks for the upgrade skills.
Congrats and thanks! htmx brings me joy.

Pretty much every experiment I build now starts with Go, htmx, and SQLite to keep things simple and fast but still responsive.

I put a few more thoughts about this here:

https://housecat.com/blog/the-hugs-stack-hypermedia-unix-go-...

Oh wow, interesting combo that I would never independently reach for, but thanks to your template I might have to give it a whirl!
Agreed.

In fact, I find Django and Postgres to be the best solution for htmx but Go stack is probably almost as good in terms of developer velocity and obviously much faster. So I think that's a good solution.

You can really build powerful production apps with htmx, and what people underestimate is how good it is with AI assisted development (Claude understands it and does it well, and if any JS glue logic on a specific template is required, it's pretty well written and not a mess).

Django + Postgres on the backend plus a frontend of HTMX + alpine.js for a light touch of interactivity where needed is a killer combination. Claude is very good at it, and with the right instructions actually keeps things concise and modular without spilling into spaghettification. I would recommend this as a first option to anyone looking to spin up a new web stack if you’re not absolutely sure you need the heavyweight of React.
I use the same stack. Single codebase, no build step. It’s so refreshing.
I've built a couple non-trivial, cross-platform apps with alpine.js and htmx with tauri as the sole backend with ipc. Claude is very good at full-stack with the tauri mcp driving harder e2e tests that leverage platform APIs.
I had a great role for just over a year building with django/postgres/htmx! i ended up using lightweight web components for my js glue code (as well as shoelace, now web awesome, components). once a few patterns were established, claude code was extremely proficient. now getting back into frontend framework world i'm realizing what a lightweight, enjoyable experience that was...
Strongly disagree on Django, unless it is something you are already at a senior level at pre-AI. I've had the displeasure of cleaning up multiple Django backends lately, and the combination of standard fail-open, weak validation, mediocre ORM, and bad testing frameworks lead to issues I've simply not had when managing agents doing Go, Java or Rust.

Go probably wins as a matter of trade-offs for pure productivity (speed, reliability, ease of refactor), but Java Spring Boot works excellently if you're willing to take the plunge (pretty steep learning curve), and the ecosystem really lends itself to building more complex stuff that holds for a while.

Rust is fun because it is an amazing multi-faceted language where agents will constantly deliver you working yet surprising implementations you'll have to quintuple check, and sometimes spend and afternoon trying to grok. The outcome is also perfectly usable, fast, and reliable, but developer velocity is lower.

Feeling this pain with Django right now. I don't even have to deal with a database in this app (it's just a BFF) and it's unnecessarily complex. Right now I'm ripping out the React frontend and replacing it with htmx. Using Pydantic for form validation (will write a custom validator if I ever need multiple values from form fields). And using htpy instead of a templating engine. So far so good. Let's see how it goes.
Yes, it assumes senior level at pre AI, but this will apply to pretty much anything. Java in particular.

Keep in mind of course that a lot of so called seniors were also producing mediocre code <insert framework or language here>. It doesn't change the point though.

100%

Not a fan of java/spring boot, although kotlin is nice.

Currently all of my greenfield work projects are using alpine and tauri (rust). It's more complex than the django web apps, but already seeing strong performance gains and better runtime guarantees.

I call it the GOSH stack (Go Sqlite Htmx) but HUGS is good too.
Or HAGS (HTMX, AlpineJS, Go, SQLite).
Someone asked about using htmx with php on reddit, and was recommended a HAUW (Hypermedia on Anything You Want) stack.
DASH.

DynamoDB, API Gateway, Step Functions and HTMX.

I also like the same stack, as it plays very well with a terminal focus workflow.
If you want a prototype fast, don't you use an LLM?

And if you do, why start with a simpler framework?

LLMs are fantastic at HTMX+Go
i use this stack quite a bit too. i made the claude do some load bearing 360 backflips, gate and seam a whole buncha smoking guns, and bolt go-starlark on top of this so i can just declare little web apps like its streamlit but it doesn't feel sucky like streamlit. i get to just write little blurbs of python-looking code and i get these fully reactive tools. probably my favorite and most used abstraction that came from too much wine and lazy boredom. also built stupid simple framework ish coverage for connections and duckdb and a few other things.
Go backend with Starlark for dynamic behavior is a great combination. I have been building https://github.com/openrundev/openrun with that approach, mainly for teams to deploy internal tools. It can be used to deploy any containerized application. The management UI for OpenRun is built with the Hypermedia approach https://utils.demo.clace.io/console/
I was unfamiliar with this stack and had an AI conversation about it to figure out what it meant, if I'm correct (not likely), this openrun+Go stack has a PHP FastCGI analogy:

Your web app can be HTML templated pages, with HTMX client interactivity and server interactivity provided by ~~PHP~~ Starlark, which does not have full OS access, but only what ~~CGI~~ OpenRun exposes as possible functionality, all of which happens in-process and per web route.

That's a fascinating new combination!

Yes, OpenRun can deploy any containerized application and act like a proxy for the upstream application, no Starlark or any transformation in OpenRun. If the upstream container is serving JSON APIs, OpenRun can also be used to implement a Hypermedia based web app on top, using Go HTML templates and Starlark as the glue code.

The advantage is that you get the performance of Go while being able to hot reload applications and install new application dynamically without a process restart. I think of it as an application server for containerized applications.

I go with rust/datastar.

I actually think JSX is better, but I am bored of it because we don't need state in JS no more.

Same here team rust/datastar though I still can't decide between minijinja and maud for templating.
I just go with Claude recommends at this point.

:/

How are you using dbos with SQLite? The docs say its a Postgres library
What happened to version 3?
[delayed]
Carson promised they'd never do a version 3...but he never said they couldn't do a version 4.
As a joke. Back when 2 came out, they promised there would never be a version 3. I.e., no breaking changes. Then they realized they did need to make a breaking change, so the only way to be true to their promise was to skip version 3.
This can be a good summary of htmx overall; a confident solution based on half understanding of the problem domain.
You’ve misunderstood the reason for v4; see https://news.ycombinator.com/item?id=49493929
No, you misunderstand what is going on. htmx is an exercising in learning web development by someone who didn’t follow 2 decades of web development progress.

He is catching up though, now approaching the early 2010s jQuery (moxi) and backbonejs era with fixiproject.org

Htmx is a direct descendant of Intercooler.js, which has been around since circa 2013, more than a decade. Intercooler still exists and is used in production, and you can clearly see that it works almost exactly the same way as htmx does today, it just bundles jQuery together.

The creator has been working on these ideas for a long time, but the core idea–swapping HTML from the server into the DOM–has been constant throughout.

It's exactly because he followed the past two decades of web dev that htmx avoids almost everything about it. Fixi and htmx extensions follow the 80/20 principle and can work by just being dropped in with a script tag. You don't need an elaborate npm setup, same as everything else in the htmx ecosystem.

The creator is stuck in 2012 and so on as I said. If you look at project fixie, the reason htmx 4 exists, it shows how the 80/20 is an incomplete idea for something as general as a web framework. 80/20 might work for your specific use case, but as a general notion, it either gets built on reasonable constructs or grows into a Frankenstein. Htmx approach is a mirror of yaml in my ways. In denial of what it is trying to be and so turns into complete monster.
Are you sock-puppeting two different user accounts in this discussion? https://news.ycombinator.com/user?id=asdfsa32

I didn’t realize that was allowed.

What do HN mods think of that, dang?

Maybe it is just that people see the same problem when it is obvious?
Haha, good one. You said ‘the creator is stuck in 2012 as I said’. Except that was said by a different user account ;-)
> now approaching the early 2010s
Correction: they didn’t ‘realize they needed to make a breaking change’, they got excited by the improvements they could unlock by using the Fetch API and wanted to make a breaking change.

The upgrade is completely voluntary: it won’t even be set as the default version in npm till next year, and there are no known security issues that would force anyone to upgrade. People happy with v2 can just stay on it for the foreseeable future.

Exponential versioning. Next major would be 8.
Congratulations on the release!

I have enjoyed working with htmx very much.

I'm still skeptical of htmx being the foundation for a 100-year web service, but I think this is a really worthwhile goal. I'll add that aside from static HTML, I don't have a better option.

Thinking about how well your web architecture will hold up for 100 years (or even 10 years) is bikeshedding and a pointless exercise.

Perfect is the enemy of good and all that. If something is useful, it’s possible to fix the architecture later. The only counter-example I know of has been GitHub, which was built on RoR and so poorly planned that it’s still biting Microsoft on a regular basis.

Sure but it's a spectrum. Surely some choices will age much more poorly than others.
100 years, sure, but 10 years? Definitely not bike shedding, I'd hope your website can stay up for 10 years at least.
You don’t need to agonize over a library choice to know that your site will be up for 10 years. If it outputs web standards, the browser engines will make sure it is.
Yes, unless you choose wrong, which is what we're talking about, as sometimes choosing right is worth the bike shedding.
> RoR and so poorly planned that it’s still biting Microsoft on a regular basis.

Disagree. The RoR front end was way more stable and usable than the mess they have made now.

The issues are with the Ruby backend.

RoR is the only framework I’ve ever heard of being so bad that it killed startups. I personally know of two that were doing well, but RoR was so brittle and slow that they couldn’t hire enough to keep it going. This is compounded by Ruby devs being pretty rare.

> RoR was so brittle and slow that they couldn’t hire enough to keep it going.

This is such a "poor carpenter blaming his tools" take.

RoR isn't holding you back from writing performant, high-quality code. However, letting inexperienced developers run wild without supervision does end up with a codebase committing most of the deadly sins of software: (1) proliferation of competing patterns (2) proliferation of competing third-party libraries, leading to more #1, (3) inadequate test suite, and (4) an app that serves up so many 500 errors that you can't tell which are new and/or which indicate a problem. #4 is definitely more common in untyped languages, since that whole class of bugs can't be caught at compile time.

By the time a lot of these "startups" get to the mature state they have like a 7-year-old codebase that is beyond help. But you can use Ruby and Rails responsibly. I've seen it done. Usually all that's needed is to apply yourself to understanding how to cache, and then, identifying the key expensive high-traffic endpoints and converting them from ActiveRecord N+1 messes into single-query eager-loaded beasts, sometimes skipping ActiveRecord's object instantiation. Sounds scary, but it's inevitable for a popular application on any language/framework that you'll need to go beyond the tutorial-grade code for key transactions. This kind of thing is what Staff Engineers are for.

Thinking about whether a web architecture will hold up for 100 years is bikeshedding, is bikeshedding as well
Only if you don’t know what bikeshedding is and want to broaden the definition so much that it’s meaningless.

This is Hacker News. This is exactly the place to tell people they’re overanalyzing and should just build something.

calling thinking about bikeshedding, bikeshedding, is peak bikeshedding.
Is it though? It doesn't need to be perfect to last. Good engineering practices certainly embrace timeless concepts. I understand if you are working in a feature-factory, but creating inheritable code should be given more consideration however much programmers dislike thinking about things like ROI.
I've always been a fan and supporter of HTMX, but lately I've wondered how beneficial it is now that LLMs can generate JavaScript for us. HTMX was especially useful when I wrote JavaScript by hand because I appreciated its higher level of abstraction and simplicity. I also struggled to make it work with AlpineJS and eventually had to resort to plain JavaScript, which gave me finer control. Normally, switching to JavaScript would have been a hassle but since an LLM can produce it as easily as any other text, I’m less clear on HTMX’s advantage. I’ve been getting along fine without it. If computers didn’t write code for us, I would still choose HTMX, but now I find it hard to justify the trade‑off.
the browser is and always will be built for dealing with SSR HTML
IMO current browsers are more like an operating system designed for progressive loading of apps.

That doesn't mean do dumb / complicated / bloated stuff for no reason. If the best thing for your users is static html, use that.

That's like rejecting video games because the CRT was built for displaying live TV streams sent over the public airwaves.
There's definitely something to this: I expect LLMs to hurt the adoption of htmx and most smaller web libraries. That's fine: it's always been a labor of love and is BSD 0, so I hope the ideas are interesting and that the people who decide to use it enjoy it.
I think, at least for the next few years, certain preferences and consensuses were accidentally embedded in the models to your benefit.

They love htmx! Claude will independently suggest using it instead of more general js frameworks for smaller projects. A gpt model told me, and I wrote this down because it was striking, "htmx won the argument it was making."

It's the same thing with rust. I'm an ocaml expert and ocaml genuinely fits a lot of the problems I work with better regardless of that. But because of when the models were trained and what they were trained on, a certain sort of alt-consensus opinion is frozen into them, and it believes rust is a better choice for nearly everything!

I think you're good for the next few years at least. It's an open question what happens after that dead internet theory recursive loop of llms trained on llm output etc so who knows you might be good forever.

I agree with this and I'd also say - I've been vibe coding in OCaml since before the training data was good.

All the stuff I lost in training data I gained back in having great compiler feedback.

I don't think agents are nearly as restricted by language or training data as we think.

We will see. Changing things around a bit (especially flipping attribute inheritance to explicit by default) may confuse a lot of models. Oh well, it's the right thing ¯\_(ツ)_/¯

Thank you for your kind words!

Please don’t misunderstand my comment, I wasn't trying to diminish the brilliant work you’ve done on HTMX, which I’ve personally benefited from. I could have probably worded it better than I did. I'm also not saying you _did_ misunderstand it, only asking that you please don't. I was just sharing an observation that I realize is not everyone’s experience. I’m still a fan + supporter, even though I now reach for JS more often because the pain of writing it has largely disappeared. I’m still not a fan of it by any means, but LLMs have been a major mitigator. I'm always happy to see the HTMX updates when they come out.
It may do the opposite! My sense of LLMs is that simplicity beats training.

If you have 1/5th the context to consume, that's going to generate better code than the comparable typescript, even if the language is an esoteric one.

I've yet to see anyone try to finetune one of these qwen models on a specific framework, but if you guys care, qwen3.5-35B-A3B is rather fast and reliable for a lot of what I'd call "copy/paste" task and might be worth while to see if a fine tune could excel at HTMX universe tasks.
I mean, htmx and JS glue logic is truly the differentiator now because LLM's do it so well. It's absolutely the way to go.
It's hard to answer because I don't personally use HTMX as a way to avoid writing Javascript. HTMX is a Javascript library. And I don't know if I even find using HTMX easier/harder than writing JS, because they are fundamentally different approaches to building apps. It really just depends on what I'm trying to do.

One is a programming language used for writing client side code, and the other is a minimal library that makes server sent documents more ergonomic. Yes, it's a JS library with a few nice conveniences, but the main draw of HTMX encourages a completely different app architecture than what the average dev would arrive at with plain JS.

They're just two different things to me, and so it seems irrelevant if LLMs can help you write one faster. If you're only using HTMX to avoid JS, I don't see how LLMs discourage you from doing that. Wouldn't it be better to vibecode something you have an easier time reading than vibecode a language you don't even understand enough to use? What are you going to do if it blows up?

The last time I made a website about a year ago, Gemini used HTMX. It was actually my first experience with HTMX, so in a way, LLMs led to me adopting it. :D
The main issue HTMX address is reducing complexity and LLMs doesn't solve it.

I'd expect it to be the other way around: LLMs will increase HTMX(and similar solutions) adoption because alongside of being excellent at writing HTMX there are also excellent writing web components.

React, vue and similar still have their use case, but htmx + web components can drive you really far.

I recently used Alpine.js (client-side, I know), and, as a person that does backend most of the time and is not super knowledgeable in frontend, I was amazed.

I think that, combined with Htmx it can be a really powerful thing for lots of deployments (basically most things that do not need API/Json talking).

By default LLMs will start creating a tangled hard to test mess of javascript. But if you ask them to do TDD they will, and if you give them access to Playwright and have them write playwright tests this can all work.

The advantage for the LLM is the same for humans. With the right abstractions, code can be written quicker and more robustly.

To get more hands off with LLMS you really want to have a lot of engineering rigor. A big part of that is a focus on tests. If your abstractions make testing easier, your results will be a lot better. For Javascript the more you can test logic without DOM manipulation and without playwright tests, the better.

I found LLMs to be default to and be pretty good at working with HTMX, but not great (mostly lots of state synchronization issues). The focus on DOM markup of HTMX does not lend itself well to simplifying testing. I don't claim to be an expert at HTMX, but I don't see a separate section on testing in their documentation.

I am trying out the foldkit framework because it makes a lot more testable outside the DOM. Its probably too heavy weight for most humans (and for simple apps- it only seems appropriate for client-side apps), but I will see how well LLMs can work with it.

(comment deleted)
> now that LLMs can generate JavaScript for us.

You mean generate unmaintainable JavaScript for us.

Depends how you set it up. Like any other project I guess. Funny enough, if you are able to produce maintainable code with an llm you could aswell lead a team of humans. LLMs shift your focus on project management and architectural choices.

I let the llm write components which are independent to each other. This works great and keeps everything clean. The times that llm would only generate unmaintainable code are long gone with OPUS, Fable and sol 5.6

> LLMs shift your focus on project management and architectural choices.

And a comfortable sense of short term productivity that make you tend to ignore the middle and long-term trade-offs.

It is unmaintainable unless you create a very modular architecture (read here: modules written by LLMs that will not get in the middle of others bc of their extra fat).

And even with a modular architecture, I am not convinced.

However I had a couple of success stories in the generative area, maybe bc I am so stupid that I do not detect the problems: SQL query/code generation and frontend Alpine.js-based for a small website.

Also good for one-off scripts.

But when it is about a project where you iterate for weeks, things get out of hand.

As a powerful search engine, exploring alternative solutions or doing code review, great. But the reason is not that it is extremely good at it. It is bc it is extremely fast at it and it is easy to recognize bogus stuff if you have been doing this for many years, so it saves you time. But still gives you inaccurate stuff.

Not my experience. I have large production apps that I'm able to maintain just fine with thousands of lines of JS.
Out of curiosity, are you defaulting to vanilla js in your agentic dev stack? Or do you have the llm use a framework like react?
Does HTMX not have some performance gain over JS frameworks? (Never used it before)
I'm not very familiar with htmx but at first glance it seems similar to Angular. I thought Angular lost favor because of all the extra attributes and boilerplate. What makes htmx different?
HTMX is a layer on top of server-side rendered HTML that gives you near-SPA-levels of interactivity without having to build a standalone SPA.
HTMX is a polar opposite to Angular in terms of complexity, for one.
How did you understand Angular to be similar to htmx? They are nearly polar opposites. Can achieve the same though.
Before vibe coding was a thing, HTMX made it super easy for me to implement Ajax like features. It was the most approachable library I've ever seen, and I'll always be grateful for it.
What about vibe coding makes HTMX something that you speak about in the past tense? Are you just generating frontends in vanilla JS now?
For me, I know backend development really well, and HTML/CSS passably. HTMX has been much lower friction for me than learning JS frameworks, which tbh I didn't really enjoy, and they were constantly changing. But now, I had mostly leave the JS to Claude, and the HTMX draw has diminished a bit.
It's day job tasks/database CRUD, so I tell the LLM what I need. I used to write all my work apps in plain jane PHP/MySQL and I use that as a guide for the LLM, as in use this app as a guide on how I want things. The bonus of using plain PHP/MySQL/PDO is that the apps are small, so no issues with context windows or using complex frameworks.
> `hx-alpine-compat` - smooths over compatibility issues between htmx and Alpine.js

I looked into this when I tried HTMX 4 on a project earlier this year. I actually found that https://alpine-ajax.js.org/ was smaller than HTMX while providing all the features I needed. It is one of the sanctioned projects they link to so I felt good using it

great library, we link to it on our alternatives page
Carson! FYI:

"let us rething how extensions can and should work,"

I think you meant rethink here.

I'm glad I'm not using this. It's the opposite of how I like to build web apps (which is either SSR with tiny bits of JS on top that I like to use Alpine.js for; or a JS-app that I like to use Elm for as life is too short runtime errors).

Nonetheless I hope all who do use Htmx, enjoy using it.

I would classify HTMX as a different style of "SSR with tiny bits of JS on top." In fact, I would argue it is a more "pure" form of SSR-based interactive web development than an Alpine.js-style approach (I am not making any value judgment here).
You can use ReScript with Htmx (or anything else) and get no runtime errors. It has a sound type system, great language.
I like ReScript/Reason. But it's no were close to Elm.

Htmx is the opposite of what I like. I will not use it ever for something serious.

HTMX is designed for enhancing web pages, not making full apps on web platform as Elm is. They have different use cases.
The anchor links in the "on this page section" don't work for me (Android Firefox/Chrome).
[dead]
It seems this version is also adding hx-live. Anyone used it before? How does is compare against Alpine.js?
I really like htmx, and intercooler.js before it. It's been a while since I tried to convince a co-worker to use it, it might be time to try again. Either way I can't wait to try out the new version.

Full Disclosure, I am CEO of HTMX

Given the number of people claiming to be CEO of HTMX, I have to ask: what’s the joke I’m missing?
There is something here, but I am not sure if it's the whole story: https://htmx.org/essays/lore/
One of the things that is great about htmx (besides being the best library) is the lack of modern silicon valley corpo communication. It has the slightly unhinged feel of a nerd that spent too much time on Newgrounds or 4chan or something awful. Which is how the internet aught to be.
> unhinged

Please take a look at the official documentation for htmx, which specifically clarifies that the author owns many hinges.

(comment deleted)
Thanks for sharing that.

It's just about all Twitter links, where's XCancel/Nitter when you need 'em :(

This is a social media presence worth striving for.

> You can put it on your LinkedIn, because it’s true.

I only take LinkedIn seriously under extreme protest, so this is extremely tempting.

(comment deleted)
> I really like htmx

> Full Disclosure, I am CEO of HTMX

i think you've found a good job!

(comment deleted)
As a former CEO of HTMX I thank you for your service as the current CEO of HTMX.
Could local-first HTMX ever become part of the standard library? So it could be used easily with a simple static web host?
Can htmx render a regular scrolling dropdown list without resetting scroll position each time style changes?

No

Can htmx render a style change to a textarea with user selected text without clearing the selection?

No

Because it’s not ready for production.

And instead of fixing the fundamental flaw with swapping chunk of HTML out to make it a production grade UI library, instead of that - the mods will just downvote/dead/flag this post and make it invisible.

Instead of making something people want, a handful of people on this site repeatedly ram their shit technology that nobody wants nor can even use in a real environment like htmx, atproto, tangled, Kagi, down the hapless throats of their pathetic readers daily.

Instead of taking the advice and improving or make it better they just block the criticism and continue advertising.

HN is a low IQ cesspool ran by stupid semi-technical fuckheads.

"On this page" anchor navigation doesn't work for me :( Mobile Safari
Cool to see htmx alive and evolving. This update was long overdue. The change to attribute inheritance seems a bit debatable to me but maybe it'll actually make the code easier to understand
Can we get a Mitsubishi Delica for the next announcement? Thanks.
Cheers! We've been running the various betas in production for a couple of months now. For our Rails app we replaced most of our Hotwired/Turbo with HTMX. For me at least, HTMX just makes more sense: you control the flow of content from the client, not from the server as you do with Turbo.

For pushing updates, we use ActionCable, but we do it in a different way from what we used to do with Turbo Streams: when a record is updated, instead of sending HTML from the server to the client with instructions on what to replace, we only send a small JSON payload with the ID of the element that was updated. On the client side, an event is dispatched that any DOM element with <hx-trigger="<resource-id>:updated from:body"> will trigger on. For the rest it's just basic HTMX, only the trigger is "custom".

i'd avoid imo, i'm an intern that got fired from htmx and the ceo was a jerk
You can become the CEO of HTML instead!