// 1989 — 2026 · WHATWG Living Standard · Tim Berners-Lee · markup, not a programming language

HTML:<markup/>

HTML isn't a programming language — it's markup: no variables, no loops, not Turing-complete. But every UI on the web begins here: from TBL's first website at CERN in 1991 to popover / dialog / view transitions still pushing the platform outward in 2026. Thirty-five years old, still evolving, still re-absorbing JS.

1989TBL's CERN proposal
Information Management
1991·08·06First website
info.cern.ch · 22 tags
2019WHATWG takes HTML
W3C surrenders · Living Standard
5B+live HTML documents
the web's physical substrate
</>5
<dialog><canvas>popover<picture srcset>role="button"Living Standard<details><template>view-transition-name<x-rating><form method>aria-expanded
scroll
01

What is HTML

HTML = HyperText Markup Language. A markup language — it tells the browser what a chunk is (heading / paragraph / link), not how to do anything. It is not a programming language: no variables, expressions, control flow or functions; not Turing-complete. But every web UI starts here — CSS handles "how it looks," JS handles "how it moves," HTML handles "what it is."

Not a programming language markup

No variables, loops, or functions; not Turing-complete. You don't "run HTML" — it's a declarative structural description parsed into a DOM, then operated on by CSS and JS. The same family as XML / Markdown / JSON.

Living Standard whatwg

Since 2019 the spec lives only at WHATWG (jointly run by Apple, Mozilla, Google, Microsoft) — no more version numbers. "HTML5" is a historical label; in 2026 the spec is just "HTML" or "the Living Standard". PRs land daily.

Backward compat as a rule compat

1991 HTML still renders in a 2026 browser. The WHATWG spec explicitly forbids breaking old content — a structural difference between the web and every other platform. No deprecation cycle, only "renders forever."

One-third of the triad web

HTML / CSS / JS are the web's three-legged stool. HTML = structure, CSS (/code/css) = presentation, JS (/code/javascript) = behaviour. Decoupling the three has been the design consensus since HTML 4.01 in 1999.

first-page.html1991
<TITLE>The WorldWideWeb project</TITLE>
<NEXTID N="55">
<H1>World Wide Web</H1>
<A NAME="0">The WorldWideWeb (W3) is a wide-area
hypermedia</A> information retrieval
initiative aiming to give universal
access to a large universe of documents.

# 22 tags · uppercase · no CSS · no JS
# still renders in 2026 Chrome
modern-page.html2026
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport"
        content="width=device-width">
  <title>HTML in 2026</title>
</head>
<body>
  <article>
    <h1>HTML in 2026</h1>
    <button popovertarget="m">menu</button>
    <div id="m" popover>...</div>
  </article>
</body>
</html>
02

History : 1989 → 2026

