Earlier this year, I started a side project called Papernote. It is a simple note-taking application that runs in the browser. Like most of my side projects, the actual product was more of a side quest—I just wanted an excuse to learn something new. Since this was a web app, I had to decide on a front-end framework. I had used React and Vue in past projects, so those were out. I had been hearing a lot about a JavaScript library called HTMX, so, having no idea what I was getting myself into, I decided to give it a shot.

At this point in my career, I knew close to nothing about web development. My experience with JavaScript frameworks was limited to college assignments and half-baked side projects. Everything I knew about frontend web development was learned from YouTube tutorials, Stack Overflow posts, and Udemy courses. At that time, I didn’t even know what code was running on the client and what code was running on the server. All I knew was to run create-react-app, follow some online tutorials, and somehow my HTML magically showed up in the web browser. For hosting, I could simply point a hosting service like Heroku to my GitHub repository, set up a domain, and my website was online. How this all worked was a complete mystery to me.

Which is sort of crazy to think about, isn’t it? The barrier to entry for getting a basic web app up and running is essentially zero. The modern developer needs no knowledge of server infrastructure, deployment pipelines, or even the underlying principles of HTTP to create a functional product. However, when the foundational technologies are abstracted away by hosting platforms, developers are robbed of a deeper understanding of how their applications are put together. I found this reality extremely frustrating. How is it that I could build a fully functional piece of software without really knowing how it worked?

What drew my attention to HTMX was how it was framed as the antithesis of modern JS frameworks. Where most JS frameworks were bloated and complex, HTMX was lean and simple. As someone who had struggled to understand React and Vue, this seemed an attractive proposition. I was interested to see what “extending HTML” meant in practice.

The creators of HTMX even wrote a free online textbook! As I read through Hypermedia Systems (a real page-turner if you ask me), everything started to click. By learning how to use HTMX, I was also inadvertently filling in gaps in my knowledge of how web applications work. To understand HTMX concepts, I had to learn about single page applications (SPAs), HTTP verbs, URL queries, response codes, the document object model (DOM), caching, what a “build step” is (and more recently, what “no build” is), cookies, and much much more. The library demands proficiency in these areas to take full advantage of its features.

I cannot understate the impact that HTMX and Hypermedia Systems have had on my development as an engineer. My mindset around building web applications has completely shifted. I find that I think less in terms of “frontend and backend” and instead in terms of “client and server.” This is perhaps because the separation between the frontend and backend code for an HTMX-driven application is less clean-cut than in traditional JSON-API-driven projects, but I find it a valuable perspective nonetheless. HTMX forces the developer to scrutinize every client-server interaction and to carefully consider what should be done on the server versus scripted in the browser.

The authors of Hypermedia Systems argue that the vast majority of web applications can be built using simple tools like HTMX, without the need for large amounts of client-side JavaScript. Having a few HTMX projects under my belt now, I wholeheartedly agree with them. This is not to say that JS frameworks have no place in a developer’s toolbox. In fact, I have a newfound respect for JS frameworks as I can now properly understand the problems they solve and the features they provide. However, I do think HATEOAS is a really neat concept and it is much more powerful than you may think. Going forward, I will be building web apps with HTMX by default and reaching for more complex tooling only when necessary.