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
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.
- 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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,
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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