HTML's story breaks into four arcs: birth (1989–1995) → the W3C era, ending in the XHTML detour (1995–2008) → HTML5 + the browser wars (2008–2019) → WHATWG Living Standard + re-absorbing JS (2019–2026).

  1. 1989·03

    Tim Berners-Lee submits the proposal at CERN

    "Information Management: A Proposal" — a single diagram and a few pages of prose laying out what a hypertext system should look like. This is the seed of the web; HTML doesn't exist by name yet, but everything that follows grows out of this page.

  2. 1991·08·06

    The first website goes live — info.cern.ch

    TBL deploys the first website on a NeXT workstation at CERN. 22 tags: <a>, <p>, <h1><h6>, <ul>… No CSS, no JavaScript, no images. Pure structure.

  3. 1993

    NCSA Mosaic — the first real browser

    Marc Andreessen builds Mosaic at the University of Illinois — the first graphical browser to show text and images on the same page. The <img> tag lands the same year. The web becomes "pretty." Andreessen leaves a year later to found Netscape.

  4. 1994

    Netscape Navigator + W3C founded

    Netscape 1.0 ships in October and grabs ~80% browser share within a year. The same month, TBL founds W3C at MIT to pull web standards back to a neutral home — a tug-of-war that lasts 25 years.

  5. 1995

    HTML 2.0 — first formal spec

    IETF RFC 1866 codifies the de-facto usage of 1993–95 as the first formal HTML standard: forms (<form>), images, links, tables (added soon after). Also in 1995: JavaScript (Brendan Eich, in 10 days), IE 1.0, PHP — every pillar of the web platform arrives in one year.

  6. 1997·01

    HTML 3.2 — W3C takes over + table layouts

    W3C ships its first own spec: tables (<table>), applets, font tags, frames. The era of "layout with <table>" begins here and runs a full decade — exactly what the later CSS revolution sets out to undo.

  7. 1999·12

    HTML 4.01 — the end of old HTML

    The first step toward separating structure from presentation: CSS recommended instead of <font> / bgcolor. Semantic tags arrive: <abbr>, <q>, <label>. For the next decade the HTML mainline stalls while W3C bets everything on XHTML.

  8. 2001

    IE6 + the browser dark age

    IE6 ships with Windows XP, claims ~95% desktop browser share, and Microsoft disbands the IE team entirely. Web standards freeze at 2001 levels. The seven-year dark age burns into the industry's memory just how bad a browser monopoly is.

  9. 2000~2009

    The XHTML detour — XML strictness as a failed bet

    W3C bets on XHTML 2.0: strict XML parsing — one unclosed <br> breaks the whole page. Elegant on paper, but real-world content is too messy and strict parsing shatters everything. W3C formally abandons XHTML 2.0 in 2009.

  10. 2004·06

    WHATWG forms — Apple/Mozilla/Opera break away

    W3C refuses to keep evolving HTML, so Apple, Mozilla and Opera form WHATWG (Web Hypertext Application Technology Working Group) on the spot at a W3C meeting and start evolving HTML themselves. The moment the open-standards body effectively walks out on W3C.

  11. 2004·11

    Firefox 1.0 — IE's first real challenger

    Rebuilt from Netscape's ashes, Mozilla ships Firefox 1.0; within four years it holds ~30% share. The browser market becomes multipolar for the first time — but IE6 isn't dead and the compat hell will last five more years.

  12. 2004·09

    <canvas> — Apple ships it quietly in Safari

    Apple drops <canvas> into Safari 2 to power Dashboard widgets — no notice, no committee, just shipped. Mozilla follows within a month. The first piece of HTML5: WHATWG's "implement first, standardise after" approach in action.

  13. 2008·09

    Chrome 1.0 — the dam breaks

    Google ships Chrome with V8 and a multi-process architecture. An order of magnitude faster than IE6 / Firefox; within a year it holds 15% share, four years on it passes IE for #1. The 8-year IE monopoly stalemate is over. HTML5's fast lane starts here.

  14. 2009

    <video> / <audio> — Flash's death certificate

    WHATWG codifies <video> / <audio>. Apple simultaneously rejects Flash on iPhone — native media tags become the only proper way to play video on the web. Adobe announces Flash EOL for 2020 in 2017, but the death warrant was signed in 2009.

  15. 2011

    WebKit consolidation — Safari / Chrome share an engine

    Both Chrome and Safari render with WebKit. The year sees <details> / <summary>, early CSS Grid, hardware-accelerated compositing. The "is WebKit the new IE?" debate begins; Google forks Blink out of WebKit in 2013 and the split becomes real.

  16. 2014·10·28

    HTML5 — finally "done" after six years

    W3C marks HTML5 as a Recommendation. A long list lands: <section> / <article> / <nav> / <header> / <footer> / <canvas> / <video> / localStorage / WebSocket / Web Workers. The web platform officially shifts from "documents" to "applications".

  17. 2014

    Web Components + <picture> / srcset

    The same year: Custom Elements + Shadow DOM + HTML Templates ship in Chrome — defining your own elements without a framework; <picture> + srcset standardise responsive images. Two quiet through-lines for the next decade of the web.

  18. 2019·05·28

    W3C surrenders — WHATWG takes the HTML spec

    Fifteen years of standoff end on this date: W3C and WHATWG issue a joint statement — WHATWG's "Living Standard" is now the sole authoritative HTML spec; W3C no longer maintains a separate HTML standard. WHATWG's "implement first, standardise after" approach wins.

  19. 2020·08

    IE 11 EOL — an era officially closes

    Microsoft announces Microsoft 365 will drop IE 11 in 2021 and ends Edge Legacy in 2021. Edge Chromium takes its place, now built on Blink. The IE rendering engine's 25-year run ends. "IE compatibility" disappears from the front-end vocabulary.

  20. 2017

    TBL receives the Turing Award

    ACM awards Tim Berners-Lee the 2016 Turing Award (presented in 2017) for "inventing the World Wide Web, the first web browser, and the fundamental protocols and algorithms allowing the web to scale." HTML is finally recognised in computer-science canon, not just engineering folklore.

  21. 2022

    <dialog> goes cross-engine

    Specced in 2014, after eight years all three major engines (Blink / WebKit / Gecko) finally ship it. The modal dialog that used to take ~150 lines of JS + ARIA is now <dialog open>the first move in HTML clawing back work the framework era took.

  22. 2023

    Declarative Shadow DOM + View Transitions

    Two big ones: Declarative Shadow DOM (server-rendering Web Components finally works) + View Transitions API (page-transition fades / morphs as a single CSS property — no router framework needed). Both are "give it back to HTML, not yet another framework".

  23. 2024·04

    Popover API — cross-browser

    The popover attribute + popovertarget give you native popups / menus / tooltips without JS, without z-index battles, with automatic top-layer. Chrome 114, Safari 17 and Firefox 125 ship in sync. The biggest "HTML re-absorbs JS" win of 2024.

  24. 2025

    Anchor Positioning + <selectlist>

    CSS Anchor Positioning (Chrome 125+) makes popovers track their trigger automatically; <selectlist> / <selectmenu> brings fully styleable select dropdowns into HTML — 25 years of un-stylable <select> finally cracks. HTML reclaims another patch of UI-framework territory.

  25. 2026

    HTML in 2026 — 35 years old, still re-absorbing JS

    2026: HTML no longer ships version numbers — the Living Standard changes daily; <dialog>, popover, anchor positioning and view transitions are default tooling; declarative shadow DOM + custom elements make the "framework-less framework" actually viable. HTML isn't a "legacy tech" — it's one of the few languages in 2026 that's still actively evolving.

