Catalog / Build tools

esbuild changelog

Bundler and minifier for JavaScript and TypeScript written in Go, used directly and as the transform step inside other tools.

Subscribeesbuild as markdown, for pasting into a model
Latest
0.28.2
Shipped
8 Aug 20261 month ago
Collected
60 releasesback to 15 Jul 2023
Source
evanw/esbuild
Project
esbuild.github.io
Advisories
3 publishednewest 2026
Breaking
11 releasestagged by the publisher
Feed
RSS

Read today, the first day on record. Collection status

Version history

0.x60 releases
0.28.2

Fix tree shaking bug due to TypeScript import alias (#4507) This release fixes a bug that could cause esbuild to incorrectly tree-shake imports that are used in a TypeScript type alias under certain circumstances. Affected code uses a TypeS

addedfixedremoved
0.28.1

Disallow \ in local development server HTTP requests (GHSA-g7r4-m6w7-qqqr) This release fixes a security issue where HTTP requests to esbuild's local development server could traverse outside of the serve directory on Windows using a \ back

securityaddedfixed
0.28.0

Add support for with { type: 'text' } imports (#4435) The import text proposal has reached stage 3 in the TC39 process, which means that it's recommended for implementation. It has also already been implemented by Deno and Bun. So with this

breakingaddedchanged
0.27.7

Fix lowering of define semantics for TypeScript parameter properties (#4421) The previous release incorrectly generated class fields for TypeScript parameter properties even when the configured target environment does not support class fiel

added
0.27.5

Fix for an async generator edge case (#4401, #4417) Support for transforming async generators into the equivalent state machine was added in version 0.19.0. However, the generated state machine didn't work correctly when polling async gener

addedfixed
0.27.4

Fix a regression with CSS media queries (#4395, #4405, #4406) Version 0.25.11 of esbuild introduced support for parsing media queries. This unintentionally introduced a regression with printing media queries that use the <media-type> and <m

addedfixedchanged
0.27.3

Preserve URL fragments in data URLs (#4370) Consider the following HTML, CSS, and SVG: index.html: <!DOCTYPE html> <html> <head><link rel="stylesheet" href="icons.css"></head> <body><div class="triangle"></div></body> </html> icons.css: .tr

addedfixedchanged
0.27.2

Allow import path specifiers starting with #/ (#4361) Previously the specification for package.json disallowed import path specifiers starting with #/, but this restriction has recently been relaxed and support for it is being added across

breakingaddedremoved
0.27.1

Fix bundler bug with var nested inside if (#4348) This release fixes a bug with the bundler that happens when importing an ES module using require (which causes it to be wrapped) and there's a top-level var inside an if statement without be

addedfixedremoved
0.27.0

This release deliberately contains backwards-incompatible changes. To avoid automatically picking up releases like this, you should either be pinning the exact version of esbuild in your package.json file (recommended) or be using a version

breakingaddedfixed
0.26.0

Enable trusted publishing (#4281) GitHub and npm are recommending that maintainers for packages such as esbuild switch to trusted publishing. With this release, a VM on GitHub will now build and publish all of esbuild's packages to npm inst

0.25.12

Fix a minification regression with CSS media queries (#4315) The previous release introduced support for parsing media queries which unintentionally introduced a regression with the removal of duplicate media rules during minification. Spec

addedfixedchanged
0.25.11

Add support for with { type: 'bytes' } imports (#4292) The import bytes proposal has reached stage 2.7 in the TC39 process, which means that although it isn't quite recommended for implementation, it's generally approved and ready for valid

added
0.25.10

Fix a panic in a minification edge case (#4287) This release fixes a panic due to a null pointer that could happen when esbuild inlines a doubly-nested identity function and the final result is empty. It was fixed by emitting the value unde

addedfixed
0.25.9

Better support building projects that use Yarn on Windows (#3131, #3663) With this release, you can now use esbuild to bundle projects that use Yarn Plug'n'Play on Windows on drives other than the C: drive. The problem was as follows: Yarn

securityaddedchanged
0.25.8

Fix another TypeScript parsing edge case (#4248) This fixes a regression with a change in the previous release that tries to more accurately parse TypeScript arrow functions inside the ?: operator. The regression specifically involves parsi

fixed
0.25.7

Parse and print JavaScript imports with an explicit phase (#4238) This release adds basic syntax support for the defer and source import phases in JavaScript: defer This is a stage 3 proposal for an upcoming JavaScript feature that will pro

addedfixed
0.25.6

Fix a memory leak when cancel() is used on a build context (#4231) Calling rebuild() followed by cancel() in rapid succession could previously leak memory. The bundler uses a producer/consumer model internally, and the resource leak was cau

securityaddedchanged
0.25.5

Fix a regression with browser in package.json (#4187) The fix to #4144 in version 0.25.3 introduced a regression that caused browser overrides specified in package.json to fail to override relative path names that end in a trailing slash. T

addedfixed
0.25.4

Add simple support for CORS to esbuild's development server (#4125) Starting with version 0.25.0, esbuild's development server is no longer configured to serve cross-origin requests. This was a deliberate change to prevent any website you v

addedfixedchanged
0.25.3

Fix lowered async arrow functions before super() (#4141, #4142) This change makes it possible to call an async arrow function in a constructor before calling super() when targeting environments without async support, as long as the function

securityaddedfixed
0.25.2

Support flags in regular expressions for the API (#4121) The JavaScript plugin API for esbuild takes JavaScript regular expression objects for the filter option. Internally these are translated into Go regular expressions. However, this tra

addedfixed
0.25.1

Fix incorrect paths in inline source maps (#4070, #4075, #4105) This fixes a regression from version 0.25.0 where esbuild didn't correctly resolve relative paths contained within source maps in inline sourceMappingURL data URLs. The paths w

addedfixedchanged
0.25.0

This release deliberately contains backwards-incompatible changes. To avoid automatically picking up releases like this, you should either be pinning the exact version of esbuild in your package.json file (recommended) or be using a version

breakingsecurityadded
0.24.2

Fix regression with --define and import.meta (#4010, #4012, #4013) The previous change in version 0.24.1 to use a more expression-like parser for define values to allow quoted property names introduced a regression that removed the ability

fixedremoved
0.24.1

Allow es2024 as a target in tsconfig.json (#4004) TypeScript recently added es2024 as a compilation target, so esbuild now supports this in the target field of tsconfig.json files, such as in the following configuration file: { "compilerOpt

addedfixedchanged
0.24.0

This release deliberately contains backwards-incompatible changes. To avoid automatically picking up releases like this, you should either be pinning the exact version of esbuild in your package.json file (recommended) or be using a version

breakingfixedchanged
0.23.1

Allow using the node: import prefix with es* targets (#3821) The node: prefix on imports is an alternate way to import built-in node modules. For example, import fs from "fs" can also be written import fs from "node:fs". This only works wit

addedfixedremoved
0.23.0

This release deliberately contains backwards-incompatible changes. To avoid automatically picking up releases like this, you should either be pinning the exact version of esbuild in your package.json file (recommended) or be using a version

breakingaddedfixed
0.22.0

This release deliberately contains backwards-incompatible changes. To avoid automatically picking up releases like this, you should either be pinning the exact version of esbuild in your package.json file (recommended) or be using a version

breakingaddedfixed
0.21.5

Fix Symbol.metadata on classes without a class decorator (#3781) This release fixes a bug with esbuild's support for the decorator metadata proposal. Previously esbuild only added the Symbol.metadata property to decorated classes if there w

addedfixed
0.21.4

Update support for import assertions and import attributes in node (#3778) Import assertions (the assert keyword) have been removed from node starting in v22.0.0. So esbuild will now strip them and generate a warning with --target=node22 or

addedfixedchanged
0.21.3

Implement the decorator metadata proposal (#3760) This release implements the decorator metadata proposal, which is a sub-proposal of the decorators proposal. Microsoft shipped the decorators proposal in TypeScript 5.0 and the decorator met

addedfixedchanged
0.21.2

Correct this in field and accessor decorators (#3761) This release changes the value of this in initializers for class field and accessor decorators from the module-level this value to the appropriate this value for the decorated element (e

added
0.21.1

Fix a regression with --keep-names (#3756) The previous release introduced a regression with the --keep-names setting and object literals with get/set accessor methods, in which case the generated code contained syntax errors. This release

fixed
0.21.0

This release doesn't contain any deliberately-breaking changes. However, it contains a very complex new feature and while all of esbuild's tests pass, I would not be surprised if an important edge case turns out to be broken. So I'm releasi

breakingaddedfixed
0.20.2

Support TypeScript experimental decorators on abstract class fields (#3684) With this release, you can now use TypeScript experimental decorators on abstract class fields. This was silently compiled incorrectly in esbuild 0.19.7 and below,

addedchangedremoved
0.20.1

Fix a bug with the CSS nesting transform (#3648) This release fixes a bug with the CSS nesting transform for older browsers where the generated CSS could be incorrect if a selector list contained a pseudo element followed by another selecto

addedfixed
0.20.0

This release deliberately contains backwards-incompatible changes. To avoid automatically picking up releases like this, you should either be pinning the exact version of esbuild in your package.json file (recommended) or be using a version

breakingaddedfixed
0.19.12

The "preserve" JSX mode now preserves JSX text verbatim (#3605) The JSX specification deliberately doesn't specify how JSX text is supposed to be interpreted and there is no canonical way to interpret JSX text. Two most popular interpretati

addedfixedremoved
0.19.11

Fix TypeScript-specific class transform edge case (#3559) The previous release introduced an optimization that avoided transforming super() in the class constructor for TypeScript code compiled with useDefineForClassFields set to false if a

addedremoved
0.19.10

Fix glob imports in TypeScript files (#3319) This release fixes a problem where bundling a TypeScript file containing a glob import could emit a call to a helper function that doesn't exist. The problem happened because esbuild's TypeScript

addedfixedchanged
0.19.9

Add support for transforming new CSS gradient syntax for older browsers The specification called CSS Images Module Level 4 introduces new CSS gradient syntax for customizing how the browser interpolates colors in between color stops. You ca

added
0.19.8

Add a treemap chart to esbuild's bundle analyzer (#2848) The bundler analyzer on esbuild's website (https://esbuild.github.io/analyze/) now has a treemap chart type in addition to the two existing chart types (sunburst and flame). This shou

added
0.19.7

Add support for bundling code that uses import attributes (#3384) JavaScript is gaining new syntax for associating a map of string key-value pairs with individual ESM imports. The proposal is still a work in progress and is still undergoing

breakingaddedchanged
0.19.6

Fix a constant folding bug with bigint equality This release fixes a bug where esbuild incorrectly checked for bigint equality by checking the equality of the bigint literal text. This is correct if the bigint doesn't have a radix because b

addedfixed
0.19.5

Fix a regression in 0.19.0 regarding paths in tsconfig.json (#3354) The fix in esbuild version 0.19.0 to process tsconfig.json aliases before the --packages=external setting unintentionally broke an edge case in esbuild's handling of certai

addedfixedchanged
0.19.4

Fix printing of JavaScript decorators in tricky cases (#3396) This release fixes some bugs where esbuild's pretty-printing of JavaScript decorators could incorrectly produced code with a syntax error. The problem happened because esbuild so

addedfixed
0.19.3

Fix list-style-type with the local-css loader (#3325) The local-css loader incorrectly treated all identifiers provided to list-style-type as a custom local identifier. That included identifiers such as none which have special meaning in CS

addedfixedchanged
0.19.2

Update how CSS nesting is parsed again CSS nesting syntax has been changed again, and esbuild has been updated to match. Type selectors may now be used with CSS nesting: .foo { div { color: red; } } Previously this was disallowed in the CSS

addedfixedchanged
0.19.1

Fix a regression with baseURL in tsconfig.json (#3307) The previous release moved tsconfig.json path resolution before --packages=external checks to allow the paths field in tsconfig.json to avoid a package being marked as external. However

addedfixed
0.19.0

This release deliberately contains backwards-incompatible changes. To avoid automatically picking up releases like this, you should either be pinning the exact version of esbuild in your package.json file (recommended) or be using a version

breakingaddedfixed
0.18.20

Support advanced CSS @import rules (#953, #3137) CSS @import statements have been extended to allow additional trailing tokens after the import path. These tokens sort of make the imported file behave as if it were wrapped in a @layer, @sup

0.18.19

Implement composes from CSS modules (#20) This release implements the composes annotation from the CSS modules specification. It provides a way for class selectors to reference other class selectors (assuming you are using the local-css loa

addedfixedchanged
0.18.18

Fix asset references with the --line-limit flag (#3286) The recently-released --line-limit flag tells esbuild to terminate long lines after they pass this length limit. This includes automatically wrapping long strings across multiple lines

addedfixed
0.18.17

Support An+B syntax and :nth-*() pseudo-classes in CSS This adds support for the :nth-child(), :nth-last-child(), :nth-of-type(), and :nth-last-of-type() pseudo-classes to esbuild, which has the following consequences: The An+B syntax is no

addedfixedchanged
0.18.16

Fix a regression with whitespace inside :is() (#3265) The change to parse the contents of :is() in version 0.18.14 introduced a regression that incorrectly flagged the contents as a syntax error if the contents started with a whitespace tok

fixed
0.18.15

Add the --serve-fallback= option (#2904) The web server built into esbuild serves the latest in-memory results of the configured build. If the requested path doesn't match any in-memory build result, esbuild also provides the --servedir= op

addedchanged
0.18.14

Implement local CSS names (#20) This release introduces two new loaders called global-css and local-css and two new pseudo-class selectors :local() and :global(). This is a partial implementation of the popular CSS modules approach for avoi

added
0.18.13

Add the --drop-labels= option (#2398) If you want to conditionally disable some development-only code and have it not be present in the final production bundle, right now the most straightforward way of doing this is to use the --define: fl

addedfixedchanged