Privacy-friendly analytics only with consent. No ads, no cross-site tracking. Read the privacy policy.
Five steps from an empty React app to a themed screen and a working agent loop. Slipstream ships 109 components; this page wires one, then shows where the rest live.
The CLI is the shortest path: it detects Next.js or Vite, writes slipstream.config.json, creates the component directory, and injects the theme variables.
npx @slipstream-ui/cli@latest init
Prefer package imports or want to copy source into your repository? Both paths are supported and can coexist:
# Package importspnpm add @slipstream-ui/core @slipstream-ui/ai @slipstream-ui/themes# Copy one component's source into your own treenpx @slipstream-ui/cli@latest add message# Or use the shadcn-compatible registrynpx shadcn@latest add https://slipstreamui.com/registry/message.json
Use package imports for a quick client-side integration. Use registry or CLI copies when the host renders server components or needs editable source. The installation guide has the full comparison, including the server-component boundary behavior.
Tailwind 3 users can use the published preset; Tailwind 4 users import the CSS-first theme contract. Both map the same semantic tokens, and both support a custom createTheme().
// tailwind.config.js - Tailwind 3module.exports = {presets: [require('@slipstream-ui/themes/tailwind-preset')],content: ['./src/**/*.{ts,tsx}','./node_modules/@slipstream-ui/**/*.{js,ts,tsx}',],};
/* Tailwind 4 */@import "tailwindcss";@import "@slipstream-ui/themes/tailwind-v4.css";@source "../../node_modules/@slipstream-ui/core/dist";@source "../../node_modules/@slipstream-ui/ai/dist";
Not running Tailwind? Import the prebuilt sheets instead:
import '@slipstream-ui/themes/styles.css';import '@slipstream-ui/core/styles.css';
To brand the components, pass your colors to createTheme() and emit the CSS variables once. The theming guide covers presets, dark mode, and radius.
Start with a page structure: a Section owns the band, a Hero owns the headline, and Card plus Button handle the content. No providers or global state are required.
import { Button, Card, CardContent, Hero, Section } from '@slipstream-ui/core';export function Home() {return (<Section tone="inverse" padding="lg"><Herobadge="Now booking"title="Find your next dance"description="Competitions, socials, and studios across Utah."actions={<Button>Browse events</Button>}media={<Card><CardContent>Season line-up</CardContent></Card>}/></Section>);}
Need a different shape? Hero has split, centered, stacked, and overlay layouts; see the Hero page for live previews. Every component page follows the same Preview / Code / Usage / Types structure.
Run your normal checks first: typecheck, lint, and a production build. Then give your coding agent the same source of truth:
pnpm add -D @slipstream-ui/mcp-server# .mcp.json (Claude Code) or your client's MCP settings{"mcpServers": {"slipstream-ui": {"command": "npx","args": ["-y", "@slipstream-ui/mcp-server"]}}}
The loop is search, read the manifest, write JSX, validate. The validator catches hallucinated props, invalid enum values, and missing required props before the diff reaches your editor.
search_components("chat input")-> Conversation, PromptInput, Responseget_component_manifest("prompt-input")-> exact props, defaults, required flagsvalidate_usage({componentId: "prompt-input",code: "<PromptInput onSubmit={send} isLoading={busy} onStop={stop} />"})-> { valid: true, issues: [] }
Components render unstyled
Tailwind did not scan the package output, or the CSS variables are missing. Add the @slipstream-ui dist folders to your content/@source paths and load the theme variables. See Installation and Tailwind v4.
Theme variables apply to the whole document
Do not set theme variables on document.documentElement from a demo or component. Scope them to your app root or a wrapper. The ThemeShowcase component is the reference for scoped previews.
A client hook errors in a server component
Interactive components (RangeSlider, TableOfContents, Stepper with onStepClick) are client components. Put them in a file with "use client" or import them from a client boundary.
The agent still invents props
Confirm the MCP server is running and expose its five tools. Add a rules-file instruction that requires get_component_manifest and validate_usage before emitting JSX.
Dark mode flashes the wrong theme
Add a pre-paint theme script in the document head that reads the stored preference and toggles the dark class before React hydrates.