mrkeyoor.com_
Mon 05 Oct 06:27 UTC
Dev Toolsevaluationupdated 05 Oct 2026

babel review

Babel is a JavaScript compiler that rewrites newer syntax into code your chosen browsers or runtimes can execute. Its parser, plugin system, presets, and code generator also give tool authors a mature base for custom JavaScript and TypeScript transforms.

Verdict

Our Babel run installed 1,267 packages and took 763 seconds across install, build, and tests, with all 115 tests passing. Use Babel when exact browser targeting, established plugins, or custom AST transforms justify a dedicated compiler layer. If your bundler already emits code for every runtime you support, remove Babel before adding another preset to it.

We ran it

Lab card: what happened when we ran babelScreenshot of babel (babel.dev)
Install✓ · 33s1267 packages · 474 MB
Build✓ · 62s
Tests✓ · 668s115 passed · 0 failed of 115 (jest)
Repo27684 files~341,917 lines of source · 40.1 MB · 14 CI workflows · tests dir

Answers from our run

Does babel build from source?

Dependencies installed in 33 seconds (1267 packages), and the build succeeded in 62 seconds. We cloned commit 4f7de4f into a clean Debian container with 3 CPUs and no project-specific setup.

Do babel's tests pass?

Yes: 115 of 115 passed when we ran the project's own test command (jest). Some failures need services or credentials a bare container does not have.

Who should not use babel?

Projects whose supported runtimes already understand all shipped syntax: an extra transform stage adds configuration and source-map work without a compatibility benefit.

What are the alternatives to babel?

SWC, esbuild, Oxc. Our Babel run installed 1,267 packages and took 763 seconds across install, build, and tests, with all 115 tests passing.

Setup4/5Every step passed, though 1,267 packages make the repo heavy
Docs5/5Detailed config, preset, plugin, migration, and contributor guides
Community5/544,082 stars with October 4 push and active pull requests
Maturity5/5v8.0.6, active maintenance, and 115 of 115 tests passed

Discussed on

  1. hnBabel is used by millions, so why are we running out of money?673 points
  2. hnIf TypeScript is so great, how come all notable ReactJS projects use Babel?373 points
  3. hnBabel is why I keep blogging with Emacs272 points
  4. hnBabel 7 Released263 points
  5. hnThe State of Babel241 points

Who it’s for

Web teams that must ship current JavaScript syntax to older or mixed browser targets.
Framework and build-tool authors who need a programmable parser and transform pipeline.
Library maintainers publishing more than one JavaScript target from the same source.
Compiler contributors comfortable with ASTs, fixtures, a large Yarn workspace, and long full-suite runs.

Who it’s NOT for

Projects whose supported runtimes already understand all shipped syntax: an extra transform stage adds configuration and source-map work without a compatibility benefit.
TypeScript teams expecting compilation to replace tsc: Babel's TypeScript plugin strips syntax but explicitly does not type-check.
Developers seeking an all-in-one bundler and minifier: Babel compiles code, while tools such as esbuild and Oxc cover broader build pipelines.
Contributors limited to older Node or Yarn versions: the guide requires Node 22.18.0+ and Yarn 4.0.0+.
Small tools that cannot absorb a large contributor environment: our checkout installed 1,267 packages and occupied 474 MB.

Setup reality

Our sandbox installed commit 4f7de4f in 33 seconds, adding 1,267 packages and using 474 MB on disk. The build passed in 62 seconds. Jest then passed all 115 of 115 tests in 668 seconds.

Building needs no API key or outside service. Contributors need Node 22.18.0+, Yarn 4.0.0+, and Make; Windows users are directed to WSL 2 or the cross-platform Makefile implementation. Applications need a Babel config, plugins or presets, and explicit target environments.

This is a Yarn-workspace monorepo with 27,684 files, 14 CI workflows, and no Dockerfile. A normal app installs selected @babel packages rather than the whole source tree. Configuration discovery depends on the working directory and repository root, which deserves extra attention in monorepos.

Target environments decide whether Babel belongs in the build

Babel earns its place when source syntax and deployment runtimes do not match. @babel/preset-env reads specified targets, compares them with compatibility data, and selects the transforms those targets need. Browser projects can share the same Browserslist settings with other tools. That is more precise than compiling every modern feature for every user, and it gives teams one explicit compatibility policy.

The opposite case is just as important. If every supported browser or Node release already parses the syntax you ship, Babel may be an unnecessary stage. It can lengthen builds, complicate source maps, and create another configuration boundary. Start with the runtime list. Add the compiler for a missing capability, a required plugin, or a custom transform, rather than because a JavaScript template included it years ago.

The repository installed 1,267 packages before its clean build

