The ES5 → ES6 gap
The ES2015 (ES6) standard was finalising in 2015 with substantial novelties — let/const, arrow functions, classes, template literals, destructuring, modules, promise, async/await (ES2017). Production browsers and Node.js only supported ES5. Developers needed a transpiler converting ES6+ to compatible ES5.
6to5, launched in 2014 by Sebastian McKenzie (then a nineteen-year-old Australian), solves this. In February 2015 the project is renamed Babel to reflect broader ambition (not only ES6, but universal JavaScript translator). Version 5.0 is of 31 March 2015.
MIT licence.
Plugin architecture
Babel is structured as a pipeline:
- Parser (Acorn-based) — input code AST
- Transformations — plugins modifying the AST
- Generator — AST → target JS code
Each plugin handles a specific transformation (ES6 arrow functions → ES5 function, ES6 classes → ES5 prototype-based, etc.). Presets (preset-env, preset-react, preset-typescript) are plugin collections.
Main features
- Transpilation ES2015+, ES2016+, ES2017+, stage proposals
- Source maps for original-source debugging
- JSX transform (for React)
- Flow type stripping (static typing pre-TypeScript)
- TypeScript transform (via
@babel/preset-typescript) - Polyfills via
@babel/polyfill/core-js
Impact
Babel enables the entire generation of modern JavaScript in 2015-2020 browsers. Standard pairing with Webpack: Webpack orchestrates, Babel transpiles.
Funding: in 2017 Facebook funds the project via Open Source Collective; Sebastian McKenzie joins Meta. Babel 7 (2018) standardises a monorepo with @babel/* npm scope.
With modern browsers converging to native ES2017+ (from 2019), Babel remains critical for new proposed features (decorators, private fields, class static blocks) and legacy targeting.
In the Italian context
Ubiquitous: every React/Vue/Angular project in Italy uses Babel (often invisibly via scaffolding).
References: Babel 5.0 (31 March 2015). Sebastian McKenzie. Evolution: Babel 6 (2015), 7 (2018). MIT licence. Acorn parser. Broad plugin ecosystem.
