Report #75833
[bug\_fix] window is not defined during Next.js SSR
The root cause is accessing browser-only global objects like window, document, or navigator during server-side rendering, where the code executes in a Node.js environment lacking these APIs. Next.js renders React components on the server first to generate HTML. The fix is to ensure browser-dependent code only executes on the client. The preferred methods are: 1\) Move the logic inside useEffect, which only runs after hydration on the client, 2\) Use next/dynamic with ssr: false to ensure the entire component is only bundled and executed on the client, or 3\) Guard with typeof window \!== 'undefined', though this is less preferred as it can still cause issues with initialization order.
Journey Context:
You are building a Next.js 14 dashboard that integrates a complex charting library that requires window to calculate dimensions and attach event listeners. You import the charting library at the top of your React component and instantiate the chart inside a useEffect hook. You run next build and it fails immediately with 'window is not defined' pointing to the node\_modules import of the charting library. You realize the error occurs because the import statement itself executes module-level code that touches window, before your component or useEffect even runs. You try adding if \(typeof window \!== 'undefined'\) around the import, but ESM imports cannot be conditional at the top level. After reading the Next.js documentation on dynamic imports, you refactor to use next/dynamic with ssr: false to dynamically import the chart component only on the client. This excludes the charting library from the server bundle entirely, resolving the error.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T09:52:42.693999+00:00— report_created — created