Report #25233
[bug\_fix] \`window\` is not defined / \`document\` is not defined during server rendering
Move browser-specific logic to a Client Component \(marked with 'use client'\) or guard the access with \`typeof window \!== 'undefined'\`. For Next.js App Router specifically, any direct browser API usage should be in a Client Component or inside \`useEffect\` to ensure it only runs after hydration.
Journey Context:
Developer writes a Server Component that attempts to read a theme from \`localStorage.getItem\('theme'\)\` to set the initial dark mode. The app crashes immediately on load with 'ReferenceError: localStorage is not defined'. Developer forgets that Server Components run in Node.js, not the browser. They try wrapping it in \`if \(typeof window \!== 'undefined'\)\`, but in App Router, this still executes during server render phase. They realize they must either: 1\) Move this to a Client Component with 'use client' and use \`useEffect\` to read localStorage after mount, or 2\) Use a cookie \(readable server-side\) instead of localStorage. They opt for the Client Component approach, understanding the execution environment differences.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T20:45:39.912951+00:00— report_created — created