recursivedoubts a day ago

My comment from the other thread:

The CEO of gumroad mentioned on twitter that he had tried out htmx for a project but decided to go with NextJS instead. I asked him if he was willing to write up his experience and he graciously agreed to do so. I have been looking for a thoughtful negative experience with htmx to host on the htmx website and I am very thankful he was willing to put in the work to produce one.

  • hencq a day ago

    Your attitude to call out where htmx might not be the best solution, makes me respect the project even more. It's refreshing to see this compared to lots of other projects that always seem to claim to be the best solution for everything.

    I'm curious in particular about the call out around drag-and-drop. Is that something you agree with? Is drag and drop difficult with htmx and if so, is that something you plan on tackling?

    • recursivedoubts a day ago

      There is an htmx demo on drag-and-drop (in the reorder sense) using Sortable.js here:

      https://htmx.org/examples/sortable/

      Like most of the examples on the htmx site it is pretty bare bones (we keep it that way to focus on the concepts) but it's a reasonable demonstration of the integration. Whether that is good enough of course depends on your use case

      If you want an integrated and polished ecosystem that's something htmx isn't going to provide: it's a library focused (mainly) on one thing: generalizing hypermedia controls. So, when you want client side functionality like this, you are going to have to glue things together a bit. I completely understand the desire of having an integrated ecosystem to avoid doing that.

      • spirobelv2 a day ago

        after having used both: sortablejs is better than reactdnd.

        that being said: htmx makes it too hard to quickly add a fat frontend to a page when necessary. The points about the react ecosystem are very valid, even if drag and drop is an exception. The network effects of react and others are hard to beat. Its probably even more npm as a whole than just react.

        wrote myself a framework with bun that solves this for me: https://github.com/spirobel/mininext

        still get the pure html+css feeling like with htmx, but can throw in a big frontend when needed.

        https://x.com/spirobel/status/1827231794934247674?t=moRzsWIP...

      • hencq a day ago

        Thanks! That actually seems very smooth. Trying out htmx has been high on my list for a while when I finally get time to do a little personal side project. Real life keeps getting in the way, but this is a good nudge. The appealing thing about htmx to me is that it seems like it should be very easy to keep everything in your head.

      • mthoms a day ago

        Does it support nesting?

        • recursivedoubts a day ago

          here htmx is integrating with Sortable.js for drag and drop functionality via events, so whatever Sortable can do, htmx can respond to:

          http://sortablejs.github.io/Sortable/

          • mthoms 5 hours ago

            I'm kinda familiar with Sortable, but haven't looked at it in the past several years. I'll have a look again, thanks!

    • DevX101 a day ago

      I've never seen a project highlight a negative use case in detail. This is a first.

      • dannyobrien a day ago

        Me neither. In the 2000s, Tor did something similar (a "what Tor can't do" page) and prominent linked to it on the front page, which definitely improved the project's reputation with a coterie of infosec professionals.

        It might not have helped with wider adoption though. People would send me the link saying "Look at all of these bad things about Tor", and it would be links to Tor explanatory pages.

        It was around that time that I realised that when trying to give people an intuition for what software many Internet professionals trust, the list of "green flags" I identified was, in fact, the exact opposite of what the majority might guess as being good signs. "Large list of attractive sounding features" vs "Lists problems with the tool as prominently as benefits" ; "Sold and marketed by a large well-known company" vs "Developed by a small, volunteer team" ; "Free to download" vs "Costs money"; "Modern, professionally-designed website" vs "Looks like it was built in 1997", etc, etc.

      • cxr a day ago

        Which is exactly what shouldn't happen. Every serious proposal/RFC needs to have an honest stab at what the competition looks like and why it won't work there.

        > I often see people believe in their solution and think theirs are better than the others. They defend their cases without having an exact reason. These situations often create long and meaningless discussions that go nowhere.

        From <https://candost.blog/how-to-stop-endless-discussions/>. (Comments: <https://news.ycombinator.com/item?id=25622149>)

      • giraffe_lady a day ago

        It's not quite the same but SQLite has a page where they clearly present its limitations and how to identify the situations where you should choose something else.

        https://www.sqlite.org/whentouse.html

    • x0x0 a day ago

      I've used hotwire a bunch, and with minor differences, I think the list of things that htmx is not good for is spot on.

      I don't think I'm explaining this well, but maybe this will help someone: Hotwire / htmx are about server-side rendering and making that work more smoothly with the client. eg fewer page navigations, more rapid update of the client, etc. But it's still, through and through, server render with server state.

      It works well as long as the server is always the source of truth. The things that it isn't good at, such as drag and drop or complex, multi-state forms on the client side, are basically because you temporarily have a split source of truth: the client is the source of truth with complex state.

      That said, my strong suggestion would be to use Hotwire or htmx for 95% of your project even if the main interaction loop is done in react. Your app will still likely have tons of crud around user management, settings / config, onboarding, etc. You can make all that work more nicely.

      edit: in case it wasn't clear: for the things that are in the hotwire/htmx wheelhouse, the tech works really well. It's a fantastic improvement.

      • rikthevik a day ago

        > 95% of your project even if the main interaction loop is done in react

        The trick is to be very honest with yourself (and team) about how much complex front-end UI the application actually _requires_. Using React where it isn't necessary is very expensive in the long run. The older I get, the more the grug brained developer makes sense.

        • Aeolun a day ago

          The more I work with React, the more I realize I just don’t have the motivation to learn and keep up with more than one way of doing front-end. Using it everywhere is working out pretty well for me.

          Sometimes it’s not the best choice for the app I’m working on, but it’s always thr best choice for me.

    • BestHackerOnHN a day ago

      > It's refreshing to see this compared to lots of other projects that always seem to claim to be the best solution for everything.

      Agreed 100%, hencq!

    • Freedom2 a day ago

      Agreed. Too often you'll see HN's claim that PHP / Java / MySQL are the best choices for everything, where often times they are blind to specific problems and use-cases that other developers are trying to solve.

      • ksec a day ago

        >Too often you'll see HN's claim that PHP / Java / MySQL are the best choices for everything.

        Either this is missing /s or this is trolling, right?

        • freedomben a day ago

          Indeed. Even if hn were a monolith and all had the same opinion, it certainly would not be a pro PHP, Java and MySQL position.

  • ksec a day ago

    >The CEO of gumroad mentioned on twitter...

    He also mentioned Rails in itself is a technical debt. And when asked about it all he said was React is so much better. As if you cant use React with Rails.

    As for the article, I dont see it as a negative experience for HTMX. As soon as he mentions drag and drop, real time collaboration, I will go on to say may be even toying with HTMX was wrong in the first place?

    I am also not sure what the screenshot was trying to show.

    But all of that, I think it is a great pieces to be on HTMX website.

    • aidenn0 a day ago

      > He also mentioned Rails in itself is a technical debt. And when asked about it all he said was React is so much better. As if you cant use React with Rails.

      Perhaps he meant Next.js? TFA mentions they are using Next.js

    • nine_k a day ago

      I would say React is (so much) better because it's functional, immutable, one-way, almost declarative. In comparison, stuff like ActiveRecord is very imperative, shared-mutable-state thing. For React-based code you usually take a language with a rich static type system (TS); Rails with its design-by-contract struggled to provide type signatures, last time I checked.

      One of them is much easier to reason about than the other, even though the other is enviably compact.

      • freedomben a day ago

        React is a client-side library. Rails is a server-side framework. I don't see how you can even really compare these apples and oranges.

        Personally, I think rails and react go together very well. For apps that need rich client-side functionality, I will do a react spa with a back end in elixir/ Phoenix (which is very similar to rails).

        For apps that don't, just doing server-side rendering is plenty sufficient and is my preference.

        • nine_k a day ago

          I'm only comparing development experience and, so to say, the conceptual environment.

          Verily, Rails can be a pretty good and compact way to serve backend APIs for a React-based frontend. But the API boundary is the "narrow waist", its relative neutrality allows to switch backend and frontend implementations easily, or even to mix them. I've seen a React frontend seamlessly consuming APIs served by Python and Rust services, and it's hardly possible to spot which endpoint is served by what in the frontend code.

          Unlike on the frontend, FP approaches on the backend are not (as) widespread. Established imperative frameworks (Django, Rails, Spring Boot, etc) are still the huge majority.

  • pseudosavant a day ago

    Much respect for showing where htmx might not be as suitable as other tools. In my mind htmx is more a replacement for jQuery than React. htmx and jQuery both augment documents with interaction. React tries to be the entire document. Different tools for different jobs.

    • gloosx 19 hours ago

      htmx is really just html on steroids, it's not a replacement for any JS library

  • kunley a day ago

    Very useful explanation, because at first it seemed unusual to see it on htmx.org, but well, different projects have different needs.

    • ensignavenger a day ago

      HTMX has posted links to negative articles before, but I am not aware of any as thoughtful as this one. So it wasn't all that surprising for me that they would share this. That they went out of their way to solicit it is extraordinary, though!

  • n3storm a day ago

    thank you so much, I am a user since intercooler.

  • tuyiown a day ago

    This is a great initiative. Too much people with little experience with non trivial web are vocal about htmx, and it's not a good thing for the projet.

  • tomcam a day ago

    > I have been looking for a thoughtful negative experience with htmx to host on the htmx website

    Mad props, my man. I love that attitude. To me it's making the world a better place in a tangible way.

  • dakiol a day ago

    Is it just me or the article smells like AI-generated?

    • rmbyrro a day ago

      Your AI smell sensors need more training data to reduce hallucinations.

      • deciduously a day ago

        It's a safe comment for people, generally, to call out any snippet of text as AI. If they're right, they get to feel smug about being right, and if they're wrong, they get to feel smug about telling someone their thing was bad and they should feel bad. I'm no fan of AI slop either, but calling out text for which you have no way to determine the provenance as auto-generated is, in my opinion, also "slop".

    • wild_egg a day ago

      You can see the evolution of the article in the PR on GitHub. Seems genuine.

      • dakiol 7 hours ago

        Good one. Missed it.

