This is a preview — how webpack's changelog would look hosted on Wakelog (100 entries found, first 15 shown). Nothing was saved. To make it real: sign up (30 seconds, no email), create a project, and paste the same URL in the Import box — you'll also get RSS, an embeddable widget, a README badge, and an API. Try another.

webpack

v5.111.1

Sep 18, 2026
Patch Changes
  • Keep the </html> a page was written with, whatever opened the element. (by @aryanraj45 in #22103)
  • Look an attribute up by what its value decodes to, not how it was spelled. (by @aryanraj45 in #22107)
  • Follow HTML template form and frameset rules during tree construction. (by @dependabot in #22129)
  • Keep an attribute's delimiter and spell its value back where quoting is frozen. (by @alexander-akait in #22119)
  • Rewrite an attribute value the source spelled with character references. (by @aryanraj45 in #22110)
  • Leave out an implied tag and merge adjacent runs on the first pass. (by @aryanraj45 in #22121)
  • Cover the CSS lookup tables no stylesheet in the corpus reaches. (by @aryanraj45 in #22126)
  • Keep initial where an engine reads the property's initial keyword apart. (by @aryanraj45 in #22128)
  • Drop the dead CSS a cut leaves, and join more of the blocks that print alike. (by @alexander-akait in #22111)
  • Run the printer equivalence suite against Firefox as well as Chrome. (by @aryanraj45 in #22151)
  • Record hoisted, module and block declarations while parsing, not by re-walking. (by @alexander-akait in #22147)
  • Halve the CSS minifier's browser-version tables by narrowing their element type. (by @alexander-akait in #22140)
  • Fix module library exports lost under cache or missing behind a re-export. (by @hai-x in #22114)

v5.111.0

Sep 14, 2026
Minor Changes
  • Accept a file URL in any spelling Node reads where an absolute path is taken. (by @alexander-akait in #22012)
  • Minify inline CSS and JSON via renderEmbeddedSource, exporting webpack's own. (by @alexander-akait in #21993)
  • Lower a CSS spelling a target cannot read and write a color fallback before one. (by @alexander-akait in #21926)
  • Drop an implied shorthand slot, fold a math function, tighten color conversion. (by @alexander-akait in #21929)
  • Add module.parser.javascript.specNamespaceObject for spec namespace objects. (by @alexander-akait in #22049)
  • Drop what is already said or only a gone engine reads, add lowerUnsupported. (by @alexander-akait in #21931)
  • Minify an event handler attribute, and name the production each script body is. (by @alexander-akait in #21968)
  • Add source-map, asset, module, bailout, federation hints; group config checks. (by @alexander-akait in #21961)
  • Lower CSS nesting, :dir() and custom at-rules; gate case folding and escapes. (by @alexander-akait in #21950)
Patch Changes
  • Minify an embedded body through the embedded path, dropping three html options. (by @alexander-akait in #21936)
  • Repair hashed names; under HMR bake hashed url maps and reload moved css names. (by @alexander-akait in #21916)
  • Escape external requests in generated ESM imports and star reexports. (by @bjohansebas in #22078)
  • Fix stack overflows in ESM library star reexport cycles with externals. (by @bjohansebas in #22080)
  • Preserve live bindings when reexporting external ESM exports. (by @bjohansebas in #22082)
  • Use configured external requests in ESM star reexports; reject property paths. (by @bjohansebas in #22079)
  • Preserve import attributes on ESM library star reexports of externals. (by @bjohansebas in #22081)
  • Fail the build when a runtime module's code generation throws while hashing. (by @alexander-akait in #22034)
  • Refresh a cached module's resolveOptions from the factory, not the pack. (by @hai-x in #21945)
  • Read the extension out of a path-scoped rule's alternation, class or braces. (by @alexander-akait in #21946)
  • Keep an HTML attribute name or list token holding a foreign template delimiter. (by @alexander-akait in #22018)
  • Give a deferred namespace the spec's exotic shape when the exports are known. (by @alexander-akait in #21939)
  • Give a JSON, text or CommonJS namespace the spec's exotic shape and identity. (by @alexander-akait in #22087)
  • Keep a concatenated CommonJS reference a separate statement, guarding it once. (by @alexander-akait in #21962)
  • Resolve a @value once and then localize it, wherever it names an identifier. (by @alexander-akait in #22036)
  • Skip a foreign dependency whose isLazy is a flag when walking a lazy barrel. (by @alexander-akait in #21998)
  • Move diagnostics to buildInfo.diagnostics, persisting parse-time bailouts. (by @hai-x in #22055)
  • Invalidate consumer codegen when an inlined export value changes. (by @xiaoxiaojx in #22020)
  • Rebuild DelegatedModule when DLL manifest metadata changes. (by @xiaoxiaojx in #22028)
  • Refuse inlining const exports across sync cycles with binding reads. (by @xiaoxiaojx in #22085)
  • Escape a text run ending in </, which the tag after it made a comment of. (by @aryanraj45 in #22086)
  • Minify an attribute by what its value says, not by how the source spelled it. (by @aryanraj45 in #22095)
  • Update dependencies and match the ReadFileSync type to Node.js typings. (by @dependabot in #21919)
  • Match acorn on ** arrows, LS/PS cooking, string export names, program reuse. (by @alexander-akait in #21666)
  • Parse without acorn, serialize parse-error locations, trim walker allocations. (by @alexander-akait in #21667)

v5.110.3

Sep 1, 2026
Patch Changes
  • Skip ESM interop when require() targets a module outside the concatenation. (by @hai-x in #21884)
  • Fix concatenated require() in a require.ensure callback or a computed request. (by @hai-x in #21907)
  • Throw when a deferred namespace of an async module is forced while it evaluates. (by @alexander-akait in #21871)

v5.110.2

Aug 30, 2026
Patch Changes
  • Fix analyzable ESM baking around cycles, mixed-served wasm and style url maps. (by @alexander-akait in #21851)
  • Stop emitting the CSS chunk loading runtime when every CSS chunk is initial. (by @alexander-akait in #21862)
  • Strip a BOM a loader put on a string, and shift a source map that counted it. (by @alexander-akait in #21857)

v5.110.1

Aug 27, 2026
Patch Changes
  • Fix a capture-group-less snapshot.managedPaths RegExp; speed up cache writes. (by @alexander-akait in #21843)
  • Accept the optimization.minimize: true shorthand set by a plugin in apply(). (by @AgentEnder in #21845)

v5.110.0

Aug 27, 2026
Minor Changes
  • Wrap concatenated modules in lazy __webpack_require__.cw accessors and inline require(), keeping a wrapped body's names and side effects intact. (by @hai-x in #21519)
  • Add performance hints reporting what a build costs: duplicate packages and modules, circular dependencies, broad contexts, large modules and chunks, hotspots, eval, missing PURE annotations, polyfills, redundant dynamic imports, OS-dependent rules, cache effectiveness, how chunks load, what splitting refused, why an optimization was skipped, and rules, defines, externals, aliases and barrel reexports nothing uses. An oversized asset names its largest modules, and an entrypoint carrying the runtime recommends optimization.runtimeChunk. Enable every check not set individually with performance.all, report hints in stats only with performance.hints: "stats", and get them in a stable order that leaves the build hashes unchanged. (by @alexander-akait in #21841)
  • Add the externalsPresets.nodeModules preset with an allowlist option to externalize installed packages, replacing the webpack-node-externals plugin. (by @alexander-akait in #21569)
  • Add output.library.umdAmdContainer for an AMD-style loader branch in UMD. (by @hai-x in #21770)
  • Resolve @custom-media values that are true / false or name another custom media. (by @alexander-akait in #21624)
  • Add the __webpack_css_server_styles__ module variable to read the CSS collected while rendering without a DOM, and keep that CSS in the order the styles were applied. (by @alexander-akait in #21576)
  • Patch the HTML <head> in place on hot update instead of forcing a full reload, including when a <script> that never executed is removed. (by @alexander-akait in #21624)
  • Scope counter names in CSS modules; fix the counter() counter-style and animation timeline keywords. (by @alexander-akait in #21600)
  • Derive import defer / import source from the target and fix the source phase. (by @alexander-akait in #21810)
  • Tree shake CommonJS: module.exports object literals, exports destructured from a require() binding, unused method requires, and unused side-effect-free require() calls and reexports. (by @alexander-akait in #21841)
  • Minify CSS further, only where the document is unchanged: shorthands and box longhands, font-weight, <position> and font-stretch keywords, colors (polar, Lab and hsl() converted to hex), numbers, times, zero units, calc() and every math function the spec names folded over constants, selector lists, An+B, keyframe selectors, media-feature ranges, unicode-range, transition layers, display, transforms, gradients, font families, identical repeated declarations, and rules an identical later one makes dead. Abilities are read off the target browsers, vendorPrefixes adds and drops vendor prefixes for them, and rewriteCustomProperties shortens custom property values. Minification never changes whether a declaration parses, and beautifying keeps every rule. (by @alexander-akait in #21841)
  • Safely minify CSS (with source maps) and HTML assets when optimization.minimize is enabled, unless a minimizer is already configured for them, making only transformations an engine cannot tell apart. Every rewrite is named as an option, so it can be switched off. (by @alexander-akait in #21841)
  • Minify HTML further where the parsed document is unchanged: drop redundant quotes, whitespace nothing renders, escapes text does not need, implied tags, optional end tags nothing prints behind, empty attributes and nested empty elements; fold enumerated values and casing; normalize each attribute against the element it is on; and rewrite style, token lists, srcset, sizes, URL, integer and boolean attributes, viewport content, inline <style> and a JSON <script> body through their own grammars. Adds the optimization.minimize.html options collapseWhitespace, mergeStyles, minifyConditionalComments, minifySrcdoc, preserveComments, removeEmptyAttributes, removeEmptyElements, removeImpliedTags, removeRedundantAttributes, sortAttributes and sortTokenLists, and keeps an end tag the parent, the next element or the adoption agency would otherwise restructure the tree over. (by @alexander-akait in #21841)
  • Report which compilers changed on the MultiCompiler done hook. (by @bjohansebas in #21580)
  • Add [containedpath]/[containedfile] placeholders, used for [path]/[file] of asset and html modules with experiments.futureDefaults. (by @alexander-akait in #21592)
  • Support an object for an entry's html that overrides output.html per option. (by @alexander-akait in #21574)
  • Report bindings named eval, arguments or reserved words in ES module output. (by @alexander-akait in #21567)
  • Emit no development source map for module libraries, or any with futureDefaults. (by @alexander-akait in #21839)
  • Speed up builds and cut memory: faster CSS, HTML and JavaScript parsing and minification, a built-in scope analyzer replacing eslint-scope, faster dependency hot paths, module diagnostics, CommonJS export scanning and concatenated module renaming, runtime modules, parsers, generators and dependencies loaded only when used, one file watcher pool shared between MultiCompiler children, and lower parser, graph and startup memory. (by @alexander-akait in #21841)
  • Improve tree-shaking for a namespace reexported as default, and fix import d from "./mod"; d.member reading undefined in that case. (by @alexander-akait in #21841)
  • Add output.resourceHints.dedupe to skip prefetch links for already preloaded/prefetched chunks. (by @alexander-akait in #21386)
Patch Changes
  • Let a memory-cache etag mismatch fall through to the file cache instead of reporting a miss. (by @alexander-akait in #21624)
  • Determine provided exports in dependency order, so a build's module hashes no longer depend on what the persistent cache held. (by @alexander-akait in #21630)
  • Follow the HTML spec more closely when parsing and printing: frameset content, quirks paragraphs and selects, <![CDATA[ outside foreign content as a bogus comment, <?target data?> as a processing instruction, </> dropped, comment data and DOCTYPE identifiers read from the tokenizer states, attributes merged from a repeated <html>/<body> tag, legacy JavaScript script types, void keygen and font format detection — and hand back the tree a parsed document was built from when printing it. (by @alexander-akait in #21841)
  • Clear a Watching's blocked flag when its build starts, so it reports only a child actually waiting for its MultiCompiler parent. (by @bjohansebas in #21639)
  • Fix AMD define() output using the wrong module and exports argument names. (by @hai-x in #21814)
  • Fix ReferenceError from import.meta.main using the wrong module argument. (by @hai-x in #21620)
  • Leave a @namespace URI alone instead of resolving and rewriting it as an asset. (by @alexander-akait in #21658)
  • Track exports usage of side-effect-free modules an active import() evaluates. (by @hai-x in #21623)
  • Resolve absolute symlink targets and treat an unreadable context as missing. (by @alexander-akait in #21647)
  • Respect strictThisContextOnImports for require() member calls. (by @hai-x in #21601)
  • Fix import.meta, [object Object] asset urls and crashes in build-time executed modules. (by @alexander-akait in #21841)
  • Inherit sideEffects past a type-only nested package.json for files under node_modules. (by @xiaoxiaojx in #21686)
  • Do not fail directory creation when the file system reports it already exists. (by @alexander-akait in #21698)
  • Fix DefinePlugin optional chains reading an undefined object member. (by @lazerg in #21823)
  • Fix MultiCompiler: compute the common outputPath by whole path segments, run again after a dependency validation failure, and recover watch mode from a fatal child error without leaking watchings. (by @alexander-akait in #21841)
  • Keep a nested bundle's runtime tables separate when bundling webpack output. (by @alexander-akait in #21568)
  • Fix namespace object reexports and string export names in module library output and emit a CommonJS entry's default as export default. (by @alexander-akait in #21589)
  • Keep tree-shaken JSON arrays as arrays when a prototype property is read. (by @hai-x in #21599)
  • Generate every CSS and HTML lookup table into lib/{css,html}/data.js from mdn-data, color-name and the spec IDL — including the value-type facts read out of the CSS value-definition grammars — leaving both syntax.js files algorithm only. (by @alexander-akait in #21841)
  • Support UNC paths in module and context replacement plugins. (by @avivkeller in #21645)
  • Emit less runtime code: shorter syntax where output.environment allows, no IIFE for a RuntimeModule without locals, no unread __webpack_esm_id__ and exports.id chunk exports, and an ESM entry chunk installing its own modules from its local bindings instead of importing itself. (by @alexander-akait in #21841)
  • Release the compilation and file system caches retained after compiler.close(). (by @alexander-akait in #21603)

v5.109.2

Jul 28, 2026
Patch Changes
  • Resolve aliases pointing at a package directory whose name ends with .js again. (by @alexander-akait in #21542)
  • Name CSS sources in source maps by their resource path, without the css prefix. (by @bjohansebas in #21536)
  • Delete no longer referenced files from the filesystem cache directory after storing the cache, age them by recorded time so restored caches are cleaned too, and collect every fully expired pack in one store instead of one per build. (by @bjohansebas in #21528)
  • Skip require().prop in dead branches gated by inlined imported constants. (by @hai-x in #21517)
  • Annotate configuration options and public hooks in the generated types with the @since JSDoc tag. (by @bjohansebas in #21473)

v5.109.1

Jul 27, 2026
Patch Changes
  • Fix stray semicolon emitted before an imported call following a parenthesized sequence element. (by @alexander-akait in #21533)
  • Make require(esm) module.exports re-export analysis independent of module processing order. (by @alexander-akait in #21521)
  • Ignore ERR_SERVER_NOT_RUNNING on lazy-compilation backend dispose so compiler.close() succeeds on Bun. (by @alexander-akait in #21521)
  • Improve Deno compatibility: guard setNoDelay and force-close connections on lazy-compilation backend dispose, and return a real ArrayBuffer from the Node async/sync wasm loader so WebAssembly.instantiate accepts it. (by @alexander-akait in #21524)
  • Speed up the HTML parser and cut its peak memory: module-scope helpers/state and tokenizer callbacks, plus exact AST column pre-sizing. (by @alexander-akait in #21492)
  • Track CommonJS build dependencies by parsing sources when require.cache children are unavailable (e.g. Bun). (by @alexander-akait in #21531)
  • Cook common string-literal escapes on the JS parser fast path and own the tokenizer's cold-path readers. (by @alexander-akait in #21500)
  • Build the CSS parseA* AST on the SoA store instead of node classes, cutting parse memory and time. (by @alexander-akait in #21498)
  • Speed up and cut memory of the experimental CSS and HTML parsers: drop two derivable AST node columns, and scan long string, url, comment, and plaintext token bodies natively. (by @alexander-akait in #21504)
  • Speed up non-modules CSS parsing: skip redundant token re-reads, drop selector-prelude tokens without materializing nodes, allocate rule preludes lazily, and fast-path empty list seals. (by @alexander-akait in #21511)
  • Speed up stats generation and cut its peak memory: reuse cached sort comparators instead of thrashing the comparator caches on every sort, and drop redundant module-graph lookups and allocations in the extractors. (by @alexander-akait in #21506)
  • Speed up CSS parsing: byte-range function-name checks, indexed sibling lookahead. (by @bjohansebas in #21520)
  • Reduce allocations and redundant work across the code-generation, module-concatenation, exports/usage-analysis, hashing, and chunk-splitting hot paths. (by @alexander-akait in #21516)
  • Enable the Node.js compile cache in the webpack CLI entry point. (by @bjohansebas in #21523)
  • Speed up SplitChunksPlugin: reject non-subset chunk sets with 64-bit signatures, cache unnamed entry keys, and drop per-module closures. (by @avivkeller in #21529)
  • Initialize NormalModule._ast in the constructor so each instance keeps a single hidden-class shape. (by @alexander-akait in #21515)
  • Deduplicate and simplify several lib modules and speed up AggressiveMergingPlugin. (by @alexander-akait in #21525)
  • Rename nested const/let __webpack_require__ and __webpack_exports__ declarations in bundled webpack output. (by @hai-x in #21508)

v5.109.0

Jul 23, 2026
Minor Changes
  • Default experiments.typescript to "auto", enabling built-in TypeScript support on Node.js >= 22.6 when no TypeScript loader is registered. (by @alexander-akait in #21477)
  • Default experiments.css, experiments.html and experiments.asyncWebAssembly to "auto", enabling built-in support unless a loader is registered for those files; modules with inline or hook-injected loaders (e.g. html-webpack-plugin templates) keep being parsed as JavaScript. (by @alexander-akait in #21477)
  • Add output.resourceHints to emit resource hints (preload/prefetch/modulepreload/preconnect), on by default for ESM output, plus module.parser.<type>.urlHints, css.fontPreload and javascript.dynamicImportCssPreload. (by @alexander-akait in #21477)
  • Add built-in build progress via infrastructureLogging.progress, plus estimatedTime, phaseTimings, progress bar width and progressBar: "auto" on ProgressPlugin. (by @alexander-akait in #21477)
  • Concatenate CommonJS modules with statically analyzable exports; opt out via optimization.concatenateModules: { commonjs: false }. (by @alexander-akait in #21477)
  • Wrap "weird" CommonJS modules into module concatenation instead of bailing out. (by @alexander-akait in #21477)
  • Add output.html.inline (true | "script" | "style") and the webpackInline magic comment to inline chunk content into HTML. (by @alexander-akait in #21477)
  • Add output.html.title, output.html.meta and output.html.base options for head generation. (by @alexander-akait in #21477)
  • Support per-icon link attributes (sizes, media, color, type, crossorigin) and arrays in output.html.favicon. (by @alexander-akait in #21487)
  • Add output.html.manifest to generate and link a web app manifest with hashed icons. (by @alexander-akait in #21487)
  • Add output.html.csp to inject a Content-Security-Policy meta with inline-content hashes and an optional nonce. (by @alexander-akait in #21487)
  • Add the output.html injectTags compilation hook to inject tags (script/link/meta/…) with injectTo placement. (by @alexander-akait in #21487)
  • Add the output.html transformTags compilation hook to mutate, remove, or move (between <head> and <body>) a page's existing <script>/<link>/<style>/<meta> tags. (by @alexander-akait in #21487)
  • Extend the HTML pipeline with html link sources (bundled as their own emitted page) and rel="preload"/"prefetch" links bundled as chunks. (by @alexander-akait in #21477)
  • Recognize more asset-bearing HTML sources: the twitter:player:stream meta, legacy SVG references, and Web App Manifest icons/screenshots/shortcuts URLs. (by @alexander-akait in #21477)
  • Add module.parser.html.as to parse HTML as a document or an element fragment. (by @alexander-akait in #21477)
  • Export webpack.html.HtmlModulesPlugin with transformHtml/htmlEmitted compilation hooks. (by @alexander-akait in #21477)
  • Resolve @custom-media (including media-type values) and @custom-selector in native CSS. (by @alexander-akait in #21477)
  • Scope view-transition-name/-group/-class names and ::view-transition-*() pseudo references in CSS modules under customIdents. (by @alexander-akait in #21486)
  • Add import.meta.glob support, with a caseSensitive option and consistent hidden/node_modules matching. (by @alexander-akait in #21477)
  • Resolve import.meta.resolve("./asset") to the emitted asset URL via the importMeta.resolve parser option. (by @alexander-akait in #21477)
  • Deprecate the importMetaContext parser option in favor of importMeta.webpackContext. (by @alexander-akait in #21477)
  • Emit analyzable new URL(…, import.meta.url), worker/worklet URL and import() references with literal specifiers for ESM module output. (by @alexander-akait in #21477)
  • Evaluate and validate the second argument of dynamic import(specifier, options). (by @alexander-akait in #21477)
  • Add ?raw, ?url, ?inline and ?no-inline asset query suffixes under experiments.futureDefaults. (by @alexander-akait in #21477)
  • Add an interop ("default" | "esModule") hint for object externals to control default-export interop. (by @alexander-akait in #21477)
  • Add an amd-async externals type that loads AMD externals without an AMD library wrapper. (by @alexander-akait in #21477)
  • Warn on strict-mode-only syntax and semantic hazards in ES module output, configurable via the strictModeViolations parser option. (by @alexander-akait in #21477)
  • Support parsers without location APIs: locations derive from node offsets and AST nodes no longer carry loc. (by @alexander-akait in #21477)
  • Attach the original DOM event to ChunkLoadError and ScriptExternalLoadError as error.event. (by @alexander-akait in #21477)
Patch Changes
  • Fix broken HMR with output.module and non-import chunk loading by emitting a plain-JSON hot-update manifest. (by @alexander-akait in #21477)
  • Fix deferred import evaluation: re-throw cached errors, guard forcing a still-evaluating module, keep re-exported deferred namespaces identical, and evaluate initial-chunk deferred context imports lazily. (by @alexander-akait in #21477)
  • Keep ESM live bindings for a module library's entry exports, including when the runtime is emitted as a separate chunk. (by @alexander-akait in #21477)
  • Fix named id assignment reusing an already-used numbered suffix, which could produce duplicate module/chunk ids. (by @alexander-akait in #21477)
  • Fix inlined non-binary asset modules with encoding: false emitting "undefined" instead of their content. (by @alexander-akait in #21477)
  • Decode non-base64 data URIs as UTF-8 so multi-byte characters are preserved. (by @alexander-akait in #21477)
  • Keep required JSON data intact when a prototype method (e.g. arr.includes()) is called on it. (by @alexander-akait in #21477)
  • Recognize modern RegExp flags (d, s, u, v) when statically evaluating new RegExp(...). (by @alexander-akait in #21477)
  • Merge object-form and dotted DefinePlugin definitions so import.meta.env/process.env are consistent across direct, whole-object and destructured access. (by @alexander-akait in #21477)
  • Emit an error when an object external has no entry for the used externals type. (by @alexander-akait in #21477)
  • Fix a persistent cache restore crash when a content section starts exactly on a content-buffer boundary. (by @alexander-akait in #21477)
  • Restore missing internalSerializables entries (webpack/lib/Module and cold filesystem cache). (by @alexander-akait in #21477)
  • Fix lazy compilation backend leaking idle module entries and hanging on exit. (by @alexander-akait in #21477)
  • Stop logging benign ECONNRESET client errors from the lazy compilation server. (by @alexander-akait in #21477)
  • Fix output.html injection edge cases: escaping, head detection, duplicate meta tags, resource-hint/entry-tag retention with inject: false, and stylesheet placement. (by @alexander-akait in #21477)
  • Fix a malformed HTML magic comment leaking a pending webpackInline directive onto the next element. (by @alexander-akait in #21477)
  • Fix off-by-one dropping the last character of an unterminated url(...) at end-of-input. (by @alexander-akait in #21477)
  • Consume the trailing whitespace of a CSS hex escape when unescaping identifiers. (by @alexander-akait in #21477)
  • Fix [fullhash] in output.webassemblyModuleFilename by dropping a stray brace and requesting the getFullHash runtime module. (by @alexander-akait in #21477)
  • Fix duplicated errors/warnings in stats output when detail-less entries exceed errorsSpace/warningsSpace. (by @alexander-akait in #21477)
  • Improve module parse errors with a babel-style code frame and the module type. (by @alexander-akait in #21485)
  • Skip the anonymous default export .name fix-up when name is non-configurable, instead of throwing on pre-ES2015 engines. (by @alexander-akait in #21477)
  • Escape ? and # in context module regexp identifiers so source map names are not truncated. (by @alexander-akait in #21477)
  • Resolve directory requests to their index module in scoped DllReferencePlugin. (by @alexander-akait in #21477)
  • Skip the hasSymbol check in the async module runtime when environment.symbol is set. (by @alexander-akait in #21477)
  • Derive ASI positions from source text instead of acorn's onInsertedSemicolon, so custom parsers need not collect semicolons. (by @alexander-akait in #21477)
  • Avoid a second full parse for auto source type by downgrading module to script in place on a top-level return. (by @alexander-akait in #21477)
  • Fix exponential-time side-effects analysis on cyclic module graphs by memoizing cycle-free results via Tarjan lowlink. (by @alexander-akait in #21477)
  • Speed up CSS and HTML parsing and code generation and reduce parser memory usage. (by @alexander-akait in #21477)
  • Speed up stats generation on large builds by reusing the item context across array items. (by @alexander-akait in #21477)
  • Memoize loader resolution per compilation to avoid re-resolving the same loader for every matching module. (by @alexander-akait in #21477)
  • Update webpack-sources to 3.5.1 and enhanced-resolve to 5.24.2 to cut peak memory. (by @alexander-akait in #21477)
  • Fix context hash crash on unsupported directory entries like FIFOs and sockets. (by @hai-x in #21484)
  • Verify internalSerializables in lint:special and regenerate it in fix:special. (by @alexander-akait in #21476)

v5.108.4

Jul 4, 2026
Patch Changes
  • Speed up non-CSS-Modules CSS parsing by dropping value tokens nothing reads. (by @alexander-akait in #21324)
  • Add HTML integration tests: generateError output, ignored src, null-char parse. (by @aryanraj45 in #21328)
  • Key the provided-exports cache on a lazy barrel's still-lazy re-export targets. (by @hai-x in #21326)

v5.108.3

Jun 29, 2026
Patch Changes
  • Fix HMR codegen crash for harmony accept with unresolved imports. (by @xiaoxiaojx in #21302)
  • Match harmony accept dependencies by module reference so HMR codegen handles imports without a module or chunk id. (by @alexander-akait in #21303)

v5.108.2

Jun 29, 2026
Patch Changes
  • Fix lazy barrel deferral of ungrouped side-effect imports. (by @hai-x in #21291)

v5.108.1

Jun 26, 2026
Patch Changes
  • Fix invalid property access for escaped namespace imports with multi-character mangled export names. (by @xiaoxiaojx in #21280)
  • Add frames to ProfilingPlugin TracingStartedInBrowser event so the trace loads in Chrome DevTools. (by @alexander-akait in #21269)

v5.108.0

Jun 25, 2026
Minor Changes
  • Treat top-level await and import.meta as ES module markers, matching Node.js syntax detection so no explicit module type is needed. (by @alexander-akait in #21218)
  • Add a bun target that emits ESM and externalizes bun:* and node.js built-in modules. (by @alexander-akait in #21248)
  • Support CommonJS reexports via Object.defineProperty value and getter descriptors. (by @alexander-akait in #21129)
  • Skip import specifiers, require() and import() calls in dead conditional branches gated by inlined imported constants (isDEV ? A : B), evaluated via getCondition. (by @hai-x in #21136)
  • CSS localIdentName [hash] now resolves to the local ident hash (matching css-loader); use [modulehash] for the module hash. (by @alexander-akait in #21259)
  • Support .html/.css for the default ./src entry under the html/css experiments. (by @alexander-akait in #21039)
  • Add a deno target (with versions, e.g. deno, deno2, deno1.40) that emits ESM, resolves node.js built-ins via the required node: specifier, and keeps Deno's own import protocols (npm:, jsr:, node:, http(s)://) external. (by @alexander-akait in #21247)
  • Add output.environment.logicalAssignment to emit ||= in runtime code when the target supports logical assignment operators. (by @bjohansebas in #21219)
  • Resolve and rewrite asset URLs inside <iframe srcdoc> in HTML modules. (by @bjohansebas in #21226)
  • Add css-url html source type extracting url() references from CSS-valued attributes. (by @alexander-akait in #21250)
  • Add module.parser.html.sources option to disable or customize URL-attribute extraction for HTML modules, with script / script-module / stylesheet / stylesheet-inline types for custom attributes (by @alexander-akait in #21022)
  • Add module.parser.html.template option to transform HTML module source before parsing. (by @alexander-akait in #21055)
  • Extract more source URLs in HTML modules (SVG, legacy and obsolete attributes). (by @alexander-akait in #21241)
  • Inline export default <const> when the default-exported value is a primitive constant. (by @hai-x in #21189)
  • Support optimization.inlineExports for better tree-shaking. (by @hai-x in #20973)
  • Re-encode inline hash digests ([contenthash]/[chunkhash]/[fullhash]/[modulehash]) from the full content hash, so they carry full entropy and work under optimization.realContentHash and in dynamically-loaded chunk filenames; also preserve leading zero bytes in base-N digests. (by @alexander-akait in #21267)
  • Allow tree-shaking unused calls to /*#__NO_SIDE_EFFECTS__*/-annotated (pure) exports across module boundaries. (by @hai-x in #20907)
  • Defer building unused re-export targets of side-effect-free barrel modules. (by @hai-x in #21165)
  • Keep export mangling enabled for modules whose namespace object is used as a whole value, by materializing a decoupled namespace object that keeps the original export names. (by @alexander-akait in #21234)
  • Add output.environment.let option (paired with target's let capability) and emit let/const instead of var in generated runtime code wherever it is safe. Bindings that may be wrapped in runtime-condition if blocks (harmony imports, ConcatenatedModule external imports) continue to use var to preserve function scoping. (by @alexander-akait in #21010)
  • Add output.html to emit an HTML file per entrypoint, injecting its JS/CSS chunks (including dependOn shared chunks). (by @alexander-akait in #21215)
  • Add module.parser.javascript.pureFunctions to mark top-level names as side-effect-free for tree shaking. (by @hai-x in #21063)
  • Add universal to compiler.platform, true for universal targets ("universal" or ["web", "node"]). (by @bjohansebas in #21252)
  • Add output.strictModuleResolution to gate the runtime MODULE_NOT_FOUND guard. (by @hai-x in #21067)
  • Support an inline digest in hash path placeholders, e.g. [contenthash:base64:8]. (by @alexander-akait in #21259)
  • Add a universal target preset (browser + web worker + Node.js + Electron + NW.js) that always outputs ECMAScript modules. (by @alexander-akait in #21214)
  • Support new Worker(new URL(...)) in universal (node + web) targets by resolving the Worker constructor from worker_threads when no global Worker exists. (by @alexander-akait in #21195)
Patch Changes
  • Avoid copying module runtime requirements when ownership is not transferred. (by @alexander-akait in #21140)
  • Reject __proto__, constructor and prototype path segments in cli.processArguments to prevent prototype pollution. (by @alexander-akait in #21057)
  • Speed up Compilation.deleteAsset and Compilation.renameAsset via a lazy reverse index from asset file name to containing chunks. (by @alexander-akait in #21035)
  • Fix merging of inner modules' top-level declarations in concatenated modules. (by @alexander-akait in #21170)
  • Resolve [fullhash] in url() public paths for inlined CSS export types (style/text/css-style-sheet) at runtime. (by @alexander-akait in #21054)
  • Support inline hash digest and length in CSS module localIdentName placeholders. (by @alexander-akait in #21259)
  • Resolve full CSS escapes (including hex) in CSS-Modules names, so e.g. \75 rl() matches url(). (by @alexander-akait in #21196)
  • Reduce CSS parser CPU (hoisted per-call regexes, byte-compared @container pure-mode keywords) and stop retaining parsed comments on the reused parser instance between modules. (by @alexander-akait in #21202)
  • Reduce CSS build time and memory usage. Per-export CSS dependencies are consolidated into one dependency per module, and hot-path allocations and lookups in CSS code generation and the module-graph cache are trimmed. (by @alexander-akait in #21114)
  • Cache CSS public-path placeholder offsets per module source to avoid re-materializing and re-scanning the source on every render. (by @alexander-akait in #21054)
  • Skip already-visited symlink targets when resolving context hashes so cyclic symlink graphs no longer overflow the queue. (by @alexander-akait in #21088)
  • Avoid materializing dependency source locations when sorting, keeping them lazy to reduce build time and memory. (by @alexander-akait in #21228)
  • Speed up serialization deserialize by replacing a Buffer.isBuffer call with a typeof check. (by @hai-x in #21203)
  • Emit assets with absolute target paths as-is to avoid invalid Windows paths. (by @alexander-akait in #21223)
  • Add output.environment.spread, output.environment.hasOwn, and output.environment.symbol, and use method shorthand, spread, Object.hasOwn, and an unguarded Symbol in generated runtime code where the environment supports it. (by @alexander-akait in #21188)
  • Extend value binding optimization to export default expressions. (by @xiaoxiaojx in #21117)
  • Resolve nested exports info paths iteratively to cut per-level array allocations. (by @alexander-akait in #21137)
  • CommonJS tree-shaking no longer drops exports accessed before a deferred require binding. (by @xiaoxiaojx in #21123)
  • Make CSS-referenced asset available in lazy JS chunk during incremental rebuilds. (by @alexander-akait in #21100)
  • Correct string/template import specifier parsing for filesystem cache build dependencies and fix module-sharing hostname validation. (by @alexander-akait in #21232)
  • perf: guard isDeferred() behind experiments.deferImport in ConcatenatedModule (by @shashank-u03 in #21096)
  • Force-load a module's new owning chunk during HMR when its only loaded chunk is removed from a runtime, so it keeps receiving updates. (by @alexander-akait in #21131)
  • Speed up and reduce allocations in the experimental HTML parser's tokenizer, tree builder, and entity decoder. (by @alexander-akait in #21152)
  • Avoid redundant HTML module work: reuse the dependency-template render across the JS and HTML code-generation passes, and memoize sentinel resolution/content hashing per source. (by @alexander-akait in #21054)
  • Reduce JavascriptParser allocations on the walk hot path to speed up parsing and lower memory usage. (by @alexander-akait in #21139)
  • Keep the error message in module build errors on engines whose Error.stack omits it. (by @alexander-akait in #21239)
  • Move the hot flag from Module to NormalModule, where it's actually read and written. (b

v5.107.2

May 25, 2026
Patch Changes
  • Reduce per-file overhead in ContextModuleFactory.resolveDependencies by batching alternativeRequests hook calls. Previously the hook was invoked once per file in the context (with a single-item array), paying per-call overhead (closure allocation, resolverFactory.get, intermediate arrays in RequireContextPlugin) for every file. The hook is now invoked once per directory with all matched files in one batch — RequireContextPlugin's tap already iterates the items array, so the output is unchanged. Steady-state rebuild on a 4000-file require.context drops a further ~15 ms (after the watch-mode purge fix in the same release). (by @alexander-akait in #21020)
  • Include each external info's runtimeCondition in ConcatenatedModule#updateHash so changes to a concatenated external's runtime condition invalidate persistent caches instead of slipping through with the module id alone. (by @alexander-akait in #21023)
  • Remove unnecessary __webpack_require__ runtime helpers in ESM library output with multi-module chunks. (by @xiaoxiaojx in #21032)
  • Rewrite NormalModule#getSideEffectsConnectionState walk as an allocation-light iterative loop instead of a generator trampoline, restoring rebuild performance lost in #20993 while keeping deep import chains stack-safe. (by @alexander-akait in #21014)
  • Fix runtime ReferenceError on the first activation of a lazy-compiled module when output.library.type produces a closure-wrapped bundle (umd, umd2, amd, amd-require, system). (by @alexander-akait in #21013)

External modules of these types reference closure-bound identifiers like __WEBPACK_EXTERNAL_MODULE_react__, supplied by the library wrapper that is generated once per chunk. When lazyCompilation activates an entry or import for the first time, any external dependency the lazily-built module pulls in arrives in a hot-update chunk that lives outside the original wrapper closure, so its factory body cannot resolve the closure identifier and only a manual page refresh recovers.

The inactive LazyCompilationProxyModule now declares statically-enumerable externals (string and object forms of externals) as its own dependencies, so the initial entry chunk's library wrapper already exposes their closure identifiers. When activation later pulls in those externals through the lazily-compiled module, they resolve to the already-installed factories instead of throwing. Function and RegExp externals are not pre-populated because their effective request set isn't knowable up front.

  • Fill in missing entryOptions when an async block joins an existing entrypoint. (by @alexander-akait in #21026)
  • Release per-child codeGenerationResults in MultiCompiler and at Compiler.close to reduce memory retention. (by @alexander-akait in #21015)
  • Reduce peak memory of SourceMapDevToolPlugin on large builds (closes #20961). (by @alexander-akait in #20963)
  • Fix slow require.context() / dynamic import() rebuilds in watch mode (#13636). When a file inside a watched context directory changed, NodeWatchFileSystem would call inputFileSystem.purge(contextDir). The enhanced-resolve purge implementation matches cache keys with key.startsWith(contextDir), so the stat cache of every file under the directory was discarded on every rebuild — ContextModuleFactory.resolveDependencies then re-stat-ed the whole tree on each rebuild. Single-file rebuilds on a 4000-file context now reuse the warm stat cache, dropping median rebuild from ~1260 ms to ~650 ms in a local reproduction (≈49%). For directory items that are explicitly watched contexts, purge is now called with { exact: true } (added in enhanced-resolve@5.22.0) so only the directory's own entry is invalidated; file-level changes in the same aggregated event continue to purge file stats and the parent readdir as before. (by @alexander-akait in #21020)

Claim your changelog — free