Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP Post #1014

Merged
merged 12 commits into from Dec 7, 2016
Merged

WIP Post #1014

merged 12 commits into from Dec 7, 2016

Conversation

hzoo
Copy link
Member

@hzoo hzoo commented Nov 30, 2016

Might want to view the rendered form

Still WIP but wanted feedback on the generic topics covered, edits

Many TODOs 馃槄

  • team/project health
  • contributing: rfcs, governance, etc
  • where to contribute
  • explain each section more for those without the context
  • plugin ecosystem (how we can help)
  • speed (of parser, individual plugins, general transformation, generator)


## Project Maintenance

Maintaining any large open source project could deserve it's own article, but Babel itself covers a lot of ground: core packages, plugins, build integrations such as gulp, webpack, etc (many of which we ourselves may not use), and more. We want to be able to support community plugins, presets, and ideas.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it's >> its


Maintaining any large open source project could deserve it's own article, but Babel itself covers a lot of ground: core packages, plugins, build integrations such as gulp, webpack, etc (many of which we ourselves may not use), and more. We want to be able to support community plugins, presets, and ideas.

Babel has it's place in many tutorials, guides, talks, etc for various frameworks. The project itself has definetely helped me to understand the language better through bug fixes and support questions. We are active on twitter, slack, and github across other projects that use Babel. We have to balance new features, bug fixes, browser support, speed of compilation/generated code, plugin options, ease of use, working with individuals, big companies, libraries, and more.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • it's >> its
  • definetely >> definitely
  • Probably capitalize Twitter, Slack, and Github?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And JavaScript


Babel has it's place in many tutorials, guides, talks, etc for various frameworks. The project itself has definetely helped me to understand the language better through bug fixes and support questions. We are active on twitter, slack, and github across other projects that use Babel. We have to balance new features, bug fixes, browser support, speed of compilation/generated code, plugin options, ease of use, working with individuals, big companies, libraries, and more.

I believe our main goal is to make it possible to write Javascript in any environment you support as seamless as possible and through that support the future of Javascript tooling.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Javascript >> JavaScript

@hzoo hzoo changed the title Future blog post WIP: Future blog post Nov 30, 2016

### Maintaining Babel plugins [for each proposal in TC-39](https://github.com/tc39/proposals) starting from stage-0

Users should be able to easily use features before they are actually released in browsers in stage 4.
Copy link
Member

@DrewML DrewML Nov 30, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could make stage 4 a link to the process document for those unfamiliar with the significance of the stages (or just include it somewhere?)


Users should be able to easily use features before they are actually released in browsers in stage 4.

This is the core of Babel. It had it's start as a JavaScript transpiler for ES6 back when it was still called 6to5.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it's >> its