ketzo a day ago

> AI and Tooling Support: It’s worth noting that AI tools are intimately familiar with Next.js and not so much with htmx

This is stated as a very matter-of-fact downside, but this is a pretty crazy portent for the future of dev tools / libraries / frameworks / languages.

Predictions:

- LLMs will further amplify the existing winner-take-all, first-mover nature of dev tools

- LLMs will encourage usage of open-source tools because they will be so much more useful with more/better training data

  • markmark a day ago

    The AI and Tooling support point is really just an extension of the Community and Ecosystem point. Even before LLMs React had an advantage in that every question you had was probably already on StackOverflow and there are mature React libraries for almost everything. Now some people might use an LLM to answer the question they previously would have gone to StackOverflow for but the outcome is the same: there are advantages to using what other people are using.

    • mvkel 19 hours ago

      Exactly this. The language with the biggest community wins, even if it may be technically inferior

  • alexpetros a day ago

    > LLMs will further amplify the existing winner-take-all, first-mover nature of dev tools

    This will be true for people who rely on LLMs to code, which I strongly suggest is not a great long-term bet for a software engineering career.

    • MetaWhirledPeas a day ago

      Yes. And no matter how good LLMs get at coding there will always be a crowd intentionally doing it themselves, especially in the open source arena, if only just to keep the joy alive.

      • steve_adams_86 16 hours ago

        I fully expect to keep writing code for decades, just like I still use a hand plane and enjoy growing plants to eat.

        I know other methods are more efficient. But I’m here to experience life. I want to do the hard things. I want to be uncertain, confused, to make mistakes, and to learn.

        AI is a neat tool in limited scopes. Every time I use it though, I feel like I didn’t get the full experience. I’m acutely aware of all the rabbit holes I missed, or the tiny details I’d notice along the way and helpfully remember 10 years later. For everything it adds, it takes at least as much away from where I’m looking. And I like those parts.

    • edanm 19 hours ago

      I think ~0% of people will be coding without LLMs in some form in a few years. How many people are still coding in assembler?

      • bccdee 6 hours ago

        Compilers actually output the binary that you ask them to, though.

        If all a compiler did was spit out a slurry of buggy assembly that misunderstands its context and has to be carefully scrutinized for errors, I would still be writing assembly the old fashioned way.

      • anonzzzies 17 hours ago

        The LLMs will need to get a lot better though. I see every day on reddit/X a bunch of people saying they downloaded Cursor and built a saas without ever having coded anything in their lives; the resulting code is always terrible, full with really obvious bugs and buckets of trivial security issues. All these things can be prevented, in theory, but current LLMs really don't do that at all (they aren't capable).

        • steve_adams_86 16 hours ago

          All of these SaaS products are also clones of things people have already made. If it was helping newcomers create novel things from great imaginations and curiosity, I’d be really excited about this. Instead I saw a reminder app, a todo app, a combination of these, and a voice transcription app.

          All of these have existed in huge numbers for a decade or close to it. This isn’t interesting. It wouldn’t have taken much to do this without AI if these people found motivation through some other means. Nothing notable is happening yet.

          • anonzzzies 15 hours ago

            > All of these have existed in huge numbers for a decade or close to it

            That doesn't always matter though; I saw some guy on reddit selling 1000s of subs of a server uptime page they generated with an LLM (Cursor I think it was). Most do it for the money and that is working IF you have the following somewhere.

        • robocat 6 hours ago

          > the resulting code is always terrible, full with really obvious bugs and buckets of trivial security issues

          That's pretty much the same as what you got from old school stackexchange. The LLMs are trained on poor example data (e.g. from stack exchange) and I presume it is a hard problem to filter for just the "good" training data.

          • bccdee 6 hours ago

            Stack exchange answers make up a tiny fraction of LLM training data. They've dumped the source of every open-source project on the internet into those things. They've been trained on plenty of high-quality code; the trouble is that all that can teach is imitation.

            The why behind a design decision is something an LLM can't understand simply by being fed the decisions themselves. Hence, though they often stumble into the right answer, they only ever do so because it "seems right based on context," and so they can easily apply a principle correctly one moment and then misuse it the next.

    • jimmaswell a day ago

      I still think it's a perfectly fine productivity multiplier to use as long as you still understand what you're doing.

      • alexpetros a day ago

        There's a very clear skill ceiling on the kind of code for which LLMs can serve as a productivity multiplier.

  • ryanchants a day ago

    I was considering this other day. AI tools are stuck at a particular point in time. And even training them on newer stuff, there's only so much information to train on. I've been exploring this being a _good_ thing. In software we spend so much time chasing the latest tooling, language features, frameworks, etc. Maybe it'll be a positive that it all stagnates a bit and we just use the tools we have to get work done instead of creating new hammers every 6 months.

    • breuleux a day ago

      It would be nice if some AI tools could be developed to actually evaluate new libraries and frameworks. For instance, if there are already 10 libraries to do something and I develop a new one that's objectively faster than all of them (true story), could some AI do the work of installing and benchmarking it and incorporate the results in its knowledge base? And periodically update it? Is there any way to leverage AI for discovery of solid code? I suspect this is beyond current capabilities, but one can dream.

    • treyd a day ago

      The problem is that for most domains our hammers are still pretty bad.

      • mattgreenrocks a day ago

        Agree. A lot of the most popular libraries/frameworks are not necessarily the best. Removing more fitness checks will only worsen this problem.

  • SrslyJosh a day ago

    If your devs can't work without something writing their code for them, why are you hiring them?

    • johannes1234321 a day ago

      It's not about "being able" it is about being efficient. There are many cases where current AI can provide boilerplate and good examples for doing something specific, which eases things a lot.

      There is a lot, of course, one can't take 1:1 into the final product, but it helps to find the right libraries, helps to find patterns, the right parts/functions to use where verification in the applicable documentation or source is a lot simpler than finding it in the docs to begin with.

      Using it as a tool, while not a source of truth can be good.

      And don't get me started about writing all the boilerplate which sometimes is needed, which is too complex for a simple editor shortcut, but too tedious for me as a human. That I review and fix a lot faster than create by hand.

    • Shawnecy a day ago

      I don't think it's so split between they can and can't. It's probably more about how it impacts velocity.

    • tom85 a day ago

      Maybe they are just faster with AI.

    • cheema33 a day ago

      > If your devs can't work without something writing their code for them, why are you hiring them?

      I am currently in the process of hiring a backend engineer. Anybody who does not use AI to aid development work gets an automatic disqualification. In my experience, a good engineer using AI tools will run circles around a good engineer not using AI tools.

      • necovek a day ago

        This is very much like saying "good engineer using StackOverflow will run circles around a good engineer who isn't".

        AI does help an engineer who embarks on a new voyage through unfamiliar APIs to guide them with usage patterns, but some people become much more efficient by going through the library docs.

        Typing out the code is the smallest part of a "good engineer's" job (and even so, having to adapt most of AI generated code is slower than typing it out yourself once you do understand the APIs).

        I do think it might work well for MVP-style quick prototyping, but using this as an applicant qualification criteria seems so weird (even when building an MVP, you want some tension between building it quickly and building it the right way).

      • bccdee 5 hours ago

        "A good cyclist using training wheels will go circles around a good cyclist who doesn't." No, training wheels only help bad cyclists. You can't generalize that and assume they will make a good cyclist even better.

        AIs generate deeply mediocre code. This is better than anything a person who can't code on their own would produce, but an experienced developer will have to spend all their time babysitting the AI to get it to behave properly.

      • majewsky 12 hours ago

        > In my experience, a good engineer using AI tools will run circles around a good engineer not using AI tools.

        Even supposing that is true, what if you have a choice between a bad engineer who uses AI and a good engineer that won't?

  • spankalee a day ago

    I'm not too worried about this, and I think Gumroad's concern is likely overblown. I can't tell from their comment whether they actually experienced AI being bad at HTMX, or if they transitioned to talking about other resources.

    LLMs are often wildly good at being universal translators. So if they pick up general patterns and concepts in popular frameworks, and enough syntax of more niche frameworks, IME, they do a pretty great job of generating good niche framework code.

    Similar to how they can talk like a pirate about things things pirates never said in their training data.

    • rmbyrro a day ago

      In my experience, ChatGPT and Github Copilot are significantly worse at htmx compared to mainstream tech. They hallucinate A LOT more.

      • internetter a day ago

        When this happens for me with Copilot, I increase the context by opening other files, and then it works fine.

        • azemetre a day ago

          How does this work in copilot if you use the neovim plugin? Open lots of buffers?

    • ffsm8 a day ago

      > they do a pretty great job of generating good niche framework code.

      If you mean plausible looking code, yes - totally!

      If you mean actually usable code: nope. Its always riddled with imaginary library calls that don't exist.

  • killerstorm a day ago

    In my experience LLMs are good at picking up syntax from the context.

    Recently I used Cursor with an in-house developed language and it was able to get almost perfect completions upon seeing ~100 lines of context.

    Not all LLMs are equally good at this: Gemini seems to be particularly resistant to adapting to a new syntax

  • davidhaymond a day ago

    I had written a comment addressing this as well but you beat me to it. In a way it is similar to the effect StackOverflow had on popular libraries, but amplified. Even without StackOverflow, a library can do well if it has good documentation. I'm not sure if the same holds true with LLMs.

  • wodenokoto 15 hours ago

    I saw a tool that had a page dedicated to AI to read. Basically you would point your llm to that page as the initial prompt and from there could start asking questions. I thought it was an interesting idea, but apparently not interesting enough to remember who did it or even check how that page looked.

    • q0uaur 11 hours ago

      its actually a big thing i am waiting for - both websites and ai tools to agree on a way to facilitate this.

      i'm doing some game development in godot as a hobby, and the current llm's are really bad at it - very often i get code suggestions that use ancient versions of gdscript or the engine. I'd love to have a big enough context window and the tooling needed to go like "look at these godot docs for the current version: (insert link)" and then ask my questions, i think it would fix 99% of these issues. same with other less well-known tools and languages.

  • bitbasher 21 hours ago

    > LLMs will further amplify the existing winner-take-all, first-mover nature of dev tools

    Or, taken another way-- developers not using LLMs will be more likely to be first-mover winners.

  • diggan a day ago

    My prediction is that it'll be like this for a while, but as soon as tooling becomes better and the context of current APIs + local files gets better taken into consideration, this "advantage" will disappear.

  • ClassAndBurn a day ago

    This will not be true for future frameworks, though it is likely true for current ones.

    Future frameworks will be designed for AI and enablement. There will be a reversal in convention-over-configuration. Explicit referencing and configuration allow models to make fewer assumptions with less training.

    All current models are trained on good and bad examples of existing frameworks. This is why asking an LLM to “code like John Carmack” produces better code.. Future frameworks can quickly build out example documentation and provide it within the framework for AI tools to reference directly.

    • riffraff a day ago

      I don't think convention over configuration causes LLMs any problems, GitHub copilot generates code matching rails conventions quite easily for example.

      • freeone3000 a day ago

        Because there’s enough rails code in the training data to determine the proper conventions :) if you’re making something new without this glut of data, it’s going to be much more difficult for a coding assistant to match a convention it’s never seem before.

        • skydhash a day ago

          The thing is, with some elbow grease, you can write a great plugin for your preferred editor. No need for dubious LLMs results, especially when the difficult part, code intellisense, is already solved with LSP. If you're a shop that has invested in a framework, it would be cheaper and more productive.

        • riffraff 16 hours ago

          true, but the conventions it has seen are the same across all similar domains not just same framework/language, copilot "picks up" the similarity.

          What I mean is: if you name your modules consistently, say Operation::Object::Verb or Action::ObjectVerb or ObjectManager.doSomething it's really easy for the LLM to guess the next one, just as it is easy for a human.

          Add a new file actions/users/update.rb and start typing "Act" and it may guess "class Actions::Users::Update, and start to fill in the code based on nearby modules, switch to the corresponding unit test and it'll fill it in too.

          Source: we have our own in-house conventions and it seems copilot gets them right most of the time, ymmv.

    • jimbokun a day ago

      But the new frameworks will never have anywhere near the amount of training data as established frameworks.

  • jimbokun a day ago

    And:

    - developers will be incapable of writing or debugging code for development stacks or project types without LLMs trained on lots of matching examples

  • wwarner a day ago

    respectfully disagree. i think that the value of llm suggestions are driving us toward a kind of standardization that is really good. we'll all be java programmers soon!

