Chapter 14. The Convergence
The evidence chapter. The JavaScript ecosystem had no exposure to any derivation, and it was moved by nothing but its own costs. It has spent a decade converging back toward the proper factorization, one rediscovery at a time:
- SSR — server-side rendering. Documents should arrive as documents. The S4 tax landed as Chapter 11 billed it: a private API reverse-engineered per integrator, with crawler blindness as its consequence. The industry moved for its own reasons — SEO and first paint — and the fix is
present ∘ arrange ∘ selectrunning on a server, where it had been running since 1993. - Hydration. Chapter 11’s S1 tax, given its industry name. An industry term for a category error.
- Islands. The principle of least power, rederived from the costs: most of the page needs no program, so most of the page stops being one.
- React Server Components. RSC pulls
selectback out of the fused term, ten years after fusion. But its wire format is a bespoke, non-addressable serialization of exactly the intermediate value S4 says should have a URI. The factor returned; its resource did not. - GraphQL. Declarative queries over a graph model, returning projections —
selectand R1, rebuilt without global identifiers. So it stops at the silo wall, exactly where the missing R3 predicts: federation works within one organization and no further. Its column is below. - HTMX and the hypermedia revival. The same convergence arriving from the opposite shore: documents, links, and forms argued back into fashion on their original merits. Forms are Chapter 7’s instrument.
The framing is convergent evolution: independent lineages, under the same pressure, arrive at the same design — and the match is explained by the pressure, not by chance. The lineages had contact with nothing but the costs, and the costs are the derivation’s predictions.
%%{init: {'theme':'base','themeVariables':{'fontFamily':'-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, sans-serif','textColor':'#1b1e22','lineColor':'#5a6270','cScale0':'#e3eef7','cScale1':'#f4f1e9','cScale2':'#e3eef7','cScale3':'#f4f1e9','cScale4':'#e3eef7','cScale5':'#f4f1e9','cScaleLabel0':'#1b1e22','cScaleLabel1':'#1b1e22','cScaleLabel2':'#1b1e22','cScaleLabel3':'#1b1e22','cScaleLabel4':'#1b1e22','cScaleLabel5':'#1b1e22','cScaleInv0':'#b9cfe4','cScaleInv1':'#d9d3c5','cScaleInv2':'#b9cfe4','cScaleInv3':'#d9d3c5','cScaleInv4':'#b9cfe4','cScaleInv5':'#d9d3c5'}}}%%
timeline
title The convergence, 2013–2026
2013 : the fused term consolidates — client-side read becomes the default
2016 : SSR returns — the pipeline re-runs on servers
2019 : hydration is named — the S1 tax gets its industry name
2021 : islands — least power, rediscovered per component
2023 : React Server Components — select extracted from the fused term
2024 : the hypermedia revival peaks — documents argued from the opposite shore
Years mark mainstream arrival, not invention. The axis the figure cannot draw is the one the chapter measures: S1 and S2 recovered to tildes; R3 and S4 still ahead.
Column: GraphQL.
| GraphQL | |
|---|---|
| R1 | ✓ — a graph model; encodes any domain |
| R2 | ✗ — schemas compose only by coordination |
| R3 | ✗ — no global identifiers; names stop at the schema boundary |
| S1 | ~ — select genuinely separated, but behind one endpoint |
| S2 | ~ — a specified but prose-defined semantics |
| S3 | ~ — substitution within one schema’s contract |
| S4 | ✗ — one endpoint; results are not addressable |
Column: SPA/JS, revised.
| SPA/JS (Ch 11) | SPA/JS (2026) | |
|---|---|---|
| S1 | ✗ | ~ — select re-extracted |
| S2 | ✗ | ~ — declarative islands in an imperative shell |
| R3 | ✗ | ✗ |
| S4 | ✗ | ✗ — the wire format has no URI |
R1, R2, S3: unchanged from Chapter 11’s column.
One closing observation: the convergence recovers S1 and S2 — to a tilde, not a check. But it stalls before R3 and S4, the two properties that make it the web rather than an app platform that happens to use browsers. The stall has a reason: the last stretch helps everyone except the vendor walking it. The properties that privately reward the vendor return first; the properties that reward the public wait. Asymptotic, incomplete, and in the predicted order.