React Server Components (RSC) run on the server and stream serialised React trees to the client — no JS bundle, direct DB access, and automatic code-splitting at the server/client boundary. The mental model is a single component tree where some nodes run on the server and others hydrate in the browser. Understanding the boundary — and how Server Actions wire mutations back — is the key skill.
Decision tree: should this component be a Server or Client Component?
Pass Client Components as children or props. The RSC renders the CC boundary; the server never executes CC code.
Marking any component "use client" makes all its imports into Client Components too. Push the boundary as deep as possible.
Async functions marked "use server" run on the server but can be called from Client Components. No manual fetch() needed.
Sign in to share your feedback and join the discussion.