simonw a day ago

"For example, when building complex forms with dynamic validation and conditional fields, we found ourselves writing convoluted server-side logic to handle what would be straightforward client-side operations in React."

Anakin Padme meme: "You still implement validation on the server-side as well, right.... right?"

  • skydhash a day ago

    If your web form is more complex than a paper form, maybe rethink the former? I can not think of a form that can be implemented easily in react, but is difficult in Htmx other than wishing to plug in a React-like global application state and having the job 90% done as libraries.

    • codazoda a day ago

      I just looked at this iPhone alarm clock on Gum Road, which I also read about on HN. The page describing the clock is janky. Slowly scroll down the page (with a track pad) and it will jump up and down erratically as you get past the "Add to Cart" button. Hover your mouse in one vertical position on the page and it will turn the header on and off over and over again.

      https://fatiharslan.gumroad.com/l/dieter-rams-inspired-vinta...

      Maybe I'm a Luddite but I just get the feeling that we've gone very wrong in our over-engineering.

      • AlienRobot a day ago

        It looks like the sticky header with "Add to cart" disappears when the large "add to cart" button scrolls into view, and reappears when that disappears.

  • mplewis a day ago

    Yes. But you do it once at submission, not once per page.

    • pier25 a day ago

      What's the difference?

      You can split the validation in multiple functions/modules which you can then use both at submission or per step/page.

      Also, it seems you're implying having two validation systems (on the client and server) is actually good?

      • yarg a day ago

        Yes?

        You want to validate on the client side because it reduces latency and improves responsiveness.

        You want to validate on the server side because you cannot trust the fucking client.

        • pier25 a day ago

          The point I'm contesting is that it's more difficult to validate on the server using HTMX.

          And I'm not saying you should be only validating on submit when using HTMX.

          Client exclusive validation is quite limited. Very often you need a trip to the server anyway so I don't buy the latency argument.

          Plus in most cases showing error messages too fast is terrible UX. The only exception I can think of is when checking the validity of a password.

          • throwitaway1123 a day ago

            > Plus in most cases showing error messages too fast is terrible UX.

            The solution to that problem is to debounce or throttle your error messages. That allows you to report validation issues to the user quickly, but not overwhelmingly fast, before sending a network request potentially across the Earth and back.

          • threatofrain 18 hours ago

            Showing error messages on the client side is not too fast or bad UX. Let's say someone entered an invalid credit card. Or an invalid email. Why even let that touch the backend?

            Note that frontend forms libraries allow a lot of choice over when to show error messages.

      • code_biologist a day ago

        Validating in multiple places doesn't mean 2x the code. You can validate on both the client and the server using the same code. One of the charms of server-side JS.

        • pier25 a day ago

          Yes, in some cases when you don't need a trip to the server. But you're also bloating the client for no great benefit.

