PROGRAMMING LANGUAGES · EPISODE 3 OF 15 · 11 MIN ·

Is HTML a programming language?

Tell a room of programmers that you code in HTML, and sooner or later someone will tell you that HTML isn't real programming. It's the web's core language, the one web pages are written in.

▶ Watch on YouTubePlay the whole Programming Languages series ▶

The full story

The episode's narration, word for word. Numbers link to the sources below; timestamps play that moment.

The question 0:00

Tell a room of programmers that you code in HTML, and sooner or later someone will tell you that HTML isn't real programming. It's the web's core language, the one web pages are written in 1,2. Stack Overflow's 2025 survey found that about sixty-two per cent of the people who answered had done extensive work in HTML and CSS over the past year 3. So is HTML a programming language? To answer that fairly, we need to know where it came from, and what a browser actually does with it.

A filing problem 0:36

In March 1989, Tim Berners-Lee, a British computer scientist working at CERN, the particle physics lab near Geneva, wrote a proposal to his managers 4,5. His problem wasn't physics. It was filing. People came and went, and when two years was a typical stay, he wrote, information was constantly being lost 4. His answer was hypertext: documents joined by links you could follow from one to the next 4. He called it the Mesh at first 4. While writing the code in 1990, he settled on a better name: the World Wide Web 4.

The first browser was also an editor 1:17

In 1990 he wrote the first browser, called WorldWideWeb, on a NeXT computer 6. It wasn't only for reading, because you could edit pages and make links in it too 6. His own machine was the first server, and the first web page went up at the end of 1990, at an address later known as info dot cern dot ch 6. To describe those pages, he needed a simple language 7. In October 1991 he pointed fellow developers to a short page called HTML Tags 7,8.

Why "markup"? 1:53

The name tells you a lot. Before computers, editors marked up a manuscript by hand, writing notes for the typesetter like "heading here" or "start a new paragraph" 9. In 1969, three IBM researchers turned that idea into a computer markup language 10, and it grew into an international standard called SGML in 1986 10,11. Berners-Lee built HTML on that tradition 7,12. In December 1991 he wrote that HTML is a specific application of SGML's basic syntax, for hypertext documents with simple structure 12.

What a tag says 2:33

Here's real HTML, three lines of it 1. Each label in angle brackets is a tag, and each tag says what a piece of text is 7,1. The h1 tag says this is the top heading, and p says this is a paragraph 1. And b marks words to draw the eye, which browsers usually show in bold 13,14. Notice what's missing. There are no instructions here, no do-this-then-that, only descriptions 15,16. The web's own reference site, MDN, calls HTML a descriptive language that specifies a web page's structure 15.

The browser builds a tree 3:12

So what does a browser do with it? First it chops the text into tokens: start tags, end tags and the words between them 17,18. Then it builds a tree out of them, called the Document Object Model, or DOM, which is the page held in the computer's memory 17,19. We gave those three lines to Chrome and read back the tree it built 17. It added an html element, a head and a body that we never wrote, and it closed our paragraph for us 17,19.

Broken HTML still works 3:42

That's not Chrome being kind. It's written down 17. The HTML standard spells out how to parse a page whether it's correct or not, and the way it handles errors is well defined 17. Here the tags overlap, bold closing before italic 17. Chrome splits the italic in two, so every element nests neatly inside another 17. The point of writing that down is that browsers should build the same tree, without having to reverse-engineer each other 2.

Who writes the rules 4:15

Those rules have changed hands a few times. For its first five years, HTML was looked after at CERN and then the Internet Engineering Task Force 2. Then the World Wide Web Consortium took over, and in 1998 it decided to stop evolving HTML and move to a stricter cousin based on XML 2. In 2004, Apple, Mozilla and Opera set up their own group, the WHATWG, to keep HTML going 2. The two groups finally agreed in 2019 to keep one version of HTML, the WHATWG's living standard 2.

From tree to pixels 4:53

Once the tree is built, the browser still has work to do 18. It reads the style rules too, builds a second tree from them, and merges the two into a render tree of everything visible 18. Then it works out the size and position of every box, which is called layout, and finally paints the pixels 18. And the DOM is also the door that programs use to change the page later 19. MDN is blunt about it: the DOM is not a programming language either 19.

CSS: the paint job 5:24

Those style rules have their own language. Keeping a page's structure apart from its look had been a goal of HTML from the start 20. In October 1994, Håkon Wium Lie, also at CERN, published the first draft of what became Cascading Style Sheets, CSS 20. It became an official standard in December 1996 20. CSS is a declarative language: you state how things should look 21. Write that every h1 is orange, and Chrome works out the exact colour, as red, green and blue numbers.

The case for "no" 6:05

Now, the case for "no". Programming means writing instructions that tell a computer what to do 22. Here are four lines of JavaScript, a real programming language 23. It counts from one to three, makes a decision each time, and prints whether each number is odd or even. Plain HTML has nothing like that. It has no variables to work with, no "if" and no "repeat" 2. It labels content, and the browser decides what to do with it 1,16.

The strict test 6:39

Computer scientists also have a stricter test. In the 1930s, Alan Turing described a universal machine, an imaginary computer that can compute whatever any other such machine can 24. Most computer scientists accept that it captures everything that can be computed at all 24. A language that can do the same, given enough time and memory, is called Turing complete 25. Nearly every general-purpose programming language passes it, though a few deliberately limited ones don't 25. But on its own, HTML has no way to write a calculation step by step, so it doesn't pass.

The stunt 7:20

