Babel is a JavaScript compiler.

Use next generation JavaScript, today.

Install the CLI and env preset

npm install --save-dev babel-cli babel-preset-env

Create a .babelrc file (or use your package.json)

{
  "presets": ["env"]
}

To setup Babel with a specific build system, check out our interactive setup guide.

Friends of Open Source

These companies are being awesome and paying their engineers to work on Babel

The leading online platform to showcase & discover creative work.

sponsoring @hzoo

The AMP Project is an open-source initiative aiming to make the web better for all.

sponsoring @jridgewell


Open Collective Sponsors

Gold

Become a sponsor

Silver

Become a sponsor

Bronze

Become a sponsor

ES2015 and beyond

Babel has support for the latest version of JavaScript through syntax transformers. These plugins allow you to use new syntax, right now without waiting for browser support. Check out our env preset to get started.

You can install this preset with

npm install --save-dev babel-preset-env

and add "env" to your .babelrc presets array.


Polyfill

Since Babel only transforms syntax (like arrow functions), you can use babel-polyfill in order to support new globals such as Promise or new native methods like String.padStart (left-pad). It uses core-js and regenerator. Check out our babel-polyfill docs for more info.

You can install the polyfill with

npm install --save-dev babel-polyfill

Use it by requiring it at the top of the entry point to your application or in your bundler config.


JSX and Flow

Babel can convert JSX syntax and strip out type annotations. Check out our React preset to get started. Use it together with the babel-sublime package to bring syntax highlighting to a whole new level.

You can install this preset with

npm install --save-dev babel-preset-react

and add "react" to your .babelrc presets array.

export default React.createClass({
  getInitialState() {
    return { num: this.getRandomNumber() };
  },

  getRandomNumber(): number {
    return Math.ceil(Math.random() * 6);
  },

  render(): any {
    return <div>
      Your dice roll:
      {this.state.num}
    </div>;
  }
});

Learn more about JSX and Flow


Pluggable

Babel is built out of plugins. Compose your own transformation pipeline using existing plugins or write your own. Easily use a set of plugins by using or creating a preset. Learn more →

Create a plugin on the fly with astexplorer.net or use generator-babel-plugin to generate a plugin template.

// A plugin is just a function
export default function ({types: t}) {
  return {
    visitor: {
      Identifier(path) {
        let name = path.node.name;
        // reverse the name: JavaScript -> tpircSavaJ
        path.node.name = name.split('').reverse().join('');
      }
    }
  };
}

Debuggable

Source map support so you can debug your compiled code with ease.

Debuggable Sourcemaps

Who's using Babel?