mattrighetti a day ago

> I thought htmx could be a good solution to keep our front-end super light.

It seems htmx stopped working as soon as you gave up on the super light frontend part :)

You started using third party libraries to render complex UI/UX and state management.

Also, I’d like to point out that saying “it was easier to do X in React” is not really fair if you did that using third-party libraries. It’s just that somebody did it for you so that you didn’t have to.

I sympathise a lot with what’s written in the post actually but in this case I think that htmx was not a good solution from the start if you knew you needed to manage complex states and rendering.

  • WD-42 a day ago

    Exactly. I’m a big htmx fan, but I think this post displays some serious lack of technical awareness from the author. More like they wanted to try out HTMX based on vibes as opposed to its actual strengths and weaknesses which would be apparent to anyone with even a cursory knowledge of the web platform and the docs on htmx.org

    • chuckadams a day ago

      It sounds to me like they shared a learning experience.

      • appendix-rock a day ago

        Yeah, without having the foresight to know that Hacker News would come after them with very disingenuous interpretations of what they’ve shared, because HN commenters are so used to spending all their days having internet arguments that they take everyone as a personal attack.

        Nothing in this post indicates that the author doesn’t know any of what all these people in the peanut gallery are snarkily lecturing about, FFS. Working in the open must be so difficult.

  • mikeocool a day ago

    It’s kind of a nice compliment to all of the “we converted our react app to htmx and everything is so much better” articles written by people who probably shouldn’t have used react to begin with.

  • d0mine a day ago

    htmx vs. javascript reminds me behave (BDD) vs pytest tests: Gherkin language looks nice in simple cases, and it can be in principle extended for more complex cases, but pure python (pytest) becomes the more convenient the more complicated tests become (when it is necessary to manage several levels of abstractions.

  • jboogie77 a day ago

    I had the same exact thought. The project scope was not “simple” at all and I personally would have jumped straight to react for this.

  • endemic a day ago

    Yeah, it seemed from the description of desired functionality that heavy JS was going to be a necessity.

smallerfish a day ago

> For instance, implementing a drag-and-drop interface for our workflow builder proved to be a significant challenge with htmx, requiring workarounds that felt clunky compared to the smooth experience we could achieve with React libraries.

HTMX is better if you have a frontend bundle that does just enough but no more. Hook into the htmx.onLoad event and then look for markup with attributes in the content being loaded (for example, columns, cards, tasks, etc) to attach to. You can then, for example, bind sortable.js onto the rendered markup, and then wire sortable events to state updates via HTMX. Really pretty straightforward. They even have an example of exactly this in the docs: https://htmx.org/docs/#3rd-party

  • gen220 a day ago

    Yeah, I've been using HTMX with UIKit components. Having a modern, stateful, and dynamic website is definitely not incompatible with HTMX.

hakunin a day ago

Having read the article, the team just seems more experienced with frontend than backend dev. As somewhat an old school dev, I've been noticing these small fears and misunderstandings in the way FE devs think. Honestly, I believe it only takes a minor adjustment in thinking to understand how this stuff works, but I get it — many people at this point have never seen regular client/server approach in their entire careers. That said, I get the value of off-the-shelf React components, and ease of finding docs/help, so wouldn't discount that anyway.

  • prisenco a day ago

    Not just the devs, but this is a great example of UX designers "thinking in React" which I believe is the biggest barrier to adoption for htmx. We've had a generation of designers who design mobile and web very similarly, and offload the complexity of implementing that onto the developers.

    But the web is (and should be) different than mobile, whenever possible. The post says that their designs were too "generic" as a CRUD app, but is that such a bad thing? We have a universally adopted document model (a momentous task) so we could have a predictable user experience across all sites but we can't help but see that as "boring". As if there's something inherently wrong with boring.

    I understand the market pressures to have a unique and branded experience that feels like a mobile application, but imagine if designers could think in WWW as well as they've learned to think in React.

ensignavenger a day ago

I love that HTMX is posting this (and other similar things) on their site. It seems like there were a lot of legitimate reasons why HTMX alone was not a great fit.

I am not a frontend specialist, but I do find it interesting, but here are some of my thoughts on the points made:

1) Don't they have to validate forms on the backend anyway? What made it so difficult to get their backend system to communicate back up to the frontend? There are absolutly great reasons in many cases to do form validation on both the frontend and backend, so in those cases you would want more than just HTMX, but I am a little confused at the phrasing of this issue?

