ES6 vs ES2015 - What to call a JavaScript version?

You see both ES6 and ES2015 names used for the version of JavaScript that introduces arrow functions, template strings, and Promises. You'd like to get things right. Which name is correct? What name should you use?

Officially it's ECMAScript 2015 Language

Officially, the name is "ECMAScript 2015 Language" and it's the 6th Edition of the ECMA-262 standard. The specification mentions neither ES6 nor ES2015, though they are handy abbreviations. Before deciding which name to use, let's inspect the release process a little closer.

Is it ECMAScript or JavaScript? In everyday life, you can use the terms ECMAScript and JavaScript interchangeably. ECMAScript is a specification of a language. JavaScript is an implementation of that language among JScript and ActionScript. The language specification deals with abstract concepts such as "[[GetPrototypeOf]] internal slot" while JavaScript has a concrete getPrototypeOf method.

Yearly releases

ECMAScript release history
The ECMAScript release process moves from monolithic releases to individual features.

Including year in the specification name signifies a change in the release process. Previous versions have been gigantic and have been released many years apart. ES6 is the last big release, and future versions will be smaller, and they will be released more frequently.

So far, the trend has been to release a new version each year. In 2016, a year after the previous release, the 7th edition of ECMAScript was released. It contained two new language features. Similarly, 2017 had six new features, and 2018 had eight new features. You can check all versions from TC39 finished proposals.

New features in JS engines before in ECMAScript standard

A new language feature goes through many phases before being included in the specification. It grows from an idea into a commented proposal and into an accepted language feature. Periodically, the committee responsible for the ECMAScript specification collects accepted language features and writes an updated edition of the ECMAScript specification.

In the last stage, before the feature being accepted into the language, the committee requires that two shipping VMs exist that implement the feature. This means that Chrome and Firefox can implement a language feature before it's included in an official ECMAScript specification.

The 'implementation first'-approach means that you will be checking if a JS engine supports a specific language feature instead of supporting a specific ECMAScript version. The situation is similar to CSS, HTML, and browser runtime environment. Instead of checking for a version number, you'd check if Intersection Observer API works in your choice of browsers.

What name to use?

The ECMAScript 2015 Language version was the last big release. Future updates to the specification will be smaller. New language features will be implemented in JavaScript engines before they are officially included in the specification.

You should talk about

  • use ES6 to refer to "ECMAScript 2015 Language" (arrow functions, template strings, Promises), it's shorter than ES2015, and both are unofficial, ES6 was the last big release, and the name is in line with the previous big release ES5, things change after that
  • after ES6, use names of language features, such as "globalThis" and "Array.prototype.flatMap", the specification is only updated after working implementations exist in JS engines, check TC39 Finished Proposals for a list of features to be included in the next specification
  • for historically referring one year's updates to the ECMAScript specification use ES[year]

Related articles

Node doesn't wait for your database call to finish?

Node doesn't wait for your database call to finish?

Learn how asynchronous calls work and make your app run as you intended. Get short email course on asynchronicity and two chapters from Finish Your Node App.