ECMAScript 2026 and the TC39 Standardisation Process
An edition every June
ECMA-262, the specification behind JavaScript, is approved by the Ecma General Assembly each June. The edition is named for its year: ES2023, ES2024, ES2025, ES2026.
The release train model was adopted after ES2015, which took six years and grew enormous. The lesson was the same one Java and other platforms drew around the same time: a fixed date with variable content beats a fixed scope with a variable date.
The practical consequence is that the size of an edition varies considerably. Some years bring a long list, others only a handful of small additions. Neither says much about the health of the language.
The stage process
Every feature moves through five stages inside TC39, the committee that maintains the standard.
| Stage | Name | What it means |
|---|---|---|
| 0 | Strawperson | An idea, written down |
| 1 | Proposal | A champion is assigned; the problem and rough shape are agreed |
| 2 | Draft | Specification text exists; syntax and semantics are broadly settled |
| 2.7 | Testable | Spec text is complete and conformance tests are written |
| 3 | Candidate | Ready for implementation; feedback now comes from implementers and users |
| 4 | Finished | Two independent implementations, tests passing, ready for the next edition |
A proposal reaching stage 4 before the committee’s spring cut-off appears in that year’s edition. Missing it simply means waiting for the next.
Why the edition number misleads
Browsers do not wait for stage 4. Implementations usually start at stage 3, which is the whole point of that stage - implementer feedback is how design problems get found.
So a feature can be shipping in every major browser a year before it formally appears in an edition. By the time ES2026 is approved, most of its contents will already be in production use.
This is why the practical question is never “which edition is this in” but “what is the support matrix”. A compatibility table is more useful than a specification date.
Recent additions
Features that reached stage 4 in recent cycles illustrate the direction of travel:
- Iterator helpers, bringing
map,filter,takeanddropto iterators without materialising arrays. - Set methods such as
union,intersectionanddifference. Promise.try, for starting a promise chain from a function that might throw synchronously.RegExp.escape, for safely embedding a string in a pattern.- Import attributes and JSON modules, standardising how non-JavaScript resources are imported.
- Explicit resource management with
usingdeclarations, giving deterministic cleanup.
const firstTen = someInfiniteIterator()
.filter(x => x % 2 === 0)
.map(x => x * x)
.take(10)
.toArray();
Longer-running proposals such as Temporal, the replacement for the Date API, and decorators have spent
extended periods at stage 3 precisely because implementation surfaces problems that need resolving before
they are locked in.
Adopting features safely
- Check the support matrix, not the edition. Compatibility tables reflect reality; edition numbers reflect committee process.
- Know your transpilation target. Build tools let you write modern syntax and emit older output, but new built-in methods need polyfills rather than syntax transforms.
- Be cautious with stage 3. It is stable enough to experiment with and unstable enough to change. Using it in a library that others depend on is riskier than using it in an application you control.
- Watch Node.js as well as browsers. Server-side support arrives with V8 upgrades in each Node major, which is a different schedule from the browser release trains.
Conclusion
ECMAScript’s annual June edition is a snapshot of what finished, not an announcement of what is newly available. The stage process is the real timeline: proposals become implementable at stage 3, ship in engines soon after, and are formally recorded at stage 4 in the following edition. Track the stages and the support matrix, and treat the edition number as a historical label.