Packages/esbuild

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.

  1. 0.28.2

    8 August 2026
    • Fix 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 import assignment 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-overwrite

      For example: esbuild input.js --outfile=input.js tells esbuild to overwrite input.js with 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-overwrite is 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 async on 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 an async module wrapper.

  2. 0.28.1

    11 June 2026
  3. 0.28.0

    2 April 2026
  4. 0.27.7

    2 April 2026
  5. 0.27.5

    2 April 2026
  6. 0.27.4

    12 March 2026
  7. 0.27.3

    5 February 2026
  8. 0.27.2

    17 December 2025
  9. 0.27.1

    3 December 2025
  10. 0.27.0

    9 November 2025
  11. 0.26.0

    9 November 2025
  12. 0.25.12

    1 November 2025
  13. 0.25.11

    15 October 2025
  14. 0.25.10

    17 September 2025
  15. 0.25.9

    12 August 2025
  16. 0.25.8

    19 July 2025
  17. 0.25.7

    18 July 2025
  18. 0.25.6

    7 July 2025
  19. 0.25.5

    27 May 2025
  20. 0.25.4

    6 May 2025
  21. 0.25.3

    23 April 2025
  22. 0.25.2

    30 March 2025
  23. 0.25.1

    10 March 2025
  24. 0.25.0

    8 February 2025
  25. 0.24.2

    20 December 2024
  26. 0.24.1

    20 December 2024
  27. 0.24.0

    22 September 2024
  28. 0.23.1

    16 August 2024
  29. 0.23.0

    2 July 2024
  30. 0.22.0

    30 June 2024
  31. 0.21.5

    9 June 2024
  32. 0.21.4

    25 May 2024
  33. 0.21.3

    15 May 2024
  34. 0.21.2

    12 May 2024
  35. 0.21.1

    7 May 2024
  36. 0.21.0

    7 May 2024
  37. 0.20.2

    14 March 2024
  38. 0.20.1

    19 February 2024
  39. 0.20.0

    27 January 2024
  40. 0.19.12

    23 January 2024
  41. 0.19.11

    29 December 2023
  42. 0.19.10

    19 December 2023
  43. 0.19.9

    10 December 2023
  44. 0.19.8

    26 November 2023
  45. 0.19.7

    21 November 2023
  46. 0.19.6

    19 November 2023
  47. 0.19.5

    17 October 2023
  48. 0.19.4

    28 September 2023
  49. 0.19.3

    14 September 2023
  50. 0.19.2

    14 August 2023