🐠 Babel is a compiler for writing next generation JavaScript.
JavaScript Other
Latest commit d76092b Jan 21, 2017 @existentialism existentialism committed with hzoo Internal: Run coverage only once (#5182)
Permalink
Failed to load latest commit information.
.github mention repl/link [skip ci] Dec 14, 2016
doc monorepo doc: Add another con (#4927) [skip ci] Dec 1, 2016
lib Update babel parser options (#4688) Oct 7, 2016
packages v6.22.2 Jan 20, 2017
scripts Update babel-types README (#4905) [skip ci] Nov 29, 2016
test Enable babel for tests (#4564) Oct 12, 2016
.editorconfig remove duplicate insert_final_newline Mar 10, 2015
.eslintignore Fix eslint (#4897) Nov 26, 2016
.eslintrc Run ESLint on test files, and fix lint errors in test files (#4732) Oct 15, 2016
.flowconfig remove kcheck, unused devDeps (#3693) Sep 2, 2016
.gitattributes Fix line endings on checkout Oct 17, 2016
.gitignore Switch to nyc, babel-plugin-istanbul & codecov-node for code coverage ( Nov 28, 2016
.mention-bot mention-bot: remove comments [skip ci] Jan 14, 2017
.travis.yml Internal: Run coverage only once (#5182) Jan 21, 2017
CHANGELOG-6to5.md i'm a terrible spellerer #777 Feb 18, 2015
CHANGELOG.md CHANGELOG for 6.22.2 Jan 20, 2017
CODE_OF_CONDUCT.md Update to Contributor Covenant v1.4 (#3515) Jun 27, 2016
CONTRIBUTING.md Fix links in CONTRIBUTING.md [skip ci] (#4989) Dec 12, 2016
Gulpfile.js Temp fix for make watch [skip ci] (#4967) Dec 8, 2016
LICENSE Update LICENSE (#5058) Jan 5, 2017
Makefile Internal: Run coverage only once (#5182) Jan 21, 2017
NPM_OWNERS Misc: update npm owners [skip ci] Aug 2, 2016
README.md Increase cache timeout to 12h for top badges Jan 17, 2017
circle.yml circle.yml: use later version of 0.10 Sep 9, 2016
lerna.json v6.22.2 Jan 20, 2017
package.json Internal: only build once on CI (#5177) Jan 20, 2017

README.md

babel

The compiler for writing next generation JavaScript.

Travis Status CircleCI Status Coverage Status Slack Status NPM Downloads

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

When your supported environments don't support certain features natively, it will help you compile it 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; it's composed of many npm packages.

Core Packages

Package Version Dependencies
babel-core npm Dependency Status
babylon npm Dependency Status
babel-traverse npm Dependency Status
babel-generator npm Dependency 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

Package Version Dependencies
babel-cli npm Dependency Status
babel-types npm Dependency Status
babel-polyfill npm Dependency Status
babel-runtime npm Dependency Status
babel-register npm Dependency Status
babel-template npm Dependency Status
babel-helpers npm Dependency Status
babel-code-frame npm Dependency 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, 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's require. Check out the docs.
  • babel-template is a helper function to make AST nodes. Instead you can pass a string representing the code you want to create rather than tediously building them using babel-types.
  • babel-helpers is a set of premade babel-template functions that are used in some babel plugins.
  • babel-code-frame is a standalone package used to generate errors that prints the source code and points to error locations.

Presets

After Babel 6, the default transforms were removed; if you don't specify any plugins/presets it 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 a regular function. Presets are just simply an array of plugins that make it easier to run a whole a set of transforms without specifying each one manually.

There are a few presets that we maintain officially.

Package Version Dependencies
babel-preset-es2015 npm Dependency Status
babel-preset-es2016 npm Dependency Status
babel-preset-es2017 npm Dependency Status
babel-preset-latest npm Dependency Status
babel-preset-stage-0 npm Dependency Status
babel-preset-stage-1 npm Dependency Status
babel-preset-stage-2 npm Dependency Status
babel-preset-stage-3 npm Dependency Status
babel-preset-react npm Dependency Status
babel-preset-env npm Dependency Status

We maintain:

  • a preset for each yearly release of ECMAScript (Javascript) starting from ES6/ES2015.
  • a preset for react (JSX/Flow).
  • a preset for each stage (0-3) of the TC-39 Process for ECMAScript proposals.
  • a preset that can automatically determine 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

Babel Daniel Tschinder Logan Smyth Henry Zhu
Babel Daniel Tschinder Logan Smyth Henry Zhu
:octocat: @babel @danez @loganfsmyth @hzoo
🐦 @babeljs @TschinderDaniel @loganfsmyth @left_pad

Members

Andrew Levine Boopathi Rajaa Brian Ng Dan Harper Diogo Franco
Andrew Levine Boopathi Rajaa Brian Ng Dan Harper Diogo Franco
@drewml @boopathi @existentialism @danharper @kovensky
@drewml @heisenbugger @existentialism @DanHarper7 @kovnsk
Juriy Zaytsev Kai Cataldo Moti Zilberman Sven Sauleau
Juriy Zaytsev Kai Cataldo Moti Zilberman Sven Sauleau
@kangax @kaicataldo @motiz88 @xtuc
@kangax @kai_cataldo @motiz88 @svensauleau

Inactive members

Amjad Masad James Kyle Jesse McCarthy Sebastian McKenzie (Creator)
Amjad Masad James Kyle Jesse McCarthy Sebastian McKenzie
@amasad @thejameskyle @jmm @sebmck
@amasad @thejameskyle @mccjm @kittens

License

MIT