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