03

Tags Through History : TagTimeline

Fourteen tags arranged by introduction year — the 35-year arc from "22 tags of hypertext" to "2024 popover attribute". Each tag carries a slice of industry history.

1991
tag
<a>

The hyperlink — the web's core verb. The most important of the original 22 tags.

1993
tag
<img>

Added in Mosaic — the web's first image support. Still dominates page bandwidth 30 years on.

1995
tag
<form>

HTML 2.0 standardises forms. The real birth of the web app — no form, no submit.

1997
tag
<table>

HTML 3.2 ships tables. Abused as a layout tool for an entire decade, until CSS Grid puts it back in its data-semantic place.

1999
tag
<iframe>

Embed another document. Still the only general-purpose way to host third-party widgets 25 years later.

2004
tag
<canvas>

Apple drops it into Safari for Dashboard widgets. Gateway to 2D / WebGL rendering — the foundation of every browser game.

2009
tag
<video>

HTML5's media tag. Flash's death warrant; the codec war (H.264 vs VP9 vs AV1) still isn't over.

2011
tag
<details>

Native accordion / disclosure widget. Replaces a decade of jQuery toggles with one HTML element.

2014
tag
<picture>

Responsive images + srcset. Standardises "2× for Retina, smaller for mobile" with zero JS.

2014
tag
<template>

Parsed but not rendered HTML. The clone source for Web Components; the official SSR + hydration handle.

2014
tag
custom-elements

Custom Elements v1. class extends HTMLElementreusable components with no framework.

2022
tag
<dialog>

Native modal dialog with automatic top-layer + ::backdrop + ESC-to-close. Replaces ~150 lines of JS.

