On 14 September 2026 webpack published the 5.111 blog: ES module output is stable (drop experiments.outputModule; keep/set output.module), output.copy copies public/static files into the build, browserslist-aware CSS lowering/color fallbacks expand, performance hint options rename, acorn/neo-async removed as deps, plus hot-update/cache fixes. npm latest as of 5 Oct 2026 research is 5.111.1 (5.111.0 shipped 14 Sep). ShopperCove docs checklist only; no affiliate.
5 min read
On 14 September 2026, the webpack project published Webpack 5.111. The release makes ES module output stable (you can drop experiments.outputModule and keep output.module), adds built-in output.copy for static/public files, expands browserslist-aware CSS lowering and color fallbacks, renames several performance hint options, ships a smaller chunk-loading runtime, drops acorn and neo-async as dependencies, and fixes hot updates and caching. ShopperCove did not upgrade a production webpack pipeline for this note and did not run build benchmarks. On 5 October 2026, npm dist-tag latest resolved to webpack@5.111.1 (published 18 Sep 2026); the feature blog and GitHub tag cover the 5.111.0 line that shipped 14 Sep 2026. This is a docs-based upgrade checklist—not performance advice and not a security advisory (no CVEs are claimed here).
There is no affiliate link in this article. This post has no affiliate links.
If you ship an app or library as ES modules, remove experiments.outputModule and keep output.module: true. ESM output is stable; module / modern-module library types and externalsType: "module" no longer need the experiment flag.
Upgrade gotcha: if you only had experiments.outputModule: true, add output.module: true. Webpack ignores the old flag alone, so keeping it without output.module will not enable ESM output.
A module or modern-module library type now turns output.module on by itself. experiments.futureDefaults now includes output.module where the target can read modules (classic script output still wins for targets that cannot, for script-style library types such as var/umd, or when you set output.module yourself).
Async startup: if an entry uses top-level await, importers wait until that setup finishes (and receive errors on failure) when the target supports TLA; override with output.environment.topLevelAwait if needed.
ES module libraries and externals also improve: live bindings on re-exports from externals, respect for your externals mapping on star re-exports, import attributes kept, cycle stack overflows fixed, and a build error when export * targets an external declared as an array (specifier + property path).
ESM webpack configs can pass file: URL strings to path options such as context and output.path (and to rule test/include) without wrapping fileURLToPath()—pass the URL .href string, not a URL object.
output.copy copies folders that nothing imports (for example robots.txt, public images, licenses) into the output directory as part of the build:
Patterns support from/to, contenthash filenames, filters, transforms, and permission/timestamp preservation. Watch mode recopies edits; files appear in stats and survive output.clean. Overwriting a generated asset is an error; empty patterns warn. For more control, use built-in CopyPlugin.
With a browserslist target, the built-in CSS minimizer’s lowerUnsupported and colorFallbacks (on by default) cover more syntax—including inset, media ranges, and CSS nesting—and improve math/color simplification. Tune via optimization.minimize.css. Optional knobs include unusedSymbols, pseudoClasses, resolveCustomAtRules, rewriteDirSelector, and mergeDistantRules (off by default).
HTML native support: trim whitespace around URL attributes; optional mergeScripts and broader collapseBooleanAttributes; attribute minification no longer depends on quote spelling; plugins can reuse webpack.css.syntax.cssMinify / webpack.html.syntax.htmlMinify; NormalModule processResult can be async (for example image format conversion with module.buildInfo.assetResource).
If you enabled checks in 5.110, update renamed options or webpack reports a configuration error:
| Previous | Use in 5.111 |
|---|---|
unusedAliases, unusedDefines, unusedExternals, unusedRules | unusedConfig |
unusedReexports | unusedModules |
embeddedSourceMaps | sourceMaps |
entrypointOverlap | duplicateModules |
New/clarified checks also include unusedAssets and analyzableBailouts. Use performance.hints: "stats" to explore findings without warning-level build noise. Note: hints: false silences bundle checks but enabled configuration checks still warn—turn those options off individually.
__webpack_require__.e / priority queue emission).acorn and neo-async are no longer dependencies.buildDependencies may mark entries optional: true so a missing shared config file does not block saving the cache.module.parser.javascript.specNamespaceObject for more native-like import * namespace objects (Proxy cost / less merging)—most apps leave this off.Also: resolve.fileSystem is honored; module.exprContextCritical deprecation points at module.parser.javascript.exprContextCritical; DefinePlugin undefined property reads throw like native.
More reliable CSS hot updates and cache invalidation; async init / optimized JS / CSS in server and loader workflows; clearer errors for missing assets and runtime codegen; scope-hoisting and HTML </ escaping fixes; DelegatedModule / cached resolveOptions / inlined-value consumer regeneration. Prefer the 5.111.0 release notes for the full contributor list.
npm ls webpack / lockfile. Note whether you are on 5.110.x or earlier.webpack@5.111.1 (or at least 5.111.0). Confirm with npm view webpack version (expect 5.111.1 as latest as of sources read 5 Oct 2026).experiments.outputModule with output.module: true; verify library/externalsType module setups.output.copy for public/ instead of a separate copy step; confirm watch + output.clean behavior.inset/nesting/color output; re-test HMR for CSS.ShopperCove did not change production webpack versions for this article. Prefer the official 5.111 blog over third-party roundups.
Webpack 5.111 (blog 14 Sep 2026) stabilizes ESM output, adds output.copy, expands target-aware CSS lowering, renames performance checks, and lightens runtime/deps. Pin webpack@5.111.1 (or 5.111.0+) when ready. No affiliate.
Lab evidence
Sources read 5 Oct 2026 (Asia/Calcutta): official blog Open webpack.js.org (2026-09-14); GitHub tag v5.111.0; npm webpack@5.111.0 (time 2026-09-14T06:18:27.582Z) and dist-tag latest=5.111.1 (time 2026-09-18T11:27:13.638Z). Concrete checklist: if only experiments.outputModule:true, add output.module:true (old flag ignored); library type module|modern-module enables output.module; consider output.copy for public/; update performance unusedAliases/unusedReexports/embeddedSourceMaps/entrypointOverlap to unusedConfig/unusedModules/sourceMaps/duplicateModules; re-test HMR/CSS. No production webpack upgrade on ShopperCove; no invented CVEs.
Hands-on6 Oct 20266 min read
tsup 8.5.1 vs unbuild 3.6.1 on a 150-module TypeScript library (ESM+CJS): median 931 ms vs 2034 ms (~2.2x); with .d.ts 3213 ms vs 3740 ms (~1.16x). unbuild ESM 4.9% smaller, CJS 8.3% smaller; tsup README says not actively maintained.
Hands-on5 Oct 20265 min read
Rolldown 1.2.12 vs Rollup 4.64.0 on 501 ESM files (197380 B source): median wall 245.617 ms vs 964.3 ms (~3.9x). Output 130522 vs 126894 B. Direct node bin, 5 interleaved warm runs, no minify.
Summary5 Oct 20264 min read