Goldberry Foundation: Web-Platform Timeline
Table of Contents
- 1. Thesis
- 2. HTML
- 3. Years approximate; cross-reference via caniuse for actual impl dates.
- 4. CSS
- 5. JS frameworks (general purpose)
- 5.1. Prototype.js (2005)
- 5.2. jQuery (2006)
- 5.3. MooTools (2006), ExtJS / Sencha (2007), Dojo (2004)
- 5.4. Knockout (2010)
- 5.5. Backbone (2010)
- 5.6. AngularJS / Angular 1 (2010)
- 5.7. Ember (2011)
- 5.8. Meteor (2012)
- 5.9. React (2013)
- 5.10. Vue (2014)
- 5.11. Angular 2+ (2016)
- 5.12. Preact (2015)
- 5.13. Svelte (2016)
- 5.14. SolidJS (2018)
- 5.15. Lit (2018)
- 5.16. Qwik (2021)
- 5.17. HTMX (2020)
- 5.18. Astro (2021)
- 5.19. Next/Remix/SvelteKit/Nuxt (meta-frameworks)
- 6. Mobile / cross-platform
- 6.1. jQuery Mobile (2010)
- 6.2. Sencha Touch (2010)
- 6.3. PhoneGap, then Cordova (2011)
- 6.4. Ionic (2013)
- 6.5. NativeScript (2014)
- 6.6. React Native (2015)
- 6.7. Flutter (2017)
- 6.8. Capacitor (2018)
- 6.9. Expo (mature 2017+)
- 6.10. Tauri (2020)
- 6.11. Lynx (ByteDance, 2025)
- 6.12. Kotlin Multiplatform / Compose Multiplatform (2021+)
- 7. Cross-references (defect to fix)
- 8. Authoring-axis observations
- 9. What this document is for
- 10. Open questions
- 11. Verification status
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]
