NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #529 most downloaded on npm
JavaScript parser, mangler/compressor and beautifier toolkit for ES6+
Last release 1 months ago
27 Aug 2026
Ships fairly regularly
a new release about every 5 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
8 years old
210 releases · first in 2018
Roll back fix for ambiguously scoped default args, due to issues that came up without clear reproduction
Fix transforming code in dynamic import argument.
One column per quarter.
Pin (deoptimize) functions that use argnames scope in ambiguous way. IE when default args access other args, or variables outside the function.
?? operator being considered a "boolean operator" sometimes causing booleans to be generated in its left side.Experimental TypeScript type stripping
Fixed a crash related to dynamic import expressions
import expressionsCorrectly parenthesize tagged template strings where the tag is new something(), which also has parentheses
new something(), which also has parenthesesimport() expression is parsed, it is no longer treated as a function call.Add ResizeObserver box option to domprops
box option to dompropsSupport import source ... and import defer ...
import source ... and import defer ... (#1682)Fix crash when using mangle.keep_fnames with destructuring
mangle.keep_fnames with destructuringAdd builtins_ecma and builtins_pure options
builtins_ecma and builtins_pure optionsunused option: delete computed keys of concise methods and getters/setters.
unused option: delete computed keys of concise methods and getters/setters.Error.cause added to DOM properties listfoo.bar and foo["bar"] to be equivalent when property mangler is enabled with keep_quoted=strict option.Fix extremely slow (seemed like a freeze) evaluate of method chains
evaluate of method chainsInfinityfoo[(1, 2)])Add "observedAttributes" domprop
Temporal related) suggested in #1652Produce void 0 instead of undefined, which is more safe
void 0 instead of undefined, which is more safefix bitwise optimization changing the result of &&, ||
&&, ||var is extracted from a deleted default caseSupport using and await using declarations
using and await using declarations (#1635)Prevent niche optimizations that would move around block declarations
lhs_constants to CompressOptions type (#1621)Do not wrap callbacks in parentheses (wrap_func_args format option is now false by default)
wrap_func_args format option is now false by default)Improved performance in the parse step by adding a fast path for simple identifiers.
fixed semicolon insertion between class fields, when the field names are number literals
keep_numbers format option now works for bigintFix exporting AssignmentExpression (default assign pattern) to ESTree
export {} (#1601)const and let resulting from ESTree input (#1599)Fix crash when parsing bare yield inside a template string.
yield inside a template string.Fix bitwise operations that could mix BigInt and number
BigInt and numberRemove unnecessary console.assert calls
console.assert calls (#1590)internal: Flatten inheritance tree for object/class members
Fix inlining non-call expressions into an optional_call?.()
optional_call?.()Remove console method-of-method calls (eg console.log.apply()) when drop_console option is used
console method-of-method calls (eg console.log.apply()) when drop_console option is used (#1585){ ...void !0 } (#1142)Reserved object properties from chrome extensions (domprops)
a and a computed class property ["prop"]Support import attributes with syntax
with syntaxEnsure parent directory exists when using --output on CLI
bump the rollup devDependency to disable CVE warnings (Terser was not affected)
internal: stop assigning properties to objects they don't belong in
drop_console: emit an empty function if the return value of console.METHOD(...) may be called.reduce_vars improved when dealing with hoisted function definitions
reduce_vars improved when dealing with hoisted function definitions (#1544)import("module") can now be input and output from ESTree AST
import("module") can now be input and output from ESTree AST (#1557)BigInt literals can now be input and output from ESTree AST (#1555)typeof an object or array (typeof {} and typeof []) can now be statically evaluated. (#1546)Retain side effects in a case when the expression is a sequence (comma) expression
case when the expression is a sequence (comma) expressionRevert v5.31.4, which created mysterious issues #1548, #1549
drop_unused: drop classes which only have side effects in the extends part
extends partdrop_unused: drop unused parameters from IIFEs in some more situations.
drop_unused: scan variables in self-referential class declarations that contain side effects.
Allow drop-unused to drop the whole assignment (not just the assigned name) in more situations, in order to avoid duplication of long strings.
Sync up property mangler exceptions with current contents of Firefox and Chrome environments
...spreads in objects (#1141)Fix parsing #private in ... when next to other operators
#private in ... when next to other operatorsFix precedence of #private in ... operator
#private in ... operatorAvoid optimizations inside computed keys, because they can cause js-engine-specific bugs.
Removed useless \ escapes for non-ascii characters
\ escapes for non-ascii charactersImprove removal of classes referring to themselves
Make sure 'computed_props' creates string keys
fix optimisation of all-bits mask check
Re-releases previously reverted 5.28.0
(hotfix release) - Reverts v5.28.0
(hotfix release)
Optimise redundant or shrinkable bitwise operations (|, ^, &, >>, <<)
|, ^, &, >>, <<)BigInt math operationsRecognise this as a reference to the surrounding class in drop_unused. Closes #1472
this as a reference to the surrounding class in drop_unused. Closes #1472Fixed case where collapse_vars inlines await expressions into non-async functions.
collapse_vars inlines await expressions into non-async functions.Created minify_sync() alternative to minify() since there's no async code left.
minify_sync() alternative to minify() since there's no async code left.Do not take the /*#__PURE__*/ annotation into account when the side_effects compress option is off.
/*#__PURE__*/ annotation into account when the side_effects compress option is off.preserve_annotations option now automatically opts annotation comments in, instead of requiring the comments option to be configured for this.())Regex properties added to reserved property mangler
pure_new option added to drop unused new expressions.Improve formatting performance in V8 by keeping a small work string and a large output string
When top_retain will keep a variable assignment around, inline the assignee when it's shorter than the name
static {} blocks.Do not unsafely shorten expressions like a?.toString() when they're conditional.
unsafely shorten expressions like a?.toString() when they're conditional.Do not inline functions that would be retained in the toplevel (as this would cause code duplication).
Your coding agent can read these notes before it upgrades. Set up the MCP server →