[BUG] Claude Desktop on Windows loops on "A new version of Claude is available" with error 1XAF0WC after update
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
After Claude Desktop updated to version 1.24012.9 on Windows 11, opening the app displayed “A new version of Claude is available” with error code 1XAF0WC.
Clicking “Reload” or “Go to home” returned to the same error page. Completely closing Claude, verifying that no claude.exe processes remained, and performing a cold restart reproduced the same error.
The application recovered only after Claude was fully closed and the following Electron cache directories were renamed so that the app could recreate them:
- %APPDATA%\Claude\Cache
- %APPDATA%\Claude\Code Cache
- %APPDATA%\Claude\GPUCache
No account data, configuration, local storage, or session files were removed.
What Should Happen?
Claude Desktop should load the current interface normally after an update.
If a cached SPA entrypoint or JavaScript chunk is stale or cannot be loaded, the app should invalidate or bypass the affected cache and recover automatically instead of repeatedly displaying the fatal update screen.
The user should not need to manually rename or delete Electron cache directories.
Error Messages/Logs
2026-07-28 14:28:22 [warn] [spa] chunk preload failed; running diagnostics, then reloading TypeError: Failed to fetch dynamically imported module: https://assets-proxy.anthropic.com/claude-ai/v2/assets/v1/cf52a4cc1-DaHTBzOx.js
2026-07-28 14:28:26 [error] TypeError: Failed to fetch dynamically imported module: https://assets-proxy.anthropic.com/claude-ai/v2/assets/v1/cd377abb5-CyivASTZ.js
2026-07-28 14:28:26 [error] [BOOTSTRAP] Fatal error boundary triggered {"errorMessage":"Failed to fetch dynamically imported module: https://assets-proxy.anthropic.com/claude-ai/v2/assets/v1/cd377abb5-CyivASTZ.js","errorCode":"1XAF0WC","url":"/epitaxy"}
Steps to Reproduce
- Use Claude Desktop on Windows 11 with an existing user profile and Electron cache from a previous version.
- Update Claude Desktop to version 1.24012.9.
- Launch Claude Desktop.
- The app displays “A new version of Claude is available” with error code 1XAF0WC.
- Click “Reload”.
- The same error screen appears again.
- Fully terminate all claude.exe processes and launch the app again.
- The error is reproduced and the log records a failed dynamic import on the /epitaxy route.
- Fully close Claude again and rename %APPDATA%\Claude\Cache, Code Cache, and GPUCache.
- Launch Claude Desktop. The cache directories are recreated and the application loads normally without a new 1XAF0WC event.
Claude Model
Not sure / Multiple models
Is this a regression?
Yes, this worked in a previous version
Last Working Version
_No response_
Claude Code Version
2.1.220 (Claude Code)
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
Other
Additional Information
Environment:
- Claude Desktop: 1.24012.9 (Windows MSIX package 1.24012.9.0)
- Electron: 42.7.0
- Claude Code: 2.1.220
- Operating system: Windows 11 Pro 25H2, build 26200.8875
- Windows package status: OK
Diagnostics performed:
- A full cold restart, after verifying that zero claude.exe processes remained, still reproduced the error.
- Both JavaScript assets named in the log were tested independently from the same machine and returned HTTP 200 with a JavaScript content type.
- No user proxy was configured.
- Windows Firewall had enabled outbound allow rules for Claude.
- With Claude fully closed, renaming only Cache, Code Cache, and GPUCache caused the application to recreate them and resolved the startup loop.
- No new 1XAF0WC event was logged after the clean cache regeneration.
- Configuration, IndexedDB, Local Storage, Session Storage, Network data, and local Claude Code sessions were not modified.
Possibly related reports:
- https://github.com/anthropics/claude-code/issues/64960 - same error code and /epitaxy dynamic-import failure on macOS; closed as stale.
- https://github.com/anthropics/claude-code/issues/76430 - same error code appeared during an update, but the primary report concerns missing sidebar sessions.
<img width="735" height="511" alt="Image" src="https://github.com/user-attachments/assets/5dcdb723-ddfa-4ebc-9281-c85868373574" />
4 Comments
I have the same issue, i just deleted the cache folder inside of appdata (%APPDATA%\Claude\Cache) and now its working again.
Same issue but resolved by deleting cache at this location:
C:\Users\<user>\AppData\Local\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude
Thanks for the very thorough writeup, it saved me a lot of guesswork this morning. I ran into the same thing on a newer build and wanted to add what I found, including one result that points away from the current explanation.
My setup
Claude Desktop 1.30096.5.0, installed from the Microsoft Store (MSIX, package family
Claude_pzs8sxrjxfjjc), Windows 11 Pro 10.0.26200. Node 24.18.0 according to theStarting applog line.What happened
The Store updated the package at 09:40:46. My Electron cache folders had not been written since June 11 and June 16, so they were about two months old. The first failure came 4.5 minutes later, on the first launch:
I got 11 of these
1XAF0WCevents across five launch attempts, at 09:45, 09:46, 09:47, 10:00 and 10:03.The assets are actually fine
This is the part I did not expect. I fetched every chunk URL mentioned in this issue and in #64960, from the same machine that was failing:
cf52a4cc1-hbzHgoxq.js, HTTP 200, 76285 bytes (mine, the one that kept failing)cd377abb5-BIgStjBb.js, HTTP 200, 22012 bytes (mine, the one at the fatal boundary)cd377abb5-CyivASTZ.js, HTTP 200, 46352 bytes (yours)cf52a4cc1-DaHTBzOx.js, HTTP 200, 2734 bytes (yours)cf52a4cc1-Da2FnJQI.js, HTTP 200, 2938 bytes (from #64960)All 200, all
text/javascript, which lines up with the check you already did. #64960 explains the bug as chunk hashes that no longer exist on the CDN and therefore 404, but that does not look like what is happening, at least not here. The files are served fine to the OS, and the same fetch fails inside Electron. That puts the problem in the local cache rather than on the CDN or in the network.It also explains why the error screen sends you the wrong way. It says to check your connection, so you go and audit DNS, proxies and firewalls, and there is nothing wrong with any of it. I checked anyway, for the record: no outage that day, DNS resolved normally for claude.ai, assets-proxy.anthropic.com and api.anthropic.com,
netsh winhttp show proxyreported direct access,ProxyEnablewas 0, the hosts file was empty, 50 GB of RAM free, and no third party antivirus (only Defender). It is also not the QUIC problem from #65885, since there is noERR_QUIC_PROTOCOL_ERRORor-356anywhere inmain.log.The same two chunks keep turning up
Across the three reports, on two operating systems and over roughly two and a half months, it is the same two chunk ids with different content hashes, always on
/epitaxy.cf52a4cc1shows up in #64960 (June, macOS), here (July) and in mine (August).cd377abb5shows up here (July) and in mine (August).That feels like something specific about those preload entries rather than the whole cache going stale. My logs tag them with
chunk_load_origin: "registry",preload_entry_id: "settings_panel_claude_code"andpreload_tier: "T1", in case that helps narrow things down.One difference worth flagging for Windows users
In #64960 on macOS, a second launch always works, and the advice there is simply to quit and reopen. That does not work on Windows. I tried five times, checking that no
Claude.exeprocesses were left behind each time, and every attempt failed the same way, just as you found. Clearing the cache was the only thing that helped.About the cache path
@akinu is right, and it may be worth folding into the issue body, because the paths in the original report cannot work for anyone who installed from the Store.
%APPDATA%\Claudedoes not exist at all on an MSIX install. Filesystem virtualization moves it, and the app even says so in the log:[MSIX] Filesystem virtualization active. The real location is:The logs live in
...\Claude\logs\main.logand...\Claude\logs\claude.ai-web.log. Anyone on the Store build who follows the original steps will find nothing there to delete, and will quite reasonably conclude the workaround is not meant for them.Deleting
Cache,Code CacheandGPUCachein that folder, after closing everyClaude.exeunderC:\Program Files\WindowsApps\Claude_*, fixed it straight away. The folders were recreated, the app loggedboot: done, and I have not seen1XAF0WCsince.On the related issues
#64960 is the closest match and I think it deserves another look. Same error code, same
/epitaxyimport, samecf52a4cc1chunk id. It adds something a single report cannot show on its own, which is that this happens on every version bump rather than occasionally. It was closed by the stale bot in July rather than by a fix.The comments on it are worth rereading as well. Someone made the point that
[spa] chunk preload failedmeans a recovery path is already running, and that a softlocation.reload()just requests the same document again. Since that document is the stale thing sitting in the cache, the reload resolves the same broken chunk references and falls back into the fatal boundary. The suggestions there were to make that recovery reload cache busting withwebContents.reloadIgnoringCache()behind a one shot flag, to have the error boundary treat a failed dynamic import as recoverable and hard reload once instead of showing the fatal screen, and to serve the navigation document withCache-Control: no-cachewhile long caching only the hashed assets.My logs seem to support that reading.
[spa] chunk preload failed; running diagnostics, then reloadingfires on four separate launches and still ends at the fatal boundary each time, so whatever reload it performs is not clearing the bad cache entry. There is also a second path,Background chunk load failed; nobody is waiting on it, not reloading, which flips from"decision":"allow"to"decision":"hidden"between launches.#76430 carries the same error code during an update, but the report itself is really about missing sidebar sessions, so I suspect that is a different symptom rather than the same bug.
#65885 has a different cause (QUIC), but it is the other MSIX blank screen report on Windows, and the two are easy to mix up, so linking it might save a bit of triage time.
Given that #64960 is macOS and this one is Windows, with the same error code, route and chunk ids, this looks like a cache invalidation problem on update rather than anything specific to MSIX. MSIX just changes where the cache lives, makes the documented workaround unusable, and seems to remove the cold restart that macOS users can fall back on.
Happy to pull any other logs or run further tests if that would be useful.
@DrRIH's writeup matches mine almost point for point, so I'll skip what's already covered and
add three things I don't think are in the thread yet: a deliberate reproduction, a case
with no app update involved at all, and the mechanism behind the Windows "restart doesn't
help" behaviour.
Environment: Windows 10 22H2 (10.0.19045), Claude Desktop 1.44121.4 (MSIX /
windows-store), Electron 42.10.0, Chrome 148.0.7778.280. Newer than both builds reported so
far, so this is still present.
1. It happens without any app update
This is the part that I think reframes the issue title. #64960 describes it as happening on
every update, @DrRIH's began 4.5 minutes after a Store package update, and this report is
"after update". Mine had no update whatsoever — the updater ran hourly all day and staged
nothing; I checked the whole window in
main.log.What actually changed while the app sat idle was a claude.ai web deploy (web commit
1d3fa81b…→231c0b29…). The app then failed on first focus 9.5 hours later.So the trigger looks like a renderer cache that predates the currently-served web build. An
app update is one reliable way to reach that state, but it isn't required — which suggests
"invalidate on app update" wouldn't be a complete fix.
2. Reproduction
Precondition is just a profile cache captured before a claude.ai web deploy and restored
after it. One deploy boundary is enough - my original incident straddled a single deploy.
Cache/,Code Cache/,GPUCache/aside (container path as @DrRIH describes).I reproduced this on demand after the fact, so it should be reproducible internally in
minutes by staging a pre-deploy cache against a current build.
3. Why restart doesn't help on Windows
@DrRIH found five relaunches all failing, and macOS recovering on a second launch. I think
this explains the difference: the last-used surface is persisted in
localStorage— thestring
epitaxyappears 260× inLocal Storage/leveldb. Every relaunch restores/epitaxy,which is precisely the route that dies, before any UI is reachable.
Local Storage/is not one of the three directories the workaround deletes, so the trapsurvives the restart entirely. The only escape I found is the tray quick-entry dialog, which
forces a
/newnavigation instead of letting the SPA restore its saved surface.That suggests a cheap partial fix independent of the cache question: on fatal boundary,
clear the persisted route and fall back to
/new.4. The failure is route-scoped, but the error boundary is global
Worth separating from everything above, because it's verifiable from your own telemetry
without agreeing with any cache theory. The same chunk fails on
/newand the app shrugs:Chat, sidebar and history all keep working. On
/epitaxythe identical rejection reaches theglobal
[BOOTSTRAP]boundary and blanks the entire window.Why the chunk fails is the unresolved part. But *a speculative, non-render-critical preload
rejection being able to reach the global fatal error boundary* is an application-level defect
that stands on its own, and fixing it alone would downgrade this from "the app is dead" to
"Claude Code retries".
Note my
preload_entry_idiscode_product_chunk, where @DrRIH's issettings_panel_claude_code— so it isn't confined to one preload entry either.5. Some things that came back clean
In case they save anyone else the time:
8192 + entry_size * max_entries,updating=0,crash=0; Simple Cache entries untruncatedwith valid EOF records at
filesize-24. Nothing is corrupt.cache and decompress to valid JavaScript. Nothing missing anywhere in the graph.
no V8 code-cache entry for the failing URL at all.
[error]lines in the main process** during either failure.cf52a4cc1failed for me across three different content hashes (B8jZzds_,Du-DgKmH,MgpW7IO9) on one machine across three web commits — consistent with @DrRIH's cross-reportobservation that the chunk ids recur while the content hashes change.
Two things I could not explain:
HTTP/1.1 200by the *same Electroninstance* three seconds before the import of that same URL fails. Reproduced in both my
incidents (22:31:18 / 22:31:21, and 00:12:35 / 00:12:38).
isn't a poisoned entry for the failing asset.
One possible reading of the first: a module map records failures, so once the idle preload's
import()rejects for that URL, later imports in the same realm reject immediately withoutre-fetching, while
fetch()ignores the module map entirely and still returns 200. Thatmatches the ordering, though not why the initial preload fails, nor why it survives reloads.
DevTools is disabled in the production build so I couldn't read the underlying net error. With
a dev build and the repro above it should show up in the Network panel quickly.
Happy to supply logs. I'd rather not attach the cache itself - it contains real file contents
and artifact bodies.