Summary
Two icon names in our Credit Admin Retool app no longer exist on Retool's asset CDN, and each missing icon crashes the part of the app that renders it. The Credit Admin symptom was the app appearing to reload every time you changed tabs.
Retool loads every icon as a separate dynamically imported JavaScript module. When that module 404s, the import rejects during React render, a React error boundary catches it, and the boundary remounts its subtree. There is no error toast and nothing in the app's own query or event logic is involved, so it does not look like an icon problem from the inside.
Any Retool app in the org that references a retired icon name has the same defect. Whether it is noticeable depends only on where the icon sits: an icon in a hidden container mounts the moment that container becomes visible, which is why ours fired on tab switches.
Root cause
An icon name in a Retool component maps directly to a module URL. bold/interface-arrows-button-reload is fetched from https://retool-edge.com/assets_vjs/dynamic-bold-interface-arrows-button-reload.js. That file returns 404, and the 404 response carries no Access-Control-Allow-Origin header, so the browser reports it as a CORS failure before surfacing the network error.
Summary
In a Retool Cloud app, certain icon names (e.g. bold/interface-arrows-button-reload) have been retired from Retool's asset CDN, so their dynamically imported JS modules (retool-edge.com/assets_vjs/dynamic-*.js) return a 404 with no Access-Control-Allow-Origin header. This surfaces as a CORS failure, rejects during React render, and the error boundary remounts the affected subtree — making parts of the app appear to reload (notably on tab switches when previously hidden containers first mount).
AI Response
This behavior is a known, staff-acknowledged consequence of how Retool loads icons: each icon is fetched as a separate dynamically imported module, and a Retool team member has confirmed the root cause is a CORS issue tied specifically to that dynamic icon loading, which was documented internally. The most reliable fix available today is to swap any retired icon name for a currently-valid one from the built-in icon picker (or substitute an uploaded image), which stops the failing dynamic import and prevents the subtree from remounting. Because any app in the org that references a retired icon name has the same defect, it's worth auditing other apps for the same icon references and replacing them proactively.
Sources
Centralizing icon definitions
A Retool team member confirms the same root cause — icons load dynamically and the failure surfaces as a CORS issue, documented internally — directly corroborating the reported mechanism.
The Community Team is testing out a new automation. Let us know if it's helpful (or not) by leaving a
,
, or
. Or by marking this post as the "Solution"! Let us know if you have any feedback here. 