webpack/webpack · error · Error

Failed to fetch update manifest " + response.statusText

Error message

Failed to fetch update manifest " + response.statusText

What it means

Runtime error in the JsonpChunkLoading HMR manifest downloader: `fetch(publicPath + manifestFilename)` returned a response whose `.ok` is false (non-2xx, non-404 status). 404 is treated as 'no update' and silently ignored; any other failure status throws with the response's statusText appended.

Source

Thrown at lib/web/JsonpChunkLoadingRuntimeModule.js:385

								"}"
							]
						)};`,
						"",
						generateJavascriptHMR("jsonp")
					])
				: "// no HMR",
			"",
			withHmrManifest
				? Template.asString([
						`${
							RuntimeGlobals.hmrDownloadManifest
						} = ${runtimeTemplate.basicFunction("", [
							'if (typeof fetch === "undefined") throw new Error("No browser support: need fetch API");',
							`return fetch(${RuntimeGlobals.publicPath} + ${
								RuntimeGlobals.getUpdateManifestFilename
							}()).then(${runtimeTemplate.basicFunction("response", [
								"if(response.status === 404) return; // no update available",
								'if(!response.ok) throw new Error("Failed to fetch update manifest " + response.statusText);',
								"return response.json();"
							])});`
						])};`
					])
				: "// no HMR manifest",
			"",
			withOnChunkLoad
				? `${
						RuntimeGlobals.onChunksLoaded
					}.j = ${runtimeTemplate.returningFunction(
						"installedChunks[chunkId] === 0",
						"chunkId"
					)};`
				: "// no on chunks loaded",
			"",
			withCallback || withLoading
				? Template.asString([
						"// install a JSONP callback for chunk loading",

View on GitHub (pinned to 638ce71195)

Solutions

  1. Open the manifest URL (the path shown after publicPath) directly in the browser to see the real status/body.
  2. Correct `output.publicPath` and devServer proxy config so the manifest is reachable.
  3. Ensure auth/proxy middleware in front of devServer allows the hot-update manifest route.
  4. Restart the dev server and refresh the page to re-sync the expected manifest filename.

Example fix

// before: publicPath 'https://cdn.example.com/' but dev server is on localhost
output: { publicPath: 'https://cdn.example.com/' }

// after
output: { publicPath: '/' } // or the dev server origin
Defensive patterns

Strategy: try-catch

Validate before calling

// Probe the manifest endpoint at dev-server startup.
const r = await fetch(publicPath + getUpdateManifestFilename());
if (!r.ok && r.status !== 404) throw new Error('manifest endpoint unhealthy: ' + r.status);

Try / catch

try {
  await __webpack_require__.hmrDownloadManifest();
} catch (e) {
  if (/Failed to fetch update manifest/.test(e.message)) console.warn('HMR manifest unavailable; updates disabled');
}

Prevention

When it happens

Trigger: During HMR, the dev server returns 500/403/etc. for the update manifest request — proxy misconfiguration, auth wall, dev server crash, or publicPath pointing at the wrong host.

Common situations: Reverse proxies in front of webpack-dev-server that block or rewrite the hot-update manifest URL. Auth middleware rejecting the manifest request. publicPath mismatch between build and serve host. Dev server restarted while the page held a stale manifest URL.

Related errors


AI-assisted analysis of webpack/webpack@638ce71195 (2026-08-11). Data as JSON: /api/errors/bfbbaa3ebd61734a. Report an issue: GitHub.