2024
tag
popover

An HTML attribute, not a new tag. Any element can be a popover — bubbles, tooltips, menus without JS.

2025
tag
<selectlist>

A fully styleable select. The first time in 25 years <select> bows to CSS — the next UI-library territory to fall.

04

HTML5 Surface Area : PlatformAPI

By 2026 "HTML" means far more than tags — it carries the full HTML5-era API surface: canvas, media, dialog, details, custom elements, popover, ARIA. The eight cards below are the native surface web-UI engineers touch every day.

A

<canvas> — 2D / WebGL / WebGPU

Immediate-mode drawing. 2D context, WebGL, and WebGPU all attach here — the root of every game / visualisation / 3D renderer in the browser.

<canvas id="c" width="512" height="512">
</canvas>

<script>
  const gl = c.getContext('webgl2');
  // or 'webgpu' on modern Chrome
</script>
B

<video> / <audio>

Native media. HLS / DASH adaptive streaming via Media Source Extensions; the controls attribute hands you free UI. What killed Flash.

<video
  src="clip.mp4"
  controls muted loop
  poster="thumb.jpg">
</video>
C

<dialog> — native modal

Cross-engine in 2022. Auto top-layer, ESC-to-close, ::backdrop pseudo-element, focus trap via showModal(). Replaces ~150 lines of JS.

<dialog id="d">
  <form method="dialog">
    <button>OK</button>
  </form>
</dialog>

<script>d.showModal()</script>
D

<details> / <summary>

Native collapsible widget. The killer of the jQuery toggle. Accessibility comes for free; the open attribute is the state.

<details>
  <summary>Read more</summary>
  <p>Hidden until clicked.</p>
</details>
E

<picture> + srcset

The responsive-image standard. Retina 2× / 3×, swap sources per viewport, multi-format <source> chains (avif → webp → jpg). Stop switching images from JS.

<picture>
  <source srcset="hero.avif" type="image/avif">
  <source srcset="hero.webp" type="image/webp">
  <img src="hero.jpg" alt="…">
</picture>
F

Custom Elements + Shadow DOM

The real framework-less framework: class extends HTMLElement, register once, use like any built-in tag. Shadow DOM isolates styles; the 2023 declarative variant unlocks SSR.

<script>
class XBadge extends HTMLElement {
  connectedCallback(){ this.textContent = '!' }
}
customElements.define('x-badge', XBadge);
</script>
<x-badge></x-badge>
G

Popover API

Cross-browser in 2024. Add popover to any element, trigger via popovertarget. Automatic top-layer, no z-index battles; bubbles, tooltips and menus all in one mechanism.

<button popovertarget="menu">Open</button>
<div id="menu" popover>
  I float above everything.
</div>
H

ARIA — accessibility patching

The patch layer for when native semantics aren't enough: role, aria-label, aria-expanded"The best ARIA is no ARIA" — reach for the right native element first.

<div
  role="button"
  tabindex="0"
  aria-pressed="false">
  Toggle
</div>

// vs just <button>: free + correct

Semantics vs ARIA — clear priority

The first of the "5 rules of ARIA" is literally "don't add ARIA if a native element does it". <button> brings keyboard, focus and an accessible name for free; <div role="button" tabindex="0"> is equivalent only after three attributes. ARIA is a patch layer, not a structural one.

"The first rule of ARIA is: don't use ARIA. — W3C ARIA Authoring Practices"

05

Semantic vs Div Soup : LiveDemo

The two boxes look almost identical, but the HTML behind them is wildly different. A screen reader reads the left as "article, heading, time, navigation, ..." and the right as "section, section, ..." — the gap between semantics and zero semantics. Live-rendered, not screenshots.

Semantic HTMLEach tag declares what it is
<article>
  <header class="demo-header">
    <h2>HTML reabsorbs JS</h2>
    <time datetime="2026-04">2026-04</time>
  </header>
  <nav class="demo-nav">
    <a href="#">spec</a>
    <a href="#">mdn</a>
  </nav>
  <p>Popover, dialog, view transitions…</p>
  <details>
    <summary>One more thing</summary>
    <p>Declarative shadow DOM.</p>
  </details>
  <footer class="demo-footer">CC-BY</footer>
