Getting started

Server Components

Which components render server-side, and how to compose the rest from RSC.

Overview

Every component installs as copied source, and the registry build injects 'use client' automatically when the source needs it (Radix primitives, client-only libraries, React state or context). Components installed without the directive are true server modules — rendered entirely on the server with zero client JavaScript.

Server modules (12): badge, blockquote, code, heading, kbd, skeleton, sparkline, spinner, steps, swap, text, textarea. The remaining 73 components are client components.

Client components still render fine from Server Components — but in a server file import the named part exports (import { DialogContent } …), never property-access a compound namespace: Dialog.Content inside an RSC resolves to undefined ("Element type is invalid") because the client-module proxy wraps only top-level exports. Every compound part is guaranteed to exist as a named export; CI enforces it.

Callbacks and other non-serializable props cannot cross the boundary. Put interactive composition (open state, event handlers) in a client file and pass server-rendered content through as children.