babel

The compiler for writing next generation JavaScript.

Travis StatusCircleCI StatusCoverage StatusSlack Statusnpm Downloads

Backers on Open CollectiveSponsors on Open CollectiveBusiness Strategy Status

Babel is a community-driven tool that helps you write code in the latest version of JavaScript.

When your supported environments don't support certain features natively, Babel will help you compile those features down to a supported version.

In

// ES2015 arrow function
[1, 2, 3].map((n) => n + 1);

Out

[1, 2, 3].map(function(n) {
  return n + 1;
});

Try it out at our REPL and follow us at @babeljs.

FAQ

Docs?

Check out our website: babeljs.io

Looking for support?

For questions and support please visit our discussion forum, sign up for our Slack community, or StackOverflow.

Want to report a bug or request a feature?

Bugs and feature requests can be posted at https://github.com/babel/babel/issues.

We've moved our issues from phabricator back to github issues!

Former phabricator issue URLs now automatically redirect to their corresponding Github issue:

https://phabricator.babeljs.io/T2168 mostly corresponds to https://github.com/babel/babel/issues/2168.

Want to report an issue with babeljs.io (the website)?

For documentation and website issues please visit the babel/babel.github.io repo.

Want to contribute to Babel?

Check out our CONTRIBUTING.md. If you have already joined Slack, join our #development channel!

You can also start by checking out the issues with the help-wanted label.

Our discussions/notes/roadmap: babel/notes

Packages

The Babel repo is managed as a monorepo that is composed of many npm packages.

Core Packages

PackageVersionDependencies
babel-corenpmDependency Status
babylonnpmDependency Status
babel-traversenpmDependency Status
babel-generatornpmDependency Status

babel-core is the Babel compiler itself; it exposes the babel.transform method, where transformedCode = transform(src).code.

The compiler can be broken down into 3 parts:

  • The parser: babylon (moved to a separate repo and versioned independently)
  • The transformer[s]: All the plugins/presets
  • The generator: babel-generator

The flow goes like this:

input string -> babylon parser -> AST -> transformer[s] -> AST -> babel-generator -> output string

Check out the babel-handbook for more information on this.

Other

PackageVersionDependencies
babel-clinpmDependency Status
babel-typesnpmDependency Status
babel-polyfillnpmDependency Status
babel-runtimenpmDependency Status
babel-registernpmDependency Status
babel-templatenpmDependency Status
babel-helpersnpmDependency Status
babel-code-framenpmDependency Status
  • babel-cli is the CLI tool that runs babel-core and helps with outputting to a directory, a file, stdout and more (also includes babel-node). Check out the docs.
  • babel-types is used to validate, build and change AST nodes.
  • babel-polyfill is literally a wrapper around core-js and regenerator-runtime. Check out the docs.
  • babel-runtime is similar to the polyfill except that it doesn't modify the global scope and is to be used with babel-plugin-transform-runtime (usually in library/plugin code). Check out the docs.
  • babel-register is a way to automatically compile files with Babel on the fly by binding to Node.js require. Check out the docs.
  • babel-template is a helper function that allows constructing AST nodes from a string presentation of the code; this eliminates the tedium of using babel-types for building AST nodes.
  • babel-helpers is a set of pre-made babel-template functions that are used in some Babel plugins.
  • babel-code-frame is a standalone package used to generate errors that print the source code and point to error locations.

Presets

After Babel 6, the default transforms were removed; if you don't specify any plugins/presets, Babel will just return the original source code.

The transformer[s] used in Babel are the independent pieces of code that transform specific things. For example: the es2015-arrow-functions transform specifically changes arrow functions into regular functions. A preset is simply an array of plugins that make it easier to run a whole a set of transforms without specifying each one manually.

PackageVersionDependenciesDescription
babel-preset-envnpmDependency Statusautomatically determines plugins and polyfills you need based on your supported environments

You can find community maintained presets on npm

Plugins

Plugins are the heart of Babel and what make it work.

You can find community plugins on npm.

Transform Plugins

There are many kinds of plugins: ones that convert ES6/ES2015 to ES5, transform to ES3, minification, JSX, flow, experimental features, and more. Check out our website for more.

Syntax Plugins

These just enable the transform plugins to be able to parse certain features (the transform plugins already include the syntax plugins so you don't need both): babel-plugin-syntax-x. Check out our website for more.

Helpers

These are mostly for internal use in various plugins: babel-helper-x.

Team

Core members

BabelDaniel TschinderLogan SmythHenry Zhu
BabelDaniel TschinderLogan SmythHenry Zhu
:octocat: @babel@danez@loganfsmyth@hzoo
🐦@babeljs@TschinderDaniel@loganfsmyth@left_pad

Members

Andrew LevineBoopathi RajaaBrian NgDan Harperdiogo francoAaron AngArtem Yavorsky
Andrew LevineBoopathi RajaaBrian NgDan HarperDiogo FrancoAaron AngArtem Yavorsky
@drewml@boopathi@existentialism@danharper@kovensky@aaronang@yavorsky
@drewml@heisenbugger@existentialism@DanHarper7@kovnsk@_aaronang@yavorsky_
Juriy ZaytsevKai CataldoMoti ZilbermanSven SauleauSamuel ReedSergey Rubanov
Juriy ZaytsevKai CataldoMoti ZilbermanSven SauleauSamuel ReedSergey Rubanov
@kangax@kaicataldo@motiz88@xtuc@STRML@chicoxyzzy
@kangax@kai_cataldo@motiz88@svensauleau@STRML_@chicoxyzzy

Non-Human Members

Babel Bot
@babel-bot
@babeljs

Inactive members

Amjad MasadJames KyleJesse McCarthySebastian McKenzie(Creator)
Amjad MasadJames KyleJesse McCarthySebastian McKenzie
@amasad@thejameskyle@jmm@sebmck
@amasad@thejameskyle@mccjm@kittens

Backers

Support us with a monthly donation and help us continue our activities. [Become a backer]

Sponsors

Become a sponsor and get your logo on our README on Github with a link to your site. [Become a sponsor]

License

MIT