</article>

HTML reabsorbs JS

Popover, dialog, view transitions all moved into the platform.

One more thing

Declarative shadow DOM lets server-rendered Web Components hydrate cleanly.

CC-BY
Div soup — anti-patternLooks the same, zero meaning
<div class="div-soup">
  <div class="h-fake">HTML reabsorbs JS</div>
  <div class="nav-fake">
    <span>spec</span>
    <span>mdn</span>
  </div>
  <div>Popover, dialog, view transitions…</div>
  <div>One more thing</div>
  <div>Declarative shadow DOM.</div>
  <div class="footer-fake">CC-BY</div>
</div>
HTML reabsorbs JS
Popover, dialog, view transitions all moved into the platform.
One more thing
Declarative shadow DOM lets server-rendered Web Components hydrate cleanly.
06

The Browser Wars : 1996 → 2026

HTML's evolution is bolted to browser market share: whoever runs the dominant engine decides which tags you can actually ship. From NN's 80% in 1996 → IE6's 92% in 2002 → Chrome's arrival in 2008 → W3C's 2019 surrender, this curve is HTML's real-world evolution rate.

Desktop browser share (estimated · StatCounter / Wikipedia composite)

One row = April global desktop share snapshot; x-axis 0–100%

1996
NN 80%
IE 12%
100%
1999
NN 35%
IE5 60%
100%
2002
IE6 92%
100%
2005
IE6 85%
FF 11%
100%
2008
IE 68%
Firefox 25%
100%
2010
IE 51%
FF 31%
Chrome 13%
100%
2013
Chrome 42%
IE 27%
FF 20%
100%
2016
Chrome 56%
IE/Edge 13%
FF 14%
Safari 13%
100%
2020
Chrome 65%
Safari 17%
100%
2023
Chrome 64%
Safari 19%
100%
2026
Chrome 65%
Safari 18%
100%
Netscape IE Firefox Chrome Safari Edge Opera / other
"

I never patented the web. I never charged royalties. If it had been proprietary, we wouldn't have it today — the web exists because it was open. HTML, URLs, HTTP — I wanted nobody to ever own them.

— Tim Berners-LeeCERN · MIT · founder of W3C · 2017 Turing Award · composite from interviews

In one line: The browser wars aren't HTML's backdrop — they're its engine. Every major version (HTML 4, HTML5, Living Standard) lines up with a share inversion: NN dies, IE freezes, Chrome cracks the dam, W3C surrenders. Market share drives the spec, not the other way around.

07

Why HTML Still Matters : WhyHTML

"HTML is legacy, ship it and move on" — the standard junior-frontend mistake. HTML in 2026 is the actively expanding edge of the web platform — popover, view transitions, declarative shadow DOM all landed in the last three years. Six reasons below for why it can't be bypassed.

Semantics give you accessibility for free

Reach for <button>, <nav>, <h1> and screen readers, keyboard tab order, SEO all come out correct for free. "The best ARIA is no ARIA" — most ARIA attributes are div soup patching itself.

<button>Save</button>  // keyboard + AT free
<div role="button" tabindex="0">...</div>
// equivalent — only after 3 ARIA fixes

Declarative beats imperative

State you can express as an attribute shouldn't live in JS. open on <dialog> is its state; popover declares popover-ness; <details open>. The core mechanism behind HTML re-absorbing JS.

<dialog open>...</dialog>
// vs: el.showModal(); + handlers

No build step, ever

HTML is the only web language that runs without compiling, transpiling, or bundling. "Open the file in a browser, refresh" — a feedback loop that has been unchanged for 25 years. TS / Rust / Swift will never offer that zero-friction.

$ open index.html
# done.

Backward compat is a rule, not a preference

1991 HTML still renders in 2026 Chrome. The WHATWG spec explicitly forbids breaking old content — the deepest difference between the web and every other platform. No deprecation cycle, only "renders forever".