2) HTMX alone may sort of push apps in this direction. In some cases that is a good thing, but apparantly they decided they need to do somthing different for their customers. I hope it was a good decision for them. I do think HTMX could be used effectively to make a site much less CRUDy, but I can't really argue with their results in this specific case.

3) This is an interesting argument. I would love to know more about how this team using AI tooling and has become so dependent on it that this was a major issue for them. It also brings up an interesting question for the future- if AI dev tools become a major thing, will it raise the bar too high for new frameworks/programming languages to get enough tooling an integration for adoption? Not particularly relevant to Gumroads decision making process, but an interesting line of thought.

4) A common complaint with HTMX. I think some projects just require more than just HTMX provides. Maybe future HTMX plugins will fill in this gap though?

5) Certainly a legit issue. One reason I like Django (and even Python) is because of its deep community of integrations and add-ons.

Perhaps they would have better luck with something more full featured like https://unpoly.com/ would fit their needs better than HTMX, while still being similar to the concept?

meerab a day ago

"The development process felt natural with Next.js" - the author

What part of this ReactJS syntax you find natural? Familiar Yes, Natural NO.

  useEffect(() => {
    const timer = setInterval(() => {
      setCount((prevCount) => prevCount + 1);
    }, 1000);

    return () => clearInterval(timer);
  }, []);
  • chrisco255 a day ago

    HTMX doesn't have an elegant solution for timers and intervals, as far as I know. You would still need to awkwardly wire that up in JS with HTMX.

    • syndicatedjelly 21 hours ago

      It does, `hx-trigger` supports repeated polling on an interval and delays. The terminology is different, the ergonomics are different but the underlying concept is the same.

  • crubier 12 hours ago

    What would look natural for this use case? Can you write the code?

bumbledraven a day ago

Kudos to htmx.org for hosting this essay.

  • dannyobrien a day ago

    I really do value services/tools that explain why you shouldn't use it, as well as why you should.

  • jamal-kumar a day ago

    It's really humble and honest of them to put something like this up but in the end at least they have something to point to now if people pick it up and get mad that it doesn't meet their needs

  • Ayesh 20 hours ago

    Yeah, I expected a bit of a rant or sarcastic post, but I'm genuinely happy it's a good post with good points. I use htmx in a couple of my projects and it's been great! Posts like these give me more confident about using htmx because they seldom show where they excel and where they fall short.

