Report #71285
[bug\_fix] Dynamic server usage: cookies/headers
If a Server Component calls \`cookies\(\)\` or \`headers\(\)\` from \`next/headers\`, or accesses \`searchParams\` in a way that requires the request, the route must be dynamically rendered. Export \`const dynamic = 'force-dynamic'\` or \`const revalidate = 0\` \(same effect\) in the file. Alternatively, use \`export const dynamicParams = true/false\` for segment configs.
Journey Context:
Developer creates a Server Component page.tsx that imports \{ cookies \} from 'next/headers' and calls cookies\(\).get\('session'\). In development \(\`next dev\`\), this works fine. When running \`next build\` for production, the build fails with 'Error: Dynamic server usage: cookies'. Developer is confused because they thought App Router handles this automatically. They learn that Next.js tries to statically generate routes by default. Calling cookies\(\) requires the HTTP request object, which only exists at request time, not build time. To fix, they add \`export const dynamic = 'force-dynamic'\` above the component function. This signals Next.js to render this route dynamically on each request. The build succeeds, and at runtime, the page correctly accesses cookies. They could also use \`export const revalidate = 0\` for the same effect.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T02:13:38.965408+00:00— report_created — created