How small-business web apps got so heavy
A booking dashboard, a stock lookup, a quote calculator: ten years ago these were a bit of server code and some HTML. Today the default proposal is often a React single-page application with a client-side router, a state-management library, a separate JSON API, a build pipeline and several hundred npm packages. The interface the customer sees is much the same; the machinery behind it has multiplied.
That machinery is not free. Someone has to keep the build tooling working, patch dependency vulnerabilities flagged by npm audit, upgrade the framework across breaking versions and debug hydration quirks that only appear in production. For a large product team this is business as usual. For a small firm paying an agency by the day, it is a recurring bill for complexity the business never asked for, and every extra dependency is one more thing that can break during a critical trading week.
What HTMX does instead
HTMX is a small JavaScript library, roughly 14 KB compressed, that takes a different bet: instead of moving your application into the browser, it makes HTML itself more capable. You add attributes to ordinary markup and HTMX handles the network calls:
- hx-get and hx-post make any element fetch from or submit to a URL, not just links and forms.
- hx-target tells HTMX which part of the page to update with the response.
- hx-swap controls how the returned HTML is inserted, from replacing an element to appending rows to a table.
- hx-trigger fires requests on events such as typing, scrolling or a timer, which covers live search and polling.
The crucial difference is what the server returns: HTML fragments, not JSON. Your backend renders the interface, exactly as websites always did, and HTMX splices the result into the page without a full reload. It works with whatever you already run: Django, Laravel, Rails, Express or plain PHP inside WordPress.
HTMX is also the best-known name in a wider movement back towards HTML over the wire. Rails ships Turbo, Laravel has Livewire, and Phoenix has LiveView; all share the idea that the server is a perfectly good place to render an interface. You are not betting on one obscure library, but on a pattern the industry is broadly rediscovering.
Need a hand with this?
Our team delivers Web Design for UK businesses — with a free initial consultation, transparent fixed quotes and no lock-in contracts. Tell us what you're working on →
A worked example: a quote form without the framework
Take a trades business that wants an instant-quote form on its website. The server-rendered page contains a normal form with hx-post="/quote" and hx-target="#result". When a visitor submits, HTMX posts the fields, the server validates them and renders a fragment, either the price breakdown or the form again with error messages, and that fragment replaces the contents of #result. No JSON schema, no client-side validation library, no state store: one template and one route, written in the language your developer already knows.
Progressive enhancement comes free. If JavaScript fails or is blocked, the form still submits as a standard POST and the server renders a full page. For the small pockets of genuine client-side behaviour, a collapsible panel or a live character count, the Alpine.js library pairs well with HTMX and adds a couple more kilobytes, not a couple more megabytes.
The maintenance savings, itemised
The savings show up in the invoices you stop receiving:
- No build pipeline. There is nothing to compile, so there are no broken builds, no bundler migrations and no Node version conflicts.
- A fraction of the dependencies. Two small libraries replace a tree of hundreds of packages, which shrinks your security-patching surface dramatically.
- One rendering path. Validation, formatting and templates live on the server only, so logic is never duplicated in two languages.
- Easier hiring. Any competent backend developer can maintain the whole stack; you are not tied to specialists in one frontend framework.
- Stability. HTMX 2 is deliberately conservative about breaking changes, and server-rendered HTML has been stable for thirty years.
Hosting gets simpler too. Server-rendered pages cache beautifully behind a CDN, and there is no separate API tier to deploy, monitor and secure. Many HTMX applications run happily on a modest VPS or shared host that a single-page application, with its Node build and API gateway, would outgrow immediately.
Where React still earns its keep
This is not an argument that frameworks are bad; it is an argument about fit. Some interfaces genuinely are applications:
- Real-time collaboration, such as shared boards or live editing, where many components react to a stream of updates.
- Offline-first tools that must keep working without a connection and sync changes later.
- Highly interactive canvases: design tools, complex product configurators, data-heavy dashboards with client-side filtering.
- Teams with an existing React codebase and deep expertise, where consistency beats theoretical simplicity.
If your project sits in that list, choose the framework with confidence. Most small-business projects do not: they are pages, forms, lists and the occasional dynamic island, which is precisely the territory where HTMX shines.
Key Takeaway
Before commissioning a React single-page app, ask whether the interface is genuinely app-like or simply forms, lists and pages. If it is the latter, a server-rendered site with HTMX will usually ship faster, run on cheaper hosting and cost far less to maintain, because there is no build pipeline, no duplicated logic and no framework upgrade treadmill. Reserve heavy client-side frameworks for the minority of projects that actually need them.
Questions to ask before your next build
- 1. Could every screen be described as a page or a form? If yes, server-rendered HTML is probably enough.
- 2. What happens in year three? Ask who will apply framework upgrades and what they will cost.
- 3. Does the interface need to work offline or update in real time? Those are the honest triggers for a heavier stack.
- 4. Can the agency show you the dependency count? Fewer moving parts means fewer future invoices.
- 5. What is the fallback when JavaScript fails? A hypermedia approach usually degrades gracefully by default.
Choosing the simple option takes a little nerve when every pitch deck says otherwise, but your maintenance budget will thank you for years. If you want an honest, stack-agnostic view on your next web app, our team at Thind Global Services is happy to give one.
