vite-hmr-reload-guard-missing
Vite config has no plugin that periodically triggers a full page reload, so long dev sessions accumulate HMR-retained memory.
Applies to: CJS, JavaScript, MJS, TypeScript
Why this matters
Vite's HMR keeps old module versions reachable through closures and React's Fiber tree. Developers who leave a tab open for days while editing accumulate multi-GB retained heaps. A small dev-only plugin that counts handleHotUpdate invocations and fires ctx.server.ws.send({ type: 'full-reload' }) every N updates eliminates the leak with a ~1s refresh. Ship nothing to prod: gate the plugin with apply: 'serve' so production bundles are unaffected.
Catch it before it ships
pip install stablestack # or: npx stablestackstablestack # scans your project, FRONT012 includedstablestack explain FRONT012FRONT012 is part of the Pro rule set. See pricing — the free tier ships 24 checks with no signup.
False positive in your codebase? Suppress a single line with # noqa: FRONT012
More Frontend checks
tabs-url-routing
MUI Tabs should use URL routing via useSearchParams for bookmarkable/shareable tabs.
FRONT002window-ssr-unsafe
Accessing window/document without SSR check causes server-side errors
FRONT003inline-jsx-handler
Inline arrow functions in JSX cause unnecessary re-renders
FRONT004nextjs-redirect-request-url
Redirect uses request.url as URL base, which is wrong behind a reverse proxy.
FRONT005useeffect-side-effect-unguarded
useEffect contains a mutating HTTP call without a guard against double-firing.
FRONT006stale-time-dependent-ui
Time-dependent filtering without a re-render timer will show stale data.
FRONT007unbounded-ai-output
AI/LLM output rendered in JSX without truncation or overflow handling.
FRONT008loading-returns-null
Returning null during loading causes layout shift and flash of empty content.