dartos a day ago

His 3rd point scares me.

Imagine a world where companies pay to have their framework’s be over represented in a models training set and selling contracts off the back of that.

Like SEO but baked into developer tooling.

nop_slide a day ago

Gumroad dude seems to have some shaky reasoning for migrating at all, sounds to me a migration just for the sake of it.

https://news.ycombinator.com/item?id=41669615

  • mardifoufs a day ago

    I mean, he clarified his reasoning and it made sense. Why do you think that moving away from RoR involves shaky reasoning here?

CraigJPerry 9 hours ago

One quality of htmx that a nextjs solution won’t benefit from is stability. I have come back to an htmx project months later and been able to very quickly change a behaviour.

My experience with nextjs was a few deps now had vulns (fair enough, I’m grateful for the npm tooling that informed me) which necessitated updates which were a bit distracting and felt like yak shaving when all I wanted to do was a simple change. Even when there aren’t vulns I find it a bit lazy not to take the opportunity to evergreen the dependencies for a bit longer but that does frequently cost unwanted time.

One place where htmx feels underpowered is when you have multiple related states on a page - a table view with some summary metric fields across the top as a dashboard and some action items in a sidebar with labels exposing counts of actions. In htmx you can always resort to hxswap basically the entire view out rather than trying to surgically update each dependent target but at that point why am I using htmx, I can just round trip for a page refresh and skip the whole hassle of having a server side component strategy.

ram_rar 8 hours ago

Kudos to htmx for their refreshingly honest blog post! I hope many other open-source tools especially Databases can do similar things.

>> while it’s important to consider lightweight alternatives, it’s equally crucial to choose technologies that can grow with your project and support your long-term vision

A key takeaway that resonates with me is the importance of choosing technologies with growth potential and a thriving ecosystem – essentially making a long-term bet on their success. Too many devs get entangled with adopting shiny new things, while losing focus on delivering real value to customers.

righthand a day ago

NextJS while solves a lot of problems is one of the most irritating frameworks I’ve worked with from their odd required directory structure to their weird router shift, to the shoehorning of server side api controllers and rendering. Not to mention the specific requirements to host on Vercel.com and it’s intentionally misleading design to get you to host there.

HTMX is a breath of fresh air where 10 other framework aspects aren’t in my way. Gumroad from reading this didn’t even try to design using the htmx methodology.

  • chrisco255 a day ago

    You can self-host Next.js. There's no dependency on Vercel.

    • righthand 11 hours ago

      > and it’s intentionally misleading design to get you to host there.

    • syndicatedjelly 21 hours ago

      It is a righteous pain in the ass to do so. There is no "dependency" on Vercel, but the choice is to either build your castle in someone else kingdom, or build all the infrastructure and plumbing on your own land and "self-host".

      The point is, it could be a whole lot easier to self-host Next.js. There's a reason it's not.

zackerydev a day ago

This is a wonderful advertisement for the things that HTMX is good for and the thing it isn't.

It's obviously tongue-and-cheek but I think it makes the case well!

  • recursivedoubts a day ago

    :) this isn't tongue-in-cheek it was a real experience

    the htmx sucks essay was definitely tongue-in-cheek though (although many of the criticisms were legitimate, and even agree with this one, such as the lack of a component ecosystem!)

  • tptacek a day ago

    Why is this tongue-and-cheek? Doing this sincerely is a huge confidence builder.

  • ensignavenger a day ago

    What makes you think it was tongue-in-cheek? It sounds quite genuine to me?

    • nasretdinov a day ago

      Perhaps because of pages like this one: https://htmx.org/essays/htmx-sucks/ (note the URL)

      • ensignavenger a day ago

        Different authors and very different tones, but yeah, that essay was tongue-in-cheek, so I guess I could see why you might think that at first. I thought it might be, when I saw the title, but then I read it and realized quickly it was sincere.

binkethy 17 hours ago

Another false dichotomy is server rendered vs single page app, when the happy place is both. One builds a bundle to embed in a server rendered page, as distinct from other bundles served up with other distinct pages. Ones rollup file would have an array of build objects, input output params. The user doesn't have to wait an eternity to download a monolithic single page app bundle. One doesn't get brain damaged by trying to maintain a monolithic state in a giant monolithic blob of javascript, urls work again, routing is returned to the server, and you could use a different framework on each page if you want to, thats how little it matters at that point.

Why is no one mentioning embedding a js bundle in an htmx rendered page?

valcron1000 a day ago

> complex forms with dynamic validation and conditional fields

So 99% of the production sites out there. Good thing I didn't invest into htmx when it was the flavor of the month.

  • listenallyall 18 hours ago

    Seems to me all validation, simple or dynamic, should be handled server side. And once you implement that, server rendering of conditional fields is free.

    Feel free to pass on htmx but don't convince yourself that it can't handle "complex forms" because this particular group of knuckleheads preferred React.

PaulHoule a day ago

I have a system I’m working on that is all HTMX but I am thinking about options.

The system is a document management tool which can be configured to be a lot of different things like an image sorter or an RSS reader or an information extraction tool. The key design point is that it has to be easily configurable.

I worked on a similar system at a startup that used an SPA and boy was it a bear because changing anything involved making both front end and back end changes. We had to change directions all the time to keep up with our customers and the monolithic SPA sure slowed us down.

My current back end has a query builder that can generate queries with a complex structure as is supported by OWL DL, like

    (Temp > 95 AND Temp < 100) or (IS warm)
but with HTMX I can best use URL query parameters like

    ?temp:gt=95&temp:lt=100
that are all ANDed. I am thinking about making little applets with svelte that could do what HTMX can’t.
  • WickyNilliams 17 hours ago

    Could you not have

        ?query={entire query goes here}
    
    Rather than splitting it up into multiple query params? Feels like it's one indivisible param rather than multiple facets. You could always base64 encode if it starts getting complex
    • PaulHoule 12 hours ago

      If it just comes to having buttons to add and remove tags I guess the server could generate those packed query strings (that HTMX will GET or POST to)

      Full text fields would be harder as the front end is going to want to put them in their own query parameter although one attack on the problem is to have the query as a parameter and have parameters that define a command that changes the query and have the back end mash that into the query.

      The user interface for nested queries would be more complex than for the flat queries (which can usually be updated incrementally, adding or removing just one tag) but could probably be redrawn from the back end whenever it changes.

