What webpack/webpack shipped
Written by FoxPlug from the repository's own releases; not affiliated with webpack. Paste your own repository in the box below and FoxPlug writes the same weekly update for your product. This page is an automatic summary of the releases, pull requests and commits in github.com/webpack/webpack; webpack did not write it and does not use or endorse FoxPlug. Every line links to the change it describes.
Get a weekly update like this for your product, free
Week of October 5, 2026
What shipped
- Propagate available module growth during code splitting so a later import with the same webpackChunkName no longer leaves children with stale copies. Pull request #22555
- The JavaScript minifier now copies a tiny function called from several places into each call. Pull request #22600
- CSS minification folds a later line-height into the preceding font declaration. Pull request #22602
- Dynamic import.source() contexts now preserve the source phase for Wasm and return the WebAssembly.Module directly. Pull request #22604
- Wasm eager and weak source imports now unwrap the source value instead of resolving to a namespace object. Pull request #22606
- Incremental caches now invalidate indirect importers when a leaf's async state changes. Pull request #22585
- The minifier gained several rewrites for assignments, conditional callees, name-passing calls and literal built-ins. Pull request #22584
- CSS minification preserves:is() around namespace-qualified selectors so SVG and HTML rules keep matching the same elements. Pull request #22582
- Core module externals keep their original spelling when node: prefixes are enabled, avoiding broken requires on older Node. Pull request #22593
- Modules, dependencies and chunks now describe themselves through is(kind) instead of instanceof checks throughout lib. Pull request #22587
Why it matters
This week brought correctness fixes across the minifier, CSS, Wasm and caching that remove crashes and wrong output in common builds. New minifier rewrites and code-splitting growth propagation improve the size and consistency of produced bundles.
Changelog entry
- Propagate available module growth during code splitting. Pull request #22555
- Copy a tiny function called from several places into each call in the minifier. Pull request #22600
- Fold a later line-height into the font before it in CSS minification. Pull request #22602
- Preserve source phase in dynamic import.source() contexts for Wasm. Pull request #22604
- Unwrap eager and weak source imports for Wasm. Pull request #22606
- Invalidate unaffected caches when async state changes. Pull request #22585
- Fold assignments, inline conditional callees, flatten name-passing calls and fold literal built-ins in the minifier. Pull request #22584
- Preserve namespaces when unwrapping:is() in CSS. Pull request #22582
- Keep a core module external as the code spells it when node: is supported. Pull request #22593
- Ask modules, dependencies and chunks what they are instead of using instanceof. Pull request #22587
- Preserve module globals with a shared name cache. Pull request #22583
- Read
reduce_varsand _eval off each node's kind for performance. Pull request #22577
This week: code splitting propagates module growth, the minifier copies small multi-call functions and adds new rewrites, CSS folds line-height and preserves:is() namespaces, Wasm source imports unwrap properly, and caches invalidate on async state changes.
This week in webpack: code splitting now propagates available module growth so later imports with the same webpackChunkName no longer leave children with stale copies. The JavaScript minifier copies tiny functions called from several places into each call and gained new rewrite rules for assignments, conditional callees and literal built-ins. CSS minification folds line-height into the preceding font, preserves:is() around namespace-qualified selectors, and fixes border:none. Wasm source imports unwrap correctly and dynamic import.source() preserves the source phase. Caches now invalidate indirect importers when a leaf's async state changes, and core module externals keep their original spelling when node: prefixes are enabled.
Week of September 28, 2026
What shipped
- The JavaScript minifier now runs entirely on webpack's own printer without loading terser, completing the multi-step migration off terser's AST onto plain ESTree. Pull request #22380
- JavaScript minification on plain ESTree nodes is faster and uses less memory by sharing prototypes for node kinds and counting character frequency during printing. Pull request #22419
- The minifier now drops unused reads and calls of built-in globals and their properties when the value is not read, reducing output size. Pull request #22405
- CSS and HTML assets now extract license comments into separate.LICENSE.txt files, and CSS minification includes gradient and shadow shortening. Pull request #22408
- A new fuzzing suite runs terser's program generator against webpack's minifier to catch correctness regressions. Pull request #22390
- Statement-level IIFEs can now have their bodies inlined in place, reducing wrapper overhead for functions containing try-catch and other statements. Pull request #22393
- The mangler's scope analysis now uses the same ScopeAnalyzer as module concatenation, moving toward a unified scope analysis system. Pull request #22428
- Large CSS data tables are now built lazily as memoized getters, reducing allocation and parse time for builds that don't use minification. Pull request #22385
- Linting speed is ~2.7x faster by running Prettier once instead of through ESLint and improving caching. Pull request #22383
Why it matters
This week completes webpack's multi-year migration of the JavaScript minifier from terser's AST to plain ESTree, gaining speed and memory savings on every build. The work also strengthens testing against terser and swc, fixes edge cases in minification and CSS handling, and improves developer velocity with faster linting.
Changelog entry
- JavaScript minification now uses webpack's printer alone without terser, completing the ESTree migration Pull request #22380
- Minification on plain ESTree is faster and uses less memory through shared prototypes and inline character counting Pull request #22419
- Minifier drops unused reads and calls of built-in globals and their properties Pull request #22405
- CSS and HTML extract license comments to.LICENSE.txt files; CSS gradients and shadows shorten further Pull request #22408
- New minify-fuzz suite tests webpack's minifier against terser's fuzzer on seeded programs Pull request #22390
- Statement-level IIFEs can inline their bodies in place, reducing wrapper overhead Pull request #22393
- Mangler's scope analysis uses the unified ScopeAnalyzer from module concatenation Pull request #22428
- ESM spellings added alongside deprecated Harmony names for public runtime and fragment stages Pull request #22400
- Large CSS data tables build lazily as memoized getters to reduce allocation in non-minifying builds Pull request #22385
Webpack's minifier now runs entirely on plain ESTree—faster, smaller, and terser-free. Plus: better CSS gradients, license extraction, and 2.7x faster linting.
After a multi-step migration, webpack's JavaScript minifier now runs entirely on plain ESTree nodes without loading terser, beating the original pipeline on speed and memory. The week also ships CSS license extraction, gradient shortening, fuzzing against terser, statement-level IIFE inlining, and glob patterns for snapshot paths. Linting is 2.7x faster.
Week of September 21, 2026
What shipped
- Webpack now minifies JavaScript through its own terser phases under futureDefaults, replacing terser's parse, output, print, frequency and mangle phases with faster versions built on webpack's own AST. Pull request #22298
- Sourcemaps now emit the scopes field for imported ESM bindings via new -scopes devtool suffixes (source-map-scopes, eval-source-map-scopes, etc.), letting debuggers resolve mutable imports. Pull request #21999
- Shared modules now accept include/exclude filters on version and request, letting nested dependencies use their own copies instead of being forced to the shared version. Pull request #22297
- JSON assets are now minified under futureDefaults via optimization.minimizeOptions.json, defaulting to true with experiments.futureDefaults. Pull request #22286
- Copy plugin now offers an ignore hook and never reads from output.path, preventing recursive copying of webpack's own output back into itself. Pull request #22216
- JavaScript minifier now grows token tables by token count instead of source length, reducing parser-buffer memory by 46.6% on production Lodash builds. Pull request #22329
- Webpack now reads only the browserslist config for the default target instead of loading the full browserslist module, saving 1.6 MB retained memory on builds that don't need it. Pull request #22324
- Plugins can now add custom dependency types by exposing template.DependencyTemplate, module.NullFactory and util.makeSerializable from compiler.webpack. Pull request #22321
- Lib/dependencies is now organized by syntax family (amd/, commonjs/, css/, esm/, hmr/, html/, system/, worker/) instead of 144 flat files. Pull request #22291
- CSS minifier now treats 2009-draft flexbox spellings (-webkit-box-align, -moz-box-pack, display: -webkit-box) as legacy names for modern targets, dropping them appropriately. Pull request #22320
Why it matters
This week brings webpack's own JavaScript minifier implementation forward, adds sourcemap scoping for ESM imports, and delivers multiple performance improvements across CSS, HTML and graph processing. Plugin authors gain new hooks for custom dependency types and shared module filtering.
Changelog entry
- Feat(javascript): minify through webpack's own terser phases under futureDefaults Pull request #22298
- Feat(sourcemaps): emit the scopes field for imported ESM bindings Pull request #21999
- Feat(sharing): add include/exclude filters to shared modules Pull request #22297
- Feat: minify JSON assets under futureDefaults Pull request #22286
- Feat(copy): add an ignore hook and never read from output.path Pull request #22216
- Feat: expose template.DependencyTemplate, module.NullFactory and util.makeSerializable Pull request #22321
- Perf(javascript): reduce minifier token buffer memory by 46.6% Pull request #22329
- Perf(config): read only browserslist config for default target, saving 1.6 MB Pull request #22324
- Fix(css): treat 2009-draft flexbox spellings as legacy for modern targets Pull request #22320
- Refactor(dependencies): group lib/dependencies by syntax family Pull request #22291
- Perf(html): skip unnecessary style sheet closure scans with mergeStyles Pull request #22328
- Perf(graph): reduce allocations on module and chunk graph hot paths Pull request #22289
Webpack now minifies JavaScript through its own terser phases, adds sourcemap scopes for ESM imports, lets shared modules filter by version/request, minifies JSON assets under futureDefaults, and saves 1.6 MB by lazy-loading browserslist.
This week's webpack updates focus on performance and developer experience. The JavaScript minifier now runs webpack's own optimized terser phases. Sourcemaps gain the scopes field for imported ESM bindings, making debuggers resolve imports directly. Shared modules accept include/exclude filters, JSON assets minify under futureDefaults, and memory usage drops with smarter token buffering and lazy configuration loading. Plugin authors can now add custom dependency types with exposed APIs.