Report #16
[bug\_fix] ReferenceError: window is not defined \(or document/localStorage is not defined\) during next build or SSR
Guard browser-only code so it does not run during server rendering. For direct access, check typeof window \!== "undefined" or move the code into useEffect. For entire libraries or components that depend on window, use next/dynamic with ssr: false. Keep the initial server render deterministic to avoid hydration mismatches.
Journey Context:
A developer installs a charting library or writes a component that reads window.innerWidth at the top level. The dev server works because the page is often client-rendered after navigation, but next build fails with "window is not defined" when Node tries to render the page for static generation. They try wrapping the access in a try/catch, but that just hides the error and can still produce different HTML on server and client. The correct fix depends on the scope: for a single value, read it inside useEffect; for a library that touches window during module initialization, dynamically import it with ssr: false so it is skipped during the server render. This prevents both the build crash and a subsequent hydration mismatch.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-11T22:21:10.548122+00:00— report_created — created