rossdavidh a day ago

Funny, almost everything he said about htmx made me think, "this htmx sounds interesting, I should check it out".

WD-42 a day ago

Here is what I don’t understand about this post: if they knew they needed complex ux with realtime collaboration, why did they even reach for HTMX to start with? The author could have spent an hour going through the HTMX docs and would realize it’s not a good fit instead of wasting who knows how much time actually implementing it.

This reeks of ad-hoc vibe-driven development.

maicro a day ago

Off-topic except that it's about gumroad - does anyone know of a proper abuse submission address or form for gumroad?

I've received two spam emails from them in the past week, where a seller "sold" me something for $0, with a cryptocurrency scam in the item description - so I received an email from a legit gumroad address, but with attacker-provided content (text only in the email at least).

I submitted one through their form, but it's a Google Forms page configured to only allow a single response, so I could only submit once. I also forwarded one to "abuse@gumroad.com", but no clue if that's a real destination or the best place for it...

Gmail flagged both of these as Spam, so while I'm not really concerned about my own security here, I figure gumroad themselves would at least like to know about this so they can limit the (spam list) reputation hit...

bitbasher a day ago

It's nice to see experiences using htmx (both positive and negative). However, it's hard to ignore how much misunderstanding there seems to have been when using it.

There's no rule that says everything needs to go to the server and back when using htmx. You don't have to _not do_ client side scripting. There's a whole section in the hypermedia book based on client side scripting. This is why most people using htmx are also pairing it with a light library for client interactions (alpine, hyperscript, web components, etc). Heck-- you can even pair it with react or any of the other heavier libraries.

jmull a day ago

OK, hats off to htmx for posting/hosting this.

Now, it's a bit of a safe bet to write off anyone willingly or willfully using react, but still, actually hosting this took some real flair.

IDK, I'm a svelte(kit) man myself, but I don't know that dev-dom really deserves something that makes as much sense as that. htmx is so far from the worst idea out there.

joshstrange a day ago

There is never a "one size fits all" and I get frustrated with people that say "SPA for every project" as much as those who say "SPA is always wrong". Picking the right tool for the right job is incredibly important and, as this post mentions, finding something that will scale with your project is important.

onehair a day ago

I don't know man, I personally wouldn't use htmx nor tailwind, but the arguments against them as mentioned in the article felt too superficial. A note to the author, please don't post screenshots that have 78.9% whitespace on them. (especially when you have a the word UX in a close-by paragraph)

lifeisstillgood a day ago

The interesting one is “lack of AI support” - in other words chatGPT not being able to churn out example code is a strategic disadvantage these days!

I do wonder how you can feed your docs to the maw of the AI machine? Can you tell if they scraped your docs?

ttfkam 13 hours ago

A shame the only two choices were Htmx and React.

chrisco255 a day ago

I'm happy with React, so I have no idea whether HTMX is good or not, but the vibes are off the charts.

hermanradtke a day ago

I don’t understand why the screenshot of the view on the right could not be created with htmx (or any UI framework/library).

burnished a day ago

Thoughtful critique about a project posted to the project page? Beautiful, loved it, well done everyone involved.

SrslyJosh a day ago

> UX Limitations: htmx ended up pushing our app towards a Rails/CRUD approach, which led to a really poor (or at least, boring and generic) user experience by default.

Good websites behave in predictable ways. If I can tell your website is using fucktons of javascript, I'm probably not enjoying using it. (And calling it an "app" is a bit of a red flag for bad UX to me.)

andyjohnson0 a day ago

> "HTMX is a different syntax for inline JS."

I'm not a web developer [1], and I get that htmx uses JavaScript behind the scenes, but this quote seems like someone was missing the point. htmx encourages a different approach to architecting and building an app. Or am I the one who's not understanding?

The comment about hiring and AI-support being better with React is imo just another depressing reminder of how much of a monoculture we have at the front-end - and imo a bloated and over-complex one at that.

[1] I have read the htmx book though

gwking 8 hours ago

As many others have mentioned, the comment about AI failing to cough up good answers is intriguing. But what has not been said is that this may also be evidence that the HTMX documentation needs improvement. In particular it needs (many) more examples.

I have always been a reader of documentation for libraries that I use, and I have nearly always felt that docs could be better. Having tried to write docs myself, I know how hard (impossible?) it is to imagine not knowing how the thing you are documenting works.

Recursivedoubts, please take this criticism as encouragement more than anything! I think HTMX is important both as a library and as a reality check against complexity.

There is something unnerving about the HTMX docs to me: over and over again, I read them, and I think, "ok got it, sounds straightforward" but then it turns out there is something slightly tricky that is hard to diagnose. I don't quite know why.

One thing that has gotten me a couple times is not being clear on whether an attribute is for the request or response. I feel kind of dumb admitting this but it has been harder than I'd have thought. My best suggestion would be to add a request/response column in the attributes reference listings. Debug mode validation of "hx-*" attributes would be very welcome.

Early on I definitely mixed up hx-select-oob/hx-swap-oob and hx-include/hx-vals. I've also made mistakes with hx-indicator/htmx-indicator although that's a little different because one is a css class name.

Another that got me recently was trying to set an hx-on: after-settle handler in the target element (client side) and having nothing happen, but then discovering that if I put it in the response it would work. This made no sense at the time. Now I'm wondering if it was because the hx-swap was set to something other than innerHTML.

Anyway, I think the main point is that some of these things are sort of related in various subtle ways, and also sound similar, and are easy to mix up. As a new user, when I try to follow the directions and then apparently nothing happens, it is very hard to know how to proceed. Really the only way forward is to find a working example and try not to break it, or selectively break it to figure out how it works.

I know docs are a lot of work, but in an ideal future there would be example links to click on for each one of the attributes. Perhaps I could help with that at some point.

I've always thought that HTMX has amazing potential on the documentation front because one can build working examples that are served completely statically. In fact I can't think of a UI system that is more amenable to training an LLM. You would just need to write out the expected end-state of the HTML target.

For context, I've been using HTMX as crucial component of a back office web app for two years now. It is mostly a custom scheduling calendar. Most of it is simple HTMX, but I've used OOB-swap and hx-on in places. I use it to do fast state changes without full page refreshes, and to implement a few multi-step forms that require back-and forth of valid form choices. Recently I built a modal control with different edit actions, etc. I don't think I would have taken on this client at all if it weren't for HTMX. So, thank you!

