Skip to content
NR.Niels Rigter

Server Components explained

Server Components aren't a buzzword replacement for 'regular React'. They change where code runs and how much JavaScript the browser gets. Here's the practical framework.

Updated 2026-08-02 · 9 min read

Short answer

In the Next.js App Router, components are Server Components by default: they render on the server, can fetch data close to the source, and don't ship their own JS bundle to the client for that logic.

Client Components (`'use client'`) are needed for state, effects, browser APIs, and rich interaction. Good apps mix both deliberately.

What problem does this solve?

Less JavaScript in the browser for pages that mainly show data. Secrets and heavy libraries can stay on the server. Data fetching sits closer to rendering, with fewer fetch-waterfall issues when structured well.

It doesn't automatically fix bad queries or heavy client widgets. Architecture remains your responsibility.

Server vs Client: rules of thumb

  • Server: fetch data, layout, SEO-sensitive content, auth checks at the edge
  • Client: forms with live validation, interactive charts, drag-and-drop, localStorage
  • Keep Client Components low in the tree: push `'use client'` as deep as possible
  • Don't share server-only secrets or modules across client boundaries

Common misconceptions

'Everything on the server is always faster': not if you overload the server or skip caching. 'Server Components replace an API': sometimes for your own UI, not when other clients need the same data.

'use client' doesn't mean 'no SSR': Client Components can still prerender on the server; they do bring JS for hydration.

Practical approach in a project

  1. 1. Start server-first

    Build pages as Server Components until interaction is truly needed.

  2. 2. Isolate interaction

    Small client islands for buttons, filters, editors. Don't make the whole page client.

  3. 3. Measure bundles

    See which libraries pull into the client. Heavy deps often belong server-side or lazy-loaded.

When it goes wrong

  • Too early `'use client'` everywhere from old Pages habits
  • Prop-drilling server data through unnecessarily thick client trees
  • No caching strategy: heavy work on every request
  • Team doesn't understand boundaries: bugs and 'window is not defined'

When I can help

Building or refactoring a Next.js app and want Server Components used well without breaking the UI? I help with architecture, performance, and a migration path that stays shippable.

In the App Router they're the default. You can do everything client-side, but you often give up performance and simpler data fetching.

Back to knowledge base