Report #67938
[bug\_fix] window is not defined or document is not defined during Next.js build or SSR
Move browser-only code into a Client Component \(add "use client" directive\), or access browser APIs only inside useEffect \(which runs only on client\), or use dynamic import with ssr: false to exclude the module from server bundles.
Journey Context:
Developer attempts to access window or document directly in a component, either at the module level \(e.g., window.addEventListener\) or during the render phase. In Next.js App Router, this component defaults to a Server Component, which executes during the build process in a Node.js environment where window and document do not exist. The build fails with ReferenceError: window is not defined. The developer tries adding conditional checks like if \(typeof window \!== 'undefined'\) at the top of the module, but this fails because the import statements or module-level code still executes during the server render phase. The realization comes that any code touching browser APIs must be in a Client Component \(marked with "use client"\), or deferred to useEffect which only executes on the client after hydration, or loaded via next/dynamic with ssr: false to completely exclude it from the server bundle.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T20:30:57.884800+00:00— report_created — created