ECMAScript Versions Reference

ES5 through ES2025 feature list with what each edition introduced

Searchable ECMAScript version reference from ES5 to ES2025. Look up the year of each edition and the major language features it introduced, from let/const and arrow functions to iterator helpers and Set methods.

Why is ES6 also called ES2015?

ES6 was the sixth edition of the ECMAScript standard, ratified in June 2015. From that release onward TC39 switched to a yearly cadence and named editions by their year, so ES6 is officially ES2015, ES7 is ES2016, and so on. Both names refer to the same standard.

ECMAScript is the standard that JavaScript implements, and since 2015 it has been released on a strict yearly schedule with editions named by their year. Knowing which edition introduced a feature tells you how widely it is supported and what transpile target you need. This reference lists every edition from ES5 to ES2025 with the major features each one shipped.

How it works

The first edition most developers care about is ES5 (2009), which gave us strict mode, the functional array methods and native JSON. ES2015 (ES6) was the watershed release — block scoping, arrow functions, classes, promises, modules and the Map/Set collections all arrived at once. After ES2015, TC39 adopted a yearly cadence: each June a new edition ratifies whatever proposals have reached Stage 4, the final stage of the four-stage proposal process. That is why later editions are smaller and more focused, each adding a handful of well-defined features rather than a sweeping overhaul.

A proposal only enters the standard once it has two independent implementations and passes the official test262 conformance suite, so the year shown for each edition is the year those features became part of the language, not the year they first appeared behind a flag in a single engine.

Tips and notes

Use the release year to choose a transpilation target: tools like Babel and TypeScript can down-level newer syntax for older runtimes, but features that need runtime support (such as BigInt or WeakRef) cannot be polyfilled cleanly and require an engine new enough to implement them natively. When in doubt, target one or two editions behind the current year for the broadest reach.