Photo by Yosuke Ota on Unsplash

On this page

This chapter follows A short history of JavaScript. It focuses on how the language changes today, not on every feature each edition added.

Ecma International and TC39

Ecma International publishes standards; Technical Committee 39 (TC39) owns ECMAScript. Members include browser vendors, Node representatives, and other stakeholders. Work happens in GitHub repositories and on recorded calls; consensus, not a single editor, advances proposals.

The normative document is ECMA-262. Implementations (V8, SpiderMonkey, JavaScriptCore, etc.) aim to conform. When spec text and engine behavior disagree, engines eventually align or the spec is fixed.

Proposal stages

New language features start as ideas and move through stages:

Stage Meaning
0 Strawman — idea presented to the committee
1 Proposal — problem and direction documented
2 Draft — spec text in progress; may change substantially
2.7 Implementation-ready draft — intended for implementers before stage 3
3 Candidate — spec complete; needs implementation experience and tests
4 Finished — ready for the next annual edition

Stage 4 features are scheduled into the next ECMAScript edition (for example ES2026). Stage 3 features may ship in engines under flags before the edition is published.

test262 and conformance

test262 is the official test suite for ECMA-262. Engines run it in CI. A proposal at stage 3 or 4 is expected to have test262 coverage so “implemented” means the same thing across vendors.

Your day-to-day code still needs caniuse, compat-table, or engine release notes for shipping dates — stage 4 is about the spec, not your user’s browser version.

Edition cadence vs. single version number

Since ES2015, TC39 publishes one edition per year (ES2020, ES2021, …). Each bundles finished proposals. Minor syntax you see labeled ES2024 in Babel presets maps to that year’s ECMA-262 revision.

ESNext is informal shorthand for proposals not yet in a numbered edition.

Host specs are separate

ECMA-262 defines the JavaScript language: syntax, built-in objects, semantics. It does not define:

  • The DOM (document, events) — WHATWG HTML and separate W3C/WHATWG specs
  • fetch, URL, streams in browsers — WHATWG and WICG
  • Node’s fs, process — Node documentation and WinterTC alignment work

A runtime is engine + host APIs. Confusing language with platform explains many “is this JavaScript?” questions — fetch is standardized, but not inside ECMA-262.

How to follow a proposal

Useful sources:

  • tc39/proposals on GitHub — stage and champions listed
  • TC39 notes — meeting outcomes
  • MDN — shipping status per feature

If you depend on a stage 2 feature, expect churn. Stage 3+ is safer for polyfills; stage 4 belongs in transpiler targets for older environments.

Relation to TypeScript and tools

TypeScript tracks ECMAScript and often implements stage 3 syntax behind flags. Babel uses @babel/preset-env with core-js to polyfill built-ins, and separate plugins for syntax only.

The committee optimizes for the open web’s compatibility constraints; tools optimize for your deployment target. Both layers are normal.

Next: ECMAScript versions cheat sheet. After that series, continue with JavaScript under the hood.

Check your understanding

Question 1 of 7

0 of 7 checked

  1. 1. Who maintains the normative ECMAScript document?

Search articles

Type a word to search published articles.

Open the search page