
esbuild is a bundler and minifier for JavaScript and TypeScript, written in Go and distributed as a native binary with no dependency tree to install. It parses, transforms and joins modules, strips unused code, converts JSX and modern syntax to older targets, and emits source maps, all inside a single process that parallelises work across CPU cores. Its main design goal is to make builds fast enough to run on every save.
The command line interface covers common tasks, while a JavaScript API and a Go API support programmatic builds, watch mode, incremental rebuilds and a development server. A plugin system lets build tools resolve custom file types, inject virtual modules or post-process output. Format options cover IIFE, CommonJS and ES modules, and platform targets distinguish browser, node and neutral environments.
It suits library authors who need quick production bundles, framework and tooling maintainers who embed a fast transformer, and teams running large test or preview pipelines where build latency dominates the feedback loop. Vite and many other development tools use esbuild for dependency pre-bundling and TypeScript or JSX transformation during development, which is why most developers encounter it indirectly rather than invoking it themselves.
Compared with webpack or Rollup, esbuild is dramatically faster but deliberately narrower: it does not aim to provide a rich plugin ecosystem for every asset type or advanced chunk-splitting strategies, and some output optimisations are less aggressive. Compared with a plain TypeScript compiler invocation, it handles bundling and minification in one step. For final production output of complex applications, it is often paired with a fuller bundler.
Because esbuild targets a specific JavaScript syntax level, teams should verify the configured target against their supported browsers rather than assuming older syntax is handled automatically. Tree shaking works best on ES modules, so CommonJS-heavy dependencies may not shrink as expected. Plugin behaviour and API stability are versioned, so pinning the binary and reading release notes before upgrading avoids surprises in continuous integration.