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
- Open the manifest URL (the path shown after publicPath) directly in the browser to see the real status/body.
- Correct `output.publicPath` and devServer proxy config so the manifest is reachable.
- Ensure auth/proxy middleware in front of devServer allows the hot-update manifest route.
- 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
- Keep publicPath reachable from the browser at dev time.
- Configure devServer proxy/auth to allow the hot-update manifest route.
- Watch the Network tab for the manifest request status during HMR setup.
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
- [HMR] Hot Module Replacement is disabled.
- [HMR] Hot Module Replacement is disabled.
- No browser support: need fetch API
- Failed to fetch update manifest " + response.statusText
- [HMR] Hot Module Replacement is disabled.
AI-assisted analysis of webpack/webpack@638ce71195 (2026-08-11).
Data as JSON: /api/errors/bfbbaa3ebd61734a.
Report an issue: GitHub.