FREE
the
WEB.

The web was built on hypermedia. We broke it with SPAs. It's time to fix it

Scroll
$ cat the-problem.txt

What SPAs Broke

SPAs turned the browser from a hypermedia client into a JavaScript runtime. The result:

01

DEVELOPER SUFFERING

Build tools, bundlers, hydration, RSC, islands... a tower of complexity to solve problems we created. You shouldn't need a PhD in webpack to ship a form.

02

CORPORATE CAPTURE

React is Meta's. Next.js is Vercel's. Your "open" stack locks you into their cloud, their tooling, their pricing page. The web was meant to be yours.

03

INACCESSIBLE

Screen readers choke on virtual DOMs. Buttons that aren't buttons. Forms that don't submit. We broke the web for everyone.

04

BLOATED BUNDLES

2MB of JavaScript to render a list. Your users are on mobile. They notice.

05

BROKEN URLs

Routes that don't work without JavaScript. Try sharing a link. Go ahead.

06

FRAGILE STATE

Client-side state management is an entire career. Redux, MobX, Zustand, Jotai — we invented solutions for problems we created.

"We took the most successful hypermedia system in history and replaced it with distributed state machines running in hostile environments."

$ cat manifesto.md

The Manifesto

Like the Agile Manifesto — we value the items on the left more than the items on the right.

01
HTMLoverJSON

The server should return documents, not data blobs for the client to assemble. HTML is the universal format — every browser, every screen reader, every LLM understands it.

02
Server AuthorityoverClient State

The server knows the state. The server is the state. Stop duplicating it in Redux, syncing it, debugging drift, and pretending client-side state is simpler.

03
Progressive EnhancementoverJS Dependency

The web works without JavaScript. Forms submit. Links navigate. Your app should respect that. JavaScript is for enhancement, not existence.

04
Real URLsoverClient Routes

Every view should have a URL that works when shared, bookmarked, or crawled. If your route only exists in JavaScript, it doesn't exist.

05
Hypermedia ClientoverApp Runtime

The browser already knows how to follow links, submit forms, and render HTML. Let it. We don't need to rebuild the browser in JavaScript.

$ diff spa.arch hypermedia.arch

How Hypermedia Works

The server sends HTML with built-in controls — links and forms. The browser follows them. That's the whole architecture.

BROWSERdisplays HTML, follows linksSERVERrenders HTML, owns stateHTML + ControlsHTTP Request↑ user clicks linkor submits formreturns only thefragment that changed
No virtual DOMNo client stateNo JSON parsing

SPA: 8 steps to render

  1. 1. Download JS bundle (2MB)
  2. 2. Parse & execute JavaScript
  3. 3. Initialize framework runtime
  4. 4. Mount component tree
  5. 5. Fetch data from API (JSON)
  6. 6. Parse JSON, update state
  7. 7. Reconcile virtual DOM
  8. 8. Patch real DOM

Hypermedia: 2 steps

  1. 1. Browser requests URL
  2. 2. Server returns HTML. Done.

For updates, HTMX sends a request and swaps the HTML fragment the server returns. Same two steps.

Try it live

demo.html
<button hx-get="/api/demo"
        hx-target="#result"
        hx-swap="innerHTML">
  Fetch from server
</button>
<div id="result"></div>
click to send hx-get
Server response will appear here...

Three HTML attributes. Zero JavaScript. That's HTMX.

$ vim signature.txt

Sign the Manifesto

Join the movement. Pledge to build hypermedia-first.

57
developers have signed

This form uses HTMX. Zero frameworks. Zero client routing.

$ echo "one more thing"

Oh, and It's AI-Ready

There's a bonus to building the web properly.

LLMs and AI agents interact with the web through HTTP and HTML — they make GET requests, parse markup, follow links, submit forms. That's hypermedia. It's what we've been talking about this whole time.

SPAs require a JavaScript runtime to render content. AI agents don't have one. Your client-rendered app is invisible to them.

This isn't the reason to build with hypermedia — developer freedom, accessibility, and simplicity are. But it means every hypermedia app you build is automatically an app that AI agents can read, navigate, and use. No special APIs required.

bonus.sh

$ curl https://your-hypermedia-app.com

> AI agents can read this HTML.

> They can follow the links.

> They can submit the forms.

> You didn't have to do anything extra.

Build for humans, for accessibility, for simplicity, for yourself. The AI compatibility comes free.

The Proof

This entire site is built with Hono + HTMX.

0
JS Frameworks
0
Client Routing
0
Hydration
0
Build Steps

The HTML IS the application.