Releases of esbuild
482 stable releases, newest first. Release notes are kept for the last 90 days; older ones link to where they were published.
0.28.2
8 August 2026Fix tree shaking bug due to TypeScript import alias
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 TypeScript-specific
importassignment and looks something like this:import Base from './dep.js'; import Alias = Base.SomeType;
Fix CSS minification bug involving
&This release fixes a bug where esbuild's CSS minifier incorrectly removed a
&when it was unsafe to do so. Here is an example:/* Original code */ .a .b { & .b:not(& .c) { color: red; } } /* Old output (with --minify) */ .a .b{.b:not(& .c){color:red}} /* New output (with --minify) */ .a .b{& .b:not(& .c){color:red}}This should match
<span class="a"><span class="b"><span class="b">yes</span></span></span>but not<span class="a"><span class="b">no</span></span>. The old output incorrectly matched both.Avoid overwriting input files without
--allow-overwriteFor example:
esbuild input.js --outfile=input.jstells esbuild to overwriteinput.jswith the output of running esbuild on it. This was supposed to already be prevented by default, but it accidentally regressed in version 0.17.0 and apparently didn't have any test coverage. The error message was being printed but the input file was still being overwritten. Oops.This release puts the original behavior back. With this release, esbuild should now actually avoid overwriting input files unless
--allow-overwriteis explicitly present. This is done by not writing out any files when a build error is encountered.Fix incorrect code generated when using top-level await
Previously esbuild could generate code containing a syntax error in complex scenarios involving top-level await used in a dependency cycle. The problem was a missing
asyncon one or more module wrapper closures. With this release, esbuild now uses a fixed-point iteration algorithm to correctly annotate all dependencies in the cycle as needing anasyncmodule wrapper.
0.28.1
11 June 20260.28.0
2 April 20260.27.7
2 April 20260.27.5
2 April 20260.27.4
12 March 20260.27.3
5 February 20260.27.2
17 December 20250.27.1
3 December 20250.27.0
9 November 20250.26.0
9 November 20250.25.12
1 November 20250.25.11
15 October 20250.25.10
17 September 20250.25.9
12 August 20250.25.8
19 July 20250.25.7
18 July 20250.25.6
7 July 20250.25.5
27 May 20250.25.4
6 May 20250.25.3
23 April 20250.25.2
30 March 20250.25.1
10 March 20250.25.0
8 February 20250.24.2
20 December 20240.24.1
20 December 20240.24.0
22 September 20240.23.1
16 August 20240.23.0
2 July 20240.22.0
30 June 20240.21.5
9 June 20240.21.4
25 May 20240.21.3
15 May 20240.21.2
12 May 20240.21.1
7 May 20240.21.0
7 May 20240.20.2
14 March 20240.20.1
19 February 20240.20.0
27 January 20240.19.12
23 January 20240.19.11
29 December 20230.19.10
19 December 20230.19.9
10 December 20230.19.8
26 November 20230.19.7
21 November 20230.19.6
19 November 20230.19.5
17 October 20230.19.4
28 September 20230.19.3
14 September 20230.19.2
14 August 2023