The new default
In the App Router, every component is a Server Component unless you opt out. This is the inverse of older React: instead of "everything in the browser unless you SSR it," you have "everything on the server unless you mark it as Client."
What that means in practice
- You can write
asynccomponents — they'reawaited during render. - You can read databases, files, and secrets directly — nothing leaks to the browser.
- Heavy libraries (markdown parsers, syntax highlighters, date formatters) ship zero JavaScript for the rendered output.
- The HTML you ship is the rendered output, not a hydration shell.
What Server Components can't do
No state, no effects, no event handlers, no browser APIs. The moment you need any of those, the component becomes a Client Component (next lesson).