// info.cern.ch (1991) — still loads
// no IE6 → Edge migration tax for HTML

Web Components — the framework-less escape hatch

Specced in 2014, completed for SSR in 2023 (declarative shadow DOM). Cross-framework reusable: one <x-rating> runs in React, Vue and plain HTML alike. The real exit ramp from React lock-in.

<x-rating value="4.5"></x-rating>
// works in any framework

microdata / JSON-LD — machine-readable web

HTML isn't only for humans: itemscope / itemprop let Google parse schema.org; JSON-LD ships inside <script type="application/ld+json">. In the AI-crawling era, this semantic layer matters more than it did in 2015.

<script type="application/ld+json">
{ "@type": "Article", "headline": "…" }
</script>
08

Ecosystem / Tools / Engines : WebPlatform

HTML isn't "a project" — it's a platform composed of the spec + three engines + docs + validators + compat data. These 12 nodes are the core daily-use anchors for front-end work in 2026.

09

vs CSS / JavaScript : TheTriad

HTML / CSS / JS form the web's three-legged stool. Putting the same job in the wrong layer is the single most common web-engineering mistake: swapping images in JS instead of srcset; using div + role instead of button; hiding via CSS instead of the hidden attribute.

HTMLCSSJavaScript
CategoryMarkup languageStyle sheet languageProgramming language
ConcernWhat it isHow it looksHow it behaves
OriginTBL · 1989 CERNHåkon Wium Lie · 1996Brendan Eich · 1995 (10 days)
Turing-complete?NoNo (CSS3 Rule 110 hacks exist; doesn't count)Yes
ParsingForgiving HTML parser · broken markup still rendersCascade + specificityECMAScript spec parser
Standards bodyWHATWG (sole since 2019)W3C CSSWGTC39 (ECMA)
VersioningNone, "Living Standard"None, level-* draftsYear-versioned (ES2024, ES2025…)
Backward compatSpec forbids breakageSpec forbids breakageSpec forbids breakage
Build toolingNone, runs as-isSass / PostCSS / Tailwindesbuild / Vite / Webpack / TS
2024+ directionRe-absorbing JS · popover / dialog / view transitionsContainer queries · :has · nestingStable ES · types via TypeScript
Substitutes / subsetsMarkdown · MDX · JSX (compile target)None · Tailwind is tooling not replacementTS / WASM / Dart
10

Outlook : TheNext5Years

HTML in 2026 isn't "waiting for the next version" — it's actively claiming JS's workload. The popover / anchor / view transitions / <selectlist> line keeps running another 3-5 years; the "must use React" surface keeps shrinking back into the platform. It's the first time in 30 years HTML is actively expanding.

HOT · 2024+

HTML re-absorbs JS — the platform theme

Almost everything HTML has added since 2024 takes the form "a thing you used to need JS for, now an attribute": popover, anchor positioning, view transitions, <dialog>, <selectlist>, scroll-driven animations. For the first time in 30 years, the HTML/CSS boundary is pushing outward.

Practical takeaway: in 2026 new pages should first ask "is there a native HTML feature for this?" before pulling in a library. The React-era "write it all yourself" reflex is a regression here.

STYLEABLE FORMS

<selectlist> goes cross-engine

Shipped in Chrome in 2025, Safari and Firefox in progress. A fully styleable native dropdown — the first time in 25 years that <select> accepts CSS. After this, the wave of "div-based custom selects" in UI libraries will recede hard.

ANCHOR

Anchor Positioning 2.0

Chrome shipped it in 2025; cross-engine convergence is in progress for 2026. Popovers and tooltips track their anchor automatically — no JS positioning, no z-index battles. Floating UI, Popper.js and friends will gradually fade — the reason they existed five years ago has gone away.

VIEW TRANSITIONS

Cross-document view transitions

Same-document view transitions went cross-browser in 2024; 2025+ focuses on cross-document (MPA) navigation — classic multi-page sites get SPA-grade fade/morph transitions without a router framework. Another reason for SPAs to exist gets carved away.