greenie_beans a day ago

does anybody else think that parts of this was written by ai? especially the end.

nasretdinov a day ago

I like how they compare server-side validation with React's client-side (only?) one.

Wasn't able to relate to other puns all that much unfortunately.

  • rozap a day ago

    Yea this piece is often left out and is kinda the most important. A single set of validation, on the server is required. There are tons of reasonable solutions with different tradeoffs for how you run that validation on the client. But two duplicate sets of validation or client only validation are two very, very dark paths.

sergiotapia a day ago

I completely agree with the author that AI has problems with more niche language/frameworks.

when I prompt for rails stuff, things work right out of the box, and it makes great suggestions. (although this may no longer be the case for rails 8 - solidqueue/cache/etc are out that are totally new!)

when I prompt for elixir/phoenix stuff, I usually have to paste in documentation or it hallucinates features or worse, suggests very dated ways of doing things that no longer apply or even work!

react/next has so much volume of data that the AI must be cracked on it fr.

  • arrowsmith a day ago

    Which AI are you using for Elixir/Phoenix? I find that ChatGPT is as you describe for Elixir, but Claude writes Elixir very well.

    • sergiotapia a day ago

      I only use claude sonnet 3.5 for code, it was the last leap before ai llms become useful for coding for me. it's all butter moving forward!

jokethrowaway a day ago

I use Htmx to add little functionality to static pages and it works great.

I used it recently to build a small crud admin page and I soon reached the limits of the technology; in the ends I rewrote it in solid.js - because next.js / react are pretty slow and employ the wrong abstractions.

I think htmx for static + solid.js for interactive is a great combination - albeit I dream of a framework which will excel at both.

nsonha a day ago

Comparing it with React is a low bar, since a lot of people are unhappy with React.

Arguments like "React is popular, AI knows it", or "React is popular, lots of component have been written in it" seem weak.

A proper antithesis for htmlx should compares it with SPA.

  • simonw a day ago

    HTMX can be used as a tool for building SPAs, so I don't think it makes sense to compare it with SPA.

    What's an SPA if not a single web page where clicking on things causes that UI to update in-place in different ways?

    • nsonha a day ago

      htmlx is what you would have on the front end when you do server rendering. Server has to do quite a bit, routing among other things.

      In SPA server just serves a single page and routing is all done in the client.

  • mardifoufs a day ago

    And a lot of people are happy with react. Not sure what your point is. I mean of course people using a more niche framework will usually be more happy about it, because early adopters usually choose to use the technology.

    Like, it's rare to come across htmx (or svelte, or solid) in a corporate job for now, which means that almost all of their users like said frameworks enough to use and talk about them in their free time

    For react that's just not the case, because it's everywhere. If I was forced to use Vue, I wouldn't like it. But I'm not so I don't use it enough to criticize it a lot.

    If anything I've seen more people dislike angular or vue when they had to work in a project that used those frameworks, and didn't have a say in that choice. But that's also just an anecdote obviously

    • nsonha a day ago

      Hey I like React to, I'm actually complaining that often React is used as a scapegoat and and it would be a weak/not really on point criticism for htmlx. I mean people should understand that htmlx is bad because it's clunky, not because it's unpopular and there is no job.

      • mardifoufs a day ago

        I completely misunderstood your original comment then, sorry!

jgalt212 a day ago

> For example, when building complex forms with dynamic validation and conditional fields, we found ourselves writing convoluted server-side logic to handle what would be straightforward client-side operations in React.

I find this bit to be disingenuous. I doubt "straightforward client-side operations" can handle "complex forms with dynamic validation and conditional fields", but it's probably true that such things are much easier (but not straightforward) in React than HTMX.

shortrounddev2 a day ago

I literally only ever hear about htmx from YC. I still don't know what the point of it is, it seems like one of those opinionated programmer things like "I don't use a framework" or "you don't need javascript to make my site work"

  • ensignavenger a day ago

    HTMX is getting a lot of attention from other communities to, another one I am part of is the Django community, which talks about it a lot.

  • sergiotapia a day ago

    it's kind of the elm for javascript. vocal enthusiastic fans but no real usage beyond that miniscule enclave.

  • thruway516 a day ago

    It's for python programmers who think front-end is an unavoidable evil but wish to avoid it anyway.

    • nasretdinov a day ago

      Why just Python? I feel excluded as a Go dev

      • thruway516 a day ago

        To front-end devs you all look the same

  • gumbul a day ago

    The uncle who wrote the tool is probably a friend of the moderators here. He thinks that changing the texts in the element with a few xhr functions is a great success. I've seen very few guys as weird as this guy.

exabrial a day ago

>Scalability Concerns: As our project grew in complexity, we found htmx struggling to keep up with our needs

A Haiku on the above, oft-repeated, sexy-problem-to-have:

Everyone says this,

but nobody has benchmarks,

because its not real

You are not Google,

but make believe problems,

Are the most fun ones!

fsndz a day ago

I will start using htmx as soon as there is a 20K MRR startup built only with it.

  • jonathan-adly a day ago

    My startup using htmx was there - and it was acquired successfully.

    They migrated pretty quick to react after the acquisition due to team dynamics (offshore big teams - seeped into JS heavy client, thin server culture). htmx was a struggle there as well.

    It worked amazing for us as a small team where everyone was full stack and I always build using htmx-first now. But, it is a struggle for folks who have been working in React-like patterns for 5+ years and never experienced the bless of MVC apps.

    • WD-42 a day ago

      Kinda wild that there is an entire generation of web devs for whom server side rendering is actually the new, strange thing.

    • prisenco a day ago

      | They migrated pretty quick to react

      One advantage of htmx (along with web components and standard html+css) is that migrating to anything else is much easier than the other way around. A rewrite from an htmx app to a React app can be trivial. A rewrite from React to anything else will not be.

    • fsndz a day ago

      convenient. I would have liked taking a look at your apps built only using htmx

  • learnedbytes a day ago

    The difference between a 20k MRR startup and lower will almost certainly not be because of HMTX.

    • fsndz a day ago

      this is true in theory but not in practice. just read the article, they came up to the same conclusion. if you want to offer a slick UX (a key element to convince users to pay these days) htmx won't cut it.