Ecma Technical Committee 39 (TC39) evolves ECMAScript and makes decisions by consensus. Every change starts as a proposal with a public repository (the list lives at github.com/tc39/proposals (https://github.com/tc39/proposals 19,196 )) and climbs through numbered stages. Stage 2.7 was inserted in November 2023 so that tests are written before engines start implementing.
| Stage | Meaning | Needed to enter |
|---|---|---|
| 0 | New idea, not yet considered | Nothing |
| 1 | Under consideration: design a solution | A champion, problem statement, public repo |
| 2 | Preferred solution chosen; draft design | Initial spec text for all major semantics |
| 2.7 | Approved in principle; testing | Complete spec text, reviewers' sign-off |
| 3 | Recommended for implementation | Test262 2,825 tests, pre-implementation experience |
| 4 | Finished; joins the next edition | Two compatible shipping implementations, editors' sign-off |
Test262 is the shared conformance test suite. At Stage 3 the design is complete and engines implement it to uncover web-compatibility problems. Stage 4 requires two implementations passing the tests plus real-world experience, and the editors merge the pull request into the draft specification.
Each June's edition is a snapshot of the draft taken months earlier: Upsert (Map.prototype.getOrInsert()) reached Stage 4 in January 2026 and made ECMAScript 2026; Temporal reached it in March 2026 and waits for ECMAScript 2027, though engines may ship it sooner. In practice, support in your target browsers and runtimes matters more than the stage: check MDN 102 's compatibility tables, and remember that a transpiler can rewrite new syntax but cannot polyfill every new built-in.