But people love to argue with that. A programmer named Eli Fox-Epstein built a pattern called Rule 110 out of HTML and CSS, as a "proof" that CSS is Turing complete 26. That matters, because in 2004 Matthew Cook proved that Rule 110 is capable of universal computation 27. Here's the catch. The page needs a person to keep pressing Tab and clicking boxes to move it along 26. Fox-Epstein himself puts "proof" in quotation marks, and says his first version wasn't a valid proof 26.

HTML that does things 8:00

And modern HTML does more than label. A details element hides text until you click its summary, and it's worked across browsers since January 2020 28,29. A dialog element is a pop-up box, and since late 2025, in every major browser, a plain button can open it with no script at all 30,29,31. Mark a box as an email field, and the browser refuses "hello" before the form is sent 32. And mark an image as lazy, and it loads only when it's needed 33. We checked the first three in Chrome, with a test script clicking and filling them in, and each one did its job.

Who's doing the work? 8:40

So is that programming? Look at who's doing the work. You describe what you want: a fold-out section, a pop-up, an email field 28,30,32. The browser's own built-in code does the opening, checking and loading 28,32,33. MDN even warns that these form checks don't replace checking again on the server 32. And one oddity: browsers only delay lazy images when JavaScript is switched on, to stop sites tracking how far you scroll 33.

How the experts file it 9:11

Even the experts file it loosely. MDN calls HTML a markup language, but its own page on computer programming lists HTML alongside C plus plus, Java and Python 15,1,22. Stack Overflow asks about programming, scripting and markup languages in a single question 3. In 2025, sixty-six per cent of those answering had used JavaScript, and nearly sixty-two per cent HTML and CSS, ahead of SQL and Python 3.

The fair answer 9:44

So here's the fair answer. HTML is a language. It's the L in the name, with a grammar and a parser written down to the last detail 2,17. But in the strict sense, it isn't a programming language. It describes a document, and something else does the computing 15,19,16. The jibe that it isn't real programming is technically defensible. As an insult, though, it misses something, because a well-built page is still real skill.

Next 10:13

The web did need a real programming language, though 16. In September 1995, a test version of Netscape's browser shipped one, and by December it had the name JavaScript 23,34. It became the top layer of the web, the part that makes pages behave 16. Which raises the next question. How did a language written in ten days end up running the web?

Sources

Every factual claim in the episode is tied to one of these. Spotted an error? Tell us.

  1. MDN Web Docs, Basic HTML syntax — developer.mozilla.org
  2. WHATWG, HTML Living Standard, section 1 Introduction (Background, Scope, History) — html.spec.whatwg.org
  3. Stack Overflow, 2025 Developer Survey: Technology — survey.stackoverflow.co
  4. Tim Berners-Lee, Information Management: A Proposal (CERN, March 1989, May 1990) — w3.org
  5. CERN, The birth of the Web (Wayback copy of 2 May 2026; the live page 404s) — web.archive.org
  6. Tim Berners-Lee, Frequently asked questions by the Press — w3.org
  7. Tags used in HTML (CERN page, W3C archive copy of 3 November 1992) — w3.org
  8. Tim Berners-Lee, www-talk mailing list, 29 October 1991, Re: status. Re: X11 BROWSER… — lists.w3.org
  9. TEI Consortium, TEI P5 Guidelines, A Gentle Introduction to XML (what markup is) — tei-c.org
  10. Charles F. Goldfarb, The Roots of SGML: A Personal Recollection (1996; Wayback copy,… — web.archive.org
  11. T. Berners-Lee and D. Connolly, RFC 1866, Hypertext Markup Language: 2.0 (November 1995) — rfc-editor.org
  12. Tim Berners-Lee, www-talk mailing list, 9 December 1991, Re: SGML/HTML docs, X Browser — lists.w3.org
  13. WHATWG, HTML Living Standard, the b element — html.spec.whatwg.org
  14. MDN Web Docs, the b element (Bring Attention To) — developer.mozilla.org
  15. MDN Web Docs, Glossary: HTML — developer.mozilla.org
  16. MDN Web Docs, What is JavaScript? — developer.mozilla.org
  17. WHATWG, HTML Living Standard, section 13.2 Parsing HTML documents — html.spec.whatwg.org
  18. MDN Web Docs, Populating the page: how browsers work — developer.mozilla.org
  19. MDN Web Docs, Introduction to the DOM — developer.mozilla.org
  20. Bert Bos, W3C, A brief history of CSS until 2016 — w3.org
  21. MDN Web Docs, Glossary: CSS — developer.mozilla.org
  22. MDN Web Docs, Glossary: Computer programming — developer.mozilla.org
  23. MDN Web Docs, Glossary: JavaScript — developer.mozilla.org
  24. Stanford Encyclopedia of Philosophy, Turing Machines — plato.stanford.edu
  25. Greg Michaelson, Programming Paradigms, Turing Completeness and Computational… — arxiv.org
  26. Eli Fox-Epstein, stupid-machines (Rule 110 in HTML and CSS) — github.com
  27. Matthew Cook, Universality in Elementary Cellular Automata, Complex Systems 15(1), 2004 — complex-systems.com
  28. MDN Web Docs, the details element — developer.mozilla.org
  29. W3C WebDX Community Group, web-features dataset 3.40.1 (Baseline status data) — cdn.jsdelivr.net
  30. MDN Web Docs, the dialog element — developer.mozilla.org
  31. MDN Web Docs, the button element (command and commandfor) — developer.mozilla.org
  32. MDN Web Docs, Constraint validation — developer.mozilla.org
  33. MDN Web Docs, the img element (loading attribute) — developer.mozilla.org
  34. Netscape Communications and Sun Microsystems, press release, 4 December 1995: Netscape… — web.archive.org

Researched and scripted with AI assistance, fact-checked claim by claim, with synthetic narration and diagrams drawn in code. How we make episodes.

More from Programming Languages