htmx vs. SPA

3 minutes
#webdevelopment #htmx #spa #elm
5 November 2023

As web developers, it’s our responsibility to discern the best tool for the job. htmx indeed simplifies the tech stack and lowers the entry barrier for budding developers or simpler projects. However, for intricate UIs that demand consistent data representation, the SPA approach offers better support. Rather than getting swayed by trends, it’s time we appreciated the nuance in these discussions and chose our tools wisely.


A single-page application (SPA) is a web application or website that interacts with the user by dynamically rewriting the current web page with new data from the web server, instead of the default method of a web browser loading entire new pages.

The technology landscape is ever-evolving, and in the realm of web development, nothing has generated more buzz recently than htmx. As web developers, we’ve seen a myriad of technologies and practices come into the spotlight, only to fade into obscurity when something better comes along. The current fanfare around htmx is testament to this cycle, with many praising its ability to simplify the process of crafting interactive HTML pages. But as with all tech discussions, it’s crucial to introduce some nuance, especially when comparing htmx to Single Page Applications (SPAs).

htmx is a library that allows you to access modern browser features directly from HTML, rather than using javascript.

The htmx Hype

htmx offers a refreshing take on web app development. It brings in a tangible simplicity to the tech stack, reducing the need for multiple languages and eliminating certain build tools. This is a measurable simplicity that appeals to developers who want a straightforward approach to interactive web components.

That said, the rise of htmx has also ushered in a wave of criticism towards SPAs, painting them as overcomplicated and cumbersome. But it’s essential to recognize that simplicity isn’t universal; what’s simple in one context might be complex in another.

Simplicity is relative

While htmx champions the simplicity of the tech stack, SPAs champion a different kind of simplicity - the simplicity of UI state management.

The Elm architecture, for instance, ensures a clear derivation of UI state from a single data source. Such a setup helps with consistent reflection of data across the user interface.

I’m sure you’ve run into the following bug on even bigger web platforms:

In the top-right corner there is a counters that displays the number of unread messages. You’re following a link to an unread message, just not through that very counter. But now that counter fails to update unless the whole page is refreshed.

With a dedicated data model for the UI, there’s a heightened confidence in producing user interfaces that consistently reflect accurate data.

Now, this isn’t to say that SPAs guarantee flawless UIs, but the foundational architecture gives developers a more robust framework to ensure UI consistency.

The Right Tool for the Job

The discussion between htmx and SPA shouldn’t be about which is universally better; it should be about understanding the strengths and limitations of each. htmx sets a lower entry barrier for those looking to get started with web apps. It’s brilliant for projects that require less intricate user interfaces, like a simple signup form for a newsletter.

On the other hand, for complex, interactive UIs where consistent data representation is crucial, the SPA approach, especially with frameworks like Elm, offers a more reliable structure.

The most common criticism of SPAs is how complicated they are to work with. In the following video I show how you can set up an SPA setup within a few minutes, without the usage of NPM, Webpack and actually even without JavaScript.