> A good example: [babel/babel#3473](https://github.com/babel/babel/pull/3473) wasn't merged for so long because just didn't have time to review it. By the time it was merged it had already moved from stage-2 to stage-3.

### Maintaining other ecosystem plugins: like JSX/Flow.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can probably drop like here

- [React plugins](https://babeljs.io/docs/plugins/#react)
- [Flow plugin](https://babeljs.io/docs/plugins/transform-flow-strip-types)

### Autoprefixer for Babel via [babel-preset-env](https://github.com/babel/babel-preset-env)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could add something into this paragraph about how (at least part of) the goal of efforts like preset-env and dynamic polyfill injection is to lessen the size of the payload everyone is shipping down to the client.


> Some transforms are simply out of date (one example is decorators) and Logan had to make [babel-plugin-transform-decorators-legacy](https://github.com/loganfsmyth/babel-plugin-transform-decorators-legacy) for the previous version and no one has had time for an update.

> A good example: [babel/babel#3473](https://github.com/babel/babel/pull/3473) wasn't merged for so long because just didn't have time to review it. By the time it was merged it had already moved from stage-2 to stage-3.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"because we just didn't"


[jscodeshift](https://github.com/facebook/jscodeshift), [js-codemod](https://github.com/cpojer/js-codemod), [Lebab](https://github.com/lebab/lebab).

By passing in recast in the options, Babel can also be run on source code and can power the future of codemods. This feature was just made possible so looking forward to making it easier to do and the transformations it can enable.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you provide a link to more info about what you mean by "passing in recast in the options"?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"This feature was just made possible, so we're looking forward to making it easier to use and seeing the transformations it can enable"

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah good idea - and even just now https://twitter.com/left_pad/status/803817402983124992 - would be interesting if we could provide a codemod for stage-x to make it "safer".

### API Documentation / Community

Meetups, tutorials, videos, open source workshops, etc.
Docs should be explaining each feature and possible usages, improved links to books, articles, etc.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Docs should explain each ..."

Docs should be explaining each feature and possible usages, improved links to books, articles, etc.

- All plugins should have examples/repl links. Can also embed runkit.
- Update Learn ES2015 to have ES2015+.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These sound like future items of work. Does this still belong in the "Current Status" section?


### Documentation/Website

Definetely has been lacking in contributors the [last year](https://github.com/babel/babel.github.io/graphs/contributors?from=2015-11-29&to=2016-11-29&type=c).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Definetely >> definitely


### Maintaining Babel plugins [for each proposal in TC-39](https://github.com/tc39/proposals) starting from stage-0

Users should be able to easily use features before they are actually released in browsers in stage 4.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd say implemented rather than released


In short, proposal champions won't be getting much feedback if no one is actually trying them out in actual code. Babel is a fundamentally important step to the TC-39 process given familiarity in the ecosystem, a simple config change in most people's build process rather than through browser flags, and relative ease of implementation vs. native implementation.

This isn't just a one-time thing as we've found out, especially for early stage proposals. The creation of a plugin means the eventual maintenance of that same plugin. Proposals could completely change in syntax or even get dropped. Since TC-39 meets every 2 months, the plugins should be updated as meetings happen so that users can be in sync and involved with the standards process.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This might be an ok time to mention this rule of thumb

My rule of thumb on how I decide what future features to transpile:
"Could I reasonably codemod this if it changes?"
Don't do it otherwise.

Something like that anyway.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

People using features too soon can actually prevent the TC39 from reasonably making improvements (changes) to it if the migration would be too great.

Copy link
Member

@DrewML DrewML Nov 30, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We're actually discussing (or were, in Slack) starting to make it feel a bit more "scary" to use Stage 0 transforms, just so people are super aware what they're about to do. Big red warnings on docs pages was going to be a start to it.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What if instead of stage-0, stage-1 we called them super-dangerous pretty-dangerous, etc :)

Copy link
Member

@DrewML DrewML Nov 30, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Honestly, I personally would love that. You have to acknowledge what you're doing everytime you open up package.json/.babelrc


### Minification

[babel/babili](https://github.com/babel/babili) was created as a future proof minifier.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why was this never changed to babel-minify? 馃槮


[jscodeshift](https://github.com/facebook/jscodeshift), [js-codemod](https://github.com/cpojer/js-codemod), [Lebab](https://github.com/lebab/lebab).

By passing in recast in the options, Babel can also be run on source code and can power the future of codemods. This feature was just made possible so looking forward to making it easier to do and the transformations it can enable.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Link up recast so people can learn about what it is?


### Code Coverage / Instrumentation

With tools like [nyc](https://github.com/istanbuljs/nyc) and [babel-plugin-instanbul](https://github.com/istanbuljs/babel-plugin-istanbul).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should probably also mention babel-plugin-__coverage__ which is my preferred version when I'm using Karma. Though that was several months ago.. Maybe babel-plugin-istanbul is better

Oh, also babel-plugin-instanbul should be babel-plugin-istanbul

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

babel-plugin-istanbul seems to be the new one (also based on the work from that plugin) dtinth/babel-plugin-__coverage__#42.

Were using it in babel now as well babel/babel#4885


### [Plugin API Changes](https://github.com/babel/notes/blob/master/2016-08/august-01.md#potential-api-changes-for-traversal)

Currently many users have trouble with plugin/preset ordering and it's very confusing what plugin is run before/after and how to make it do so. This is a fundamental change to the core of Babel which will take some work to figure out.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Boy isn't that the truth!


Integrate with a type system such as flow/typescript to make optimizations.

> Sidenote: Be able to understand typescript syntax (similar to flow), add a plugin to strip typescript types for better interop.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This would be huge! And would require quite a bit of effort. Should probably be more than a sidenote.


### Run [tc39/test262](https://github.com/tc39/test262)

Running official spec tests against Babel to make sure we comply to the spec or at least know when we don't.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This would be pretty sweet


### Smoke Tests

[motiz88/babel-smoke-tests](https://github.com/motiz88/babel-smoke-tests).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should describe this a bit more I think. So people know what it means without having to click the link.


### Program Analysis

- [Program Slicing](https://en.wikipedia.org/wiki/Program_slicing) with [slice-js](http://slides.com/kentcdodds/faster-javascript#/)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wahoo! 馃帀


### [Plugin API Changes](https://github.com/babel/notes/blob/master/2016-08/august-01.md#potential-api-changes-for-traversal)

Currently many users have trouble with plugin/preset ordering and it's very confusing what plugin is run before/after and how to make it do so. This is a fundamental change to the core of Babel which will take some work to figure out.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if I'm capturing the essence of what you're trying to say: "Currently many users have trouble with plugin/preset sequencing (i.e., how to make a plugin run before/after another plugin)"


> Sidenote: Be able to understand typescript syntax (similar to flow), add a plugin to strip typescript types for better interop.

### Read the dependency graph

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Non-blocker: Section casing is inconsistent with the other sections.


### Read the dependency graph

Integrate with other tools like webpack/bundlers? This will allow cross file transformations or whole codebase optimizations.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Examples of the cross-file transformations or whole codebase transformations?


### Smoke Tests

[motiz88/babel-smoke-tests](https://github.com/motiz88/babel-smoke-tests).

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Short description like you did in the other sections?


### `babel --debug`

Print out all info when erroring. Also perf tooling to get more info on how long each plugin takes.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should "Also perf tooling" be "It will also include perf tooling ..."?


### Syntax plugins:

Opening the gates might lead to an ecosystem of incompatible plugins.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure what you're hinting at with opening the gates and an ecosystem of incompatible plugins. Are there any examples?


#### Pluggable Parser

There's been a lot of talk about this but not much progress. Acorn/Babylon does already support overriding parser methods (like with JSX/Flow) but were not sure we want to do this just yet. Workaround is to fork it and pass that to Babel.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"There's been a lot of talk about this but not much progress. Acorn/Babylon already supports overriding parser methods (like with JSX/Flow) but we're not sure that we want to do this just yet. A workaround is to fork it and pass that to Babel."

When you say "A workaround is to fork it," fork what exactly?

- [Call for Contributors!](https://github.com/babel/babel/issues/1347)
- [Being prepared for getting hit by a bus](https://github.com/babel/babel/issues/1888)

You might think that as [a project get more widely used](https://npm-stat.com/charts.html?package=babel-core) that more people show up to help out but like most oss projects that aren't backed by a company there is a constant issue with maintaince and sustainability; people get burned out, move on to other cool projects, or get busy with work, life, family, etc.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"You might think that as a project gets more widely used that more people show up to help out, but like most OSS projects that aren't backed by a company, there is a constant issue with maintenance and sustainability; people get burned out, move on to other cool projects, or get busy with work, life, family, etc."

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This part could use more emphasis if you don't mind going into more details. People may not realize how few maintainers are currently actively involved.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah definetely


### Documentation/Website

Definetely has been lacking in contributors the [last year](https://github.com/babel/babel.github.io/graphs/contributors?from=2015-11-29&to=2016-11-29&type=c).

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Definitely"

@mrjoelkemp
Copy link

This is going to be an awesome post. Making great progress so far! Thanks for putting this together.

@hzoo
Copy link
Member Author

hzoo commented Nov 30, 2016

Will check again tomorrow! Thanks everyone for looking it over so far 馃槉


Maintaining any large open source project could deserve its own article, but Babel itself covers a lot of ground: core packages, plugins, build integrations such as gulp, webpack, etc (many of which we ourselves may not use), and more. We want to be able to support community plugins, presets, and ideas.

Babel has it's place in many tutorials, guides, talks, etc for various frameworks. The project itself has definitely helped me to understand the language better through bug fixes and support questions. We are active on Twitter, Slack, and Github across other projects that use Babel. We have to balance new features, bug fixes, browser support, speed of compilation/generated code, plugin options, ease of use, working with individuals, big companies, libraries, and more.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: it's >> its

Babel has it's place in many tutorials, guides, talks, etc for various frameworks. The project itself has definitely helped me to understand the language better through bug fixes and support questions. We are active on Twitter, Slack, and Github across other projects that use Babel. We have to balance new features, bug fixes, browser support, speed of compilation/generated code, plugin options, ease of use, working with individuals, big companies, libraries, and more.

I believe our main goal is to make it possible to write JavaScript in any environment you support as seamless as possible and through that support the future of JavaScript tooling.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any environment? Node 0.10?


In short, proposal champions won't be getting much feedback if no one is actually trying them out in actual code. Babel is a fundamentally important step to the TC-39 process given familiarity in the ecosystem, a simple config change in most people's build process rather than through browser flags, and relative ease of implementation vs. native implementation.

This isn't just a one-time thing as we've found out, especially for early stage proposals. The creation of a plugin means the eventual maintenance of that same plugin. Proposals could completely change in syntax or even get dropped. Since TC-39 meets every 2 months, the plugins should be updated as meetings happen so that users can be in sync and involved with the standards process.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TC-39 -> TC39


## Current Status

### Maintaining Babel plugins [for each proposal in TC-39](https://github.com/tc39/proposals) starting from stage-0
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Style nit: let's consistently write "stage 0" rather than "stage-0" and same below. Or the other way around. Right now the article mixes them.


### `babel-init`

Setup Babel more easily for those still fatigued.
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


### Minification

[babel/babili](https://github.com/babel/babili) was created as a future proof minifier.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: "future-proof"

Copy link
Contributor

@jayphelps jayphelps left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall very solid.


Maintaining any large open source project could deserve its own article, but Babel itself covers a lot of ground: core packages, plugins, build integrations such as gulp, webpack, etc (many of which we ourselves may not use), and more. We want to be able to support community plugins, presets, and ideas.

Babel has its place in many tutorials, guides, talks, etc for various frameworks. The project itself has definetely helped me to understand the language better through bug fixes and support questions. We are active on twitter, slack, and github across other projects that use Babel. We have to balance new features, bug fixes, browser support, speed of compilation/generated code, plugin options, ease of use, working with individuals, big companies, libraries, and more.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

s/definetely/definitely


Babel has its place in many tutorials, guides, talks, etc for various frameworks. The project itself has definetely helped me to understand the language better through bug fixes and support questions. We are active on twitter, slack, and github across other projects that use Babel. We have to balance new features, bug fixes, browser support, speed of compilation/generated code, plugin options, ease of use, working with individuals, big companies, libraries, and more.

I believe our main goal is to make it possible to write Javascript in any environment you support as seamless as possible and through that support the future of Javascript tooling.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Required me to reread this sentence several times to understand. Perhaps rephrase.


### Typescript support

Be able to understand typescript syntax (like we do with flow), add a plugin to strip typescript types for better interop.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might want to clarify whether or not this includes semantics of TypeScript. I imagine it does not, only syntax parsing, so I would guess a number of people will wrongfully assume Babel plans to literally add real type checking support. The next section mentions using type information, but this is very very non-trivial to do for everything (basically reimplementing tsc, as you prolly realize). TypeScript, unlike Flow, also requires runtime code for certain features like Enums, so it's not just stripping of types. Summary: "understand typescript syntax" might imply type checking to people who don't clearly understand the distinction.


### Use Type Information

Integrate with a type system such as flow/typescript to make optimizations.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar to point above, might be best to clarify this a bit to not unintentionally suggest babel will actually check types, unless of course it will. 馃槺


### Smoke Tests

It would be useful to either have a reverse [greenkeeper](https://greenkeeper.io) or to run tests with master branch of Babel so that we can catch any major regressions before any release. In theory we would want to take the biggest open source projects that use babel and run their tests.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about canary builds? i.e. npm publish a canary tag of master every time it changes. Ember does this and it's amazing cause people can (and do) use it in their CI to check for upcoming breakage.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bahmutov could probably tell us about how dont-break could help accomplish this :)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah I've wanted that before and why we tried to implement canary in lerna for Babel. However we haven't tired it due to not being confident about what happens with multiple dependencies and transitive deps given Babel is composed of other packages and other projects are just 1


### Core Packages

> TODO
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reminder that this section is marked TODO 馃拑


This is a fundamental change to the core of Babel which will take some work to figure out.

### Typescript Support
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that official casing is TypeScript (with a capital T and a capital S). We should probably use that throughout.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I saw you committed a change to update caps, but you didn't capitalize the S :)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dang it haha

Copy link
Contributor

@montogeek montogeek left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just little comments, Babel future looks great!


Maintaining any large open source project could deserve its own article, but Babel itself covers a lot of ground: core packages, plugins, build integrations such as gulp, webpack, etc (many of which we ourselves may not use), and more. We want to be able to support community plugins, presets, and ideas.

Babel has its place in many tutorials, guides, talks, etc for various frameworks. The project itself has definitely helped me to understand the language better through bug fixes and support questions. We are active on twitter, slack, and github across other projects that use Babel. We have to balance new features, bug fixes, browser support, speed of compilation/generated code, plugin options, ease of use, working with individuals, big companies, libraries, and more.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Twitter, Slack and GitHub reads better :)


Babel has its place in many tutorials, guides, talks, etc for various frameworks. The project itself has definitely helped me to understand the language better through bug fixes and support questions. We are active on twitter, slack, and github across other projects that use Babel. We have to balance new features, bug fixes, browser support, speed of compilation/generated code, plugin options, ease of use, working with individuals, big companies, libraries, and more.

We want to continue to allow developers to write the latest version of Javascript in any environment. With that supporting all the tools around that: linting, minification, codemods, code coverage, etc.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

JavaScript

Copy link
Contributor

@montogeek montogeek Dec 1, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Last phrase uses that twice, one really close to the other, making the phrase hard to read, what about:

And supporting all the tools around that


Users should be able to easily use features before they are actually implemented in browsers in [stage 4](https://tc39.github.io/process-document/).

This is the core of Babel. It had its start as a javascript transpiler for ES6 back when it was still called 6to5.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

JavaScript


### Linting via [babel-eslint](https://github.com/babel/babel-eslint)

As long as you want to lint javascript with experimental features (stage x, types) that ESLint proper won't support yet.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

JavaScript


[babel/babili](https://github.com/babel/babili) was created as a future-proof minifier.

It will be continually updated to take advantage of the latest javascript features (ES2015+ aware). Each transform can be independent and also pluggable.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

JavaScript


### `babel-init`

Basically a way to setup babel easier like create-react-app does.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Babel