commit 4f7de4f contained 27,684 files, about 341,917 lines of source, and occupied 40.1 MB before dependencies. The large file count comes with a Yarn-workspace monorepo that keeps the parser, generator, traversal tools, presets, plugins, helpers, CLI, and test fixtures together. Our scan found 14 CI workflow files, a tests directory, and no Dockerfile.

Contributor setup requires Node 22.18.0 or newer, Yarn 4.0.0 or newer, and Make. The guide points Windows 10 users toward WSL 2 or its cross-platform Makefile implementation. make bootstrap prepares the workspace, while separate commands build once, watch changes, lint, run all tests, or target one package. An application consuming @babel/core and a preset does not clone this entire contributor environment.

What happened when we ran it

Our sandbox installed commit 4f7de4f in 33 seconds, pulling 1,267 packages and consuming 474 MB on disk. The build completed successfully in 62 seconds. We ran it in an unprivileged Node 22 Debian container with 3 CPUs, 8 GB of RAM, and no secrets. No credential or outside service was needed for those steps.

Jest passed all 115 of 115 tests in 668 seconds. Install, build, and test time totaled 763 seconds, with the suite accounting for most of it. That is a clean result for the exact commit and command we ran. It does not measure transform throughput, application bundle size, or the behavior of every published package under every configuration.

The passing suite is still meaningful because Babel changes executable code. Its fixture system compares input and output, and many tests execute transformed results. Contributors can select a package or name pattern instead of paying the full 668-second cost on every edit. A final broad run remains sensible for changes that cross the parser, traversal, and generator boundaries the monorepo was designed to keep together.

Babel strips TypeScript syntax but leaves type errors alone

The official TypeScript transform documentation states that the plugin does not type-check. Syntactically valid TypeScript can therefore be transformed even when tsc would reject its types. Teams using Babel for TypeScript should run the TypeScript checker separately, usually without emitting files. Skipping that step trades away the central safety feature of the language.

Parser compatibility also needs regression coverage during major upgrades. Open issue 18264 reports that @babel/parser 8.0.4 through 8.0.6 reject a specific valid TypeScript form: an async arrow with an explicit return type inside a conditional expression. The same example parses in 7.29.9, according to the report. The report covers one narrow case. It can still stop a tool that parses an entire source tree.

Configuration roots can surprise a monorepo

Babel supports project-wide babel.config.* files and file-relative .babelrc.* files. Its documentation warns that the current working directory affects how the project root and config files are found. A command launched from a package subdirectory may not load the root configuration unless the caller sets the root behavior correctly. This is the sort of failure that looks like a broken plugin while the real problem is config discovery.

Targets deserve the same discipline. preset-env can use Browserslist sources unless explicit targets override them. Polyfill behavior is optional and depends on configuration rather than appearing automatically in every transform. Check the emitted code, browser matrix, and source maps in CI. A config that merely runs without an error has not proved that it serves the intended runtimes.

Version 8.0.6 is active, volunteer-maintained infrastructure

Babel 8.0.6 shipped on September 18, 2026. The release updated identifier handling to Unicode 18, fixed Flow parsing and an invalid binary-literal error message, and changed internals across many packages. GitHub showed 44,082 stars, 772 open issues and pull requests combined, and a repository push on October 4. Pull requests were still moving on October 5.

The README says a handful of volunteers maintain Babel, with community funding and company contributions. The recent release and issue activity show current work, while the 772-item combined queue shows how much surface they carry. Babel remains the conservative choice when plugin compatibility and exact transforms matter. Our green 115-test run supports that judgment, but the 474 MB workspace and 668-second suite belong in contributor planning.

Alternatives

ProjectWhat it isPick it when
SWC gh↗A Rust-based JavaScript and TypeScript compiler used in modern web toolchains.pick this instead when transform speed and a Rust implementation matter more than Babel's plugin ecosystem.
esbuild gh↗A JavaScript and TypeScript bundler with built-in transforms and minification.pick this instead when one fast tool should bundle, transform, and minify a conventional application.
Oxc gh↗A Rust collection of JavaScript parser, transformer, linter, minifier, and resolver tools.pick this instead when you are building a newer Rust-based toolchain and can accept a smaller compatibility history.

What people are saying

  1. [velocity-scout] babel/babel

Sources

  1. Babel README
  2. Babel contributor guide
  3. Babel 8.0.6 release notes
  4. Babel preset-env documentation
  5. Babel TypeScript transform documentation
  6. Babel configuration file documentation
  7. Babel 8 TypeScript parser regression report

More dev tools reviews

learning-python · github-launch-checklist · blitzstrike · AirCard · github-ranking-audit · gpt_sub_analysis · the whole board →