A History

Since JavaScript was first introduced in 1995 it has slowly evolved from basically a toy to what it is today: a language to take seriously and do serious work with. It took some time to get here. For a long time JavaScript progressed little bit by little bit. But in recent years that pace has begun to pick up as new features – features people have been asking for forever, like “real” classes – started to be considered for inclusion in the next version of JavaScript, ES61.

Of course, by that time people had started “transpiling” existing languages2, or even entirely new languages such as CoffeeScript, into JavaScript. The process of transpiling is similar to compiling but, instead of taking source code for a language and turning it into machine code (or byte code, as in Java), the source code is converted into source code for another language. It makes sense that JavaScript would be a popular target for such transpiling techniques because, as the saying goes, you can run any language you want in the browser as long as it’s JavaScript.

Moving the Language Forward

Transpiling can give us more than the ability to run other languages in a JavaScript runtime. It gives us the ability to experiment with new JavaScript language features that are not yet implemented as long as we can find a way to represent the behavior using the language features that exist today. This is what esnext is for3.

What we want is to give developers the ability to try out the proposed features in upcoming versions of JavaScript in their own applications, libraries, etc. Once there is real-world usage we will better understand how the features should work before they are set in stone, allowing us, in a real sense, to help shape the language that we use every day.

Open Source & Modular

esnext is built in the open on GitHub. It is simply a shell that combines many individual projects each meant to transpile a certain aspect of the upcoming ES6 feature set (and, eventually, ES7 and beyond). These individual parts tend to be small and focused on one new syntax, such as es6-arrow-function. Quite a few are maintained under the esnext organization on GitHub, but a growing number are not. If you’d like to contribute to the project please see the README for our TODO, or submit a Pull Request for a syntax not listed. We use Esprima’s harmony branch to parse ES6 syntax, so anything it knows how to parse is potentially something we can transpile.

The Future

As features are added and new versions are released we will post updates here. From time to time we will also post related news or generally interesting information related to the project (such as an upcoming series on how esnext works). We hope you’ll get involved by filing or fixing a bug, adding a new syntax, or just coming and saying hi in the #esnext IRC channel on Freenode. Thanks for helping us shape the future of JavaScript!

1 ECMAScript 6, ECMAScript being the standardization of JavaScript.
2 See Doppio, a JVM in CoffeeScript, Opal, a Ruby transpiler, and others.
3 For other projects with a similar aim, see Google's Traceur & Mozilla's Sweet.js.