Goldberry Foundation: Web-Platform Timeline

Table of Contents

1. Thesis

Each spec or framework version is a Lakatos refinement of its predecessor. Author-time shifts (who writes the code) and authoring-medium shifts (what form the source takes) are independent. Invariants survive both.

The corpus archaeology is therefore two-axis:

  • temporal axis: which spec/framework codified the invariant
  • mediation axis: who/what authored at that era

1.1. Authoring eras (mediation axis)

era window who/what authors example
E0 1993..2008 human writes HTML/CSS/JS directly hand-coded sites
E1 2008..now framework generates HTML; human writes JS React, Vue, Angular
E2 emerging NL or design tool generates components v0, Figma->code, LLM
E3 hypothetical formal spec generates everything below invariants as input

Pinned observation: nobody writes HTML by hand at scale anymore. React component code is at the start of the same migration. Goldberry's value proposition is that the invariants outlive each migration.

2. HTML

Each version names its predecessor's failure mode. The version-graph IS a refutation chain.

2.1. HTML 2.0 (RFC 1866, Nov 1995)

  • codifies: existing browser practice circa 1994
  • introduces: forms (INPUT, SELECT, TEXTAREA), tables (limited semantics)
  • defect class addressed: divergent browser interpretations of v1
  • aporia: no spec for character set, presentation, or scripting

2.2. HTML 3.2 (Jan 1997)

  • codifies: presentational markup already in use
  • introduces: layout tables, FONT, applets, image maps
  • defect class addressed: Netscape vs IE extension drift
  • drift introduced: enables the "tables for layout" defect class that haunts E0
  • HTML 3.0 was aborted (too ambitious; MATH, BANNER, etc.)

2.3. HTML 4.01 (Dec 1999)

  • thesis: separate structure from presentation
  • introduces: CSS-aware DOCTYPE, deprecates FONT, deprecates presentational attributes
  • defect class addressed: presentational-tag pollution
  • invariant codified: SoC between markup and styling

2.4. XHTML 1.0/1.1 (2000..2001)

  • thesis: HTML is XML, must be well-formed
  • defect class addressed: tag soup, unclosed tags, parser variance
  • aporia: real-world HTML never validated; XHTML 2.0 was abandoned
  • mortality: died; lessons absorbed into HTML5 living standard

2.5. HTML5 (WHATWG 2008+, W3C rec 2014)

  • thesis: define what browsers actually do, not what spec writers wished
  • semantic elements: article, nav, section, header, footer, main, aside, figure, figcaption
  • form types: email, url, tel, date, time, datetime-local, color, range, search, number
  • new attributes: contenteditable, hidden, data-*, draggable
  • new APIs: history.pushState, sessionStorage/localStorage, Web Workers, WebSockets, Application Cache (later deprecated), Geolocation
  • media: native video/audio (Flash deprecation begins)
  • canvas
  • defect classes addressed:
    • "div soup with no semantics"
    • Flash dependency
    • parser ambiguity (HTML5 spec is precise about tag soup)
  • invariants codified: parse algorithm is deterministic; document outline derived from sectioning elements

2.6. HTML Living Standard (WHATWG, ongoing)

Each addition is a defect class previously requiring JS+ARIA gymnastics, now delegated to UA.

addition year* defect class previously requiring custom code
<details/summary> 2011 disclosure widget, focus, ARIA wiring
<dialog> 2014 modal: focus trap, esc dismiss, top-layer
custom elements 2014 encapsulated reusable widgets
<slot> 2016 composition without DOM forwarding gymnastics
inert 2022 focus exclusion outside modal
popover attribute 2023 tooltip/menu top-layer + light dismiss
(built-in form validation: longstanding) various JS validation libraries

3. Years approximate; cross-reference via caniuse for actual impl dates.

Each row above is a goldberry CLUSTER candidate. The DEFECT entries attached to a cluster cite the pre-platform-fix workarounds.

4. CSS

4.1. CSS1 (Dec 1996)

  • basic typographic and color control
  • defect class addressed: inline FONT/BGCOLOR pollution

4.2. CSS2 (May 1998), CSS2.1 (June 2011)

  • positioning (relative, absolute, fixed)
  • floats
  • generated content (::before, ::after)
  • media types
  • defect class addressed: tables for layout
  • aporia introduced: floats need clearfix; no robust column primitive

4.3. CSS3 modules (2009+)

Modular versioning starts here. "CSS3" is shorthand for "the level-3 module group". Selected modules with goldberry relevance:

module level/year defect class addressed
Selectors L3 2011 jQuery selector engine for nth-child, attr selectors
Backgrounds and Borders L3 2014 border-radius hacks, image-based shadows
Color L3/L4 hex-only color, no alpha; rgba/hsla/oklch fix
Transitions L1 2018 jQuery .animate(), JS easing libs
Animations L1 2018 JS keyframe libraries
Transforms L1/L2 image-based rotation, JS positioning math
Flexbox 2016 float hacks for centering, equal-height columns
Grid 2017 nested flex/float grid combinations
Custom Properties 2017 preprocessor-only theming, no runtime switch
Container Queries 2023 media-query-only responsive (fails for components)
:has() 2023 JS classList manipulation for parent state
@layer (cascade layers) 2022 specificity wars, !important escalation
Scroll-driven animations 2023+ scroll-listener jank
Anchor positioning 2024+ JS positioning libs (Floating UI raison d'etre)
View Transitions 2023+ JS-driven page-transition libraries
Subgrid 2023 inability to align nested grid tracks with parent
color-mix(), oklch(), P3 L4 sRGB ceiling, perceptual color math in JS

Each row is a candidate goldberry CLUSTER referencing the pre-spec workaround as its DEFECT chain.

5. JS frameworks (general purpose)

Ordered by first widely-used release. "Mortality" is editorial.

5.1. Prototype.js (2005)

  • Class.create, Ajax.Request, .each on Array prototype
  • defect class: cross-browser Ajax pre-XHR-standardization
  • mortality: dead; jQuery ate it

5.2. jQuery (2006)

  • cross-browser DOM normalization, fluent chain API
  • defect class: IE6/7 quirks, attachEvent vs addEventListener, selector engine for IE6
  • peak: 2010..2014
  • mortality: still installed everywhere; growth flat; the platform absorbed it (querySelectorAll, fetch, classList, addEventListener)

5.3. MooTools (2006), ExtJS / Sencha (2007), Dojo (2004)

  • enterprise widget libraries, OOP-flavored
  • mortality: largely abandoned; ExtJS still commercial niche

5.4. Knockout (2010)

  • observables + MVVM
  • defect addressed: imperative DOM update for small reactive UIs
  • predates Vue's reactive model

5.5. Backbone (2010)

  • Models, Collections, Views, Router
  • defect addressed: spaghetti jQuery in larger apps
  • "first taste of framework" for many

5.6. AngularJS / Angular 1 (2010)

  • $scope, two-way binding, dirty checking, directives
  • defect addressed: imperative DOM updates
  • aporia: digest cycle performance, $scope prototypal inheritance traps
  • mortality: LTS ended Dec 2021

5.7. Ember (2011)

  • convention-over-config, Glimmer renderer (later)
  • mortality: niche but maintained

5.8. Meteor (2012)

  • full-stack, DDP for live data
  • mortality: niche

5.9. React (2013)

  • virtual DOM, unidirectional data flow, JSX
  • defect addressed: two-way binding confusion, imperative mutation
  • drift: hooks (2019) introduced stale-closure and dep-array defect classes
  • subdrift: Server Components (2023+) introduced new RSC/RCC boundary defects
  • peak: 2016..present

5.10. Vue (2014)

  • reactive proxies, single-file components, template syntax
  • defect addressed: React's JSX-vs-template barrier, Angular boilerplate

5.11. Angular 2+ (2016)

  • rebuilt on TypeScript, RxJS, decorators, Zone.js (later abandoned)
  • defect addressed: AngularJS perf + composability
  • v17+ adopted Signals (Solid-influenced)

5.12. Preact (2015)

  • React API, ~3kb runtime
  • defect addressed: React bundle size for size-sensitive contexts

5.13. Svelte (2016)

  • compile-time reactivity, no runtime VDOM
  • defect addressed: VDOM tax for static-ish UI
  • v5: runes ($state, $derived, $effect) replace stores+reactive blocks

5.14. SolidJS (2018)

  • fine-grained reactivity, JSX, no VDOM
  • defect addressed: React's whole-component re-render model

5.15. Lit (2018)

  • custom elements + tagged template literals
  • defect addressed: framework lock-in for shared widget libraries

5.16. Qwik (2021)

  • resumability instead of hydration
  • defect addressed: hydration time on large apps

5.17. HTMX (2020)

  • hypermedia-driven; server renders partials, returns HTML fragments
  • defect addressed: SPA complexity for primarily-server apps
  • philosophy: "give up SPA, use HATEOAS"

5.18. Astro (2021)

  • islands architecture, ship less JS
  • defect addressed: SPA-by-default for content sites

5.19. Next/Remix/SvelteKit/Nuxt (meta-frameworks)

  • routing + SSR + data loading + bundling
  • defect addressed: assembling the framework stack manually

6. Mobile / cross-platform

6.1. jQuery Mobile (2010)

  • progressive enhancement for touch
  • mortality: deprecated 2021

6.2. Sencha Touch (2010)

  • mobile-flavored ExtJS
  • mortality: EOL 2020

6.3. PhoneGap, then Cordova (2011)

  • webview wrapper + native bridge
  • defect addressed: write-once mobile
  • aporia: webview perf gap, gesture/haptics differences

6.4. Ionic (2013)

  • Angular-then-anything + Cordova/Capacitor
  • still active

6.5. NativeScript (2014)

  • native widgets, XML-based UI

6.6. React Native (2015)

  • JS-driven native widget tree, bridge architecture
  • defect addressed: webview UX gap
  • drift: original bridge replaced by JSI/Fabric (2021+) to fix "bridge serialization tax" defect

6.7. Flutter (2017)

  • Dart + Skia, draws own widgets
  • defect addressed: native-vs-JS UX divergence (by drawing everything)
  • aporia: accessibility tree synthesis (Flutter must reproduce platform a11y)

6.8. Capacitor (2018)

  • modern Cordova replacement; native plugins as JS APIs

6.9. Expo (mature 2017+)

  • managed RN runtime, OTA updates, EAS build

6.10. Tauri (2020)

  • Rust + system webview, smaller than Electron
  • desktop-leaning but mobile via Tauri Mobile

6.11. Lynx (ByteDance, 2025)

  • RN-alternative used at TikTok scale (open-sourced March 5, 2025)
  • defect addressed: RN bridge perf under aggressive component churn

6.12. Kotlin Multiplatform / Compose Multiplatform (2021+)

  • JetBrains' native-Kotlin cross-platform; UI via Compose
  • defect addressed: Flutter's "not native" critique, RN's perf

7. Cross-references (defect to fix)

Selected examples. Full table belongs in clusters/, not here.

defect class era origin fix codified by
modal focus trap, top layer E0 (jQuery) <dialog>, popover attr, inert
tooltip positioning relative anchor E0 anchor positioning (CSS)
parent-state styling E0 :has()
component-scoped responsive E1 container queries
theme runtime switch E0..E1 CSS custom properties
specificity / !important wars E0..E1 @layer
equal-height columns E0 flexbox
2D layout E0..E1 grid
float clearing E0 flex/grid + display:flow-root
stale closures in subscriptions E1 (React) Solid signals, Svelte runes, Vue refs
hydration mismatch E1 (SSR) Qwik resumability, RSC
SPA bundle weight E1 Astro islands, HTMX
RN bridge serialization tax E1 (mobile) JSI/Fabric, Lynx

8. Authoring-axis observations

HTML: written by tools since ~2010 (templating engines, then JSX). Almost no one composes HTML directly today.

CSS: written by tools partially since CSS-in-JS (2014) and Tailwind (2017). Hand-authored CSS still common but declining.

JS: framework code is hand-written. Whether this stays true in five years is the open question. v0/Bolt/Lovable/Cursor agent mode are already generating React components from prose. If goldberry's E2 adapter (NL -> invariants) lands, this file will need a sibling documenting which generators emit which invariants correctly.

9. What this document is for

This is the foundation against which goldberry corpus entries are tagged.

  • A DEFECT-NNNN entry's :era: property selects from sections herein.
  • A CLUSTER entry's :resolvedin: property cites the spec/framework version that codified the fix.
  • An entry without :resolvedin: is a live aporia.

10. Open questions

  • Which CSS module is the canonical reference for goldberry's layout cluster?
  • Modal cluster's "current best understanding" implementation: Radix? Reach (deprecated)? Headless UI? ARIA APG reference?
  • How do we tag entries that span eras (focus management defects predate almost everything)?
  • Treatment of jQuery: deprecate? archive? It still runs ~75% of websites per BuiltWith. Archive seems wrong; "alive but absorbed by platform" is more honest.
  • Mobile-web vs mobile-native: same defect, different fix surface. Two cluster sets or one with a tag?

11. Verification status

Verified 2026-04-27 against W3C specs, GitHub releases, official blogs. See research/foundation-verification.org for full audit.

  • HTML5 dialog: 2013 WD, 2014 Chrome impl, 2017 W3C rec, 2022 broad support [VERIFIED]
  • Lynx: open-sourced March 5, 2025, production at TikTok scale [VERIFIED]
  • CSS Anchor Positioning: Oct 2024 Working Draft, not yet CR [VERIFIED]
  • React Server Components: 2023 canary, ongoing [VERIFIED]
  • AngularJS LTS: ended Dec 31, 2021 [VERIFIED]
  • Vue 3: Sep 18, 2020 [VERIFIED]
  • React Hooks: Feb 6, 2019 (not 2018) [CORRECTED]

Author: jwalsh

jwalsh@nexus

Last Updated: 2026-05-17 23:10:42

build: 2026-05-20 03:36 | sha: 12ce5fe