Files
shadcn-ui/apps/v4/content/docs/installation/react-router.mdx
2026-03-25 11:35:14 +04:00

227 lines
5.5 KiB
Plaintext

---
title: React Router
description: Install and configure shadcn/ui for React Router.
---
Choose the setup that matches your starting point.
<div className="mt-6 grid gap-4 sm:grid-cols-3 sm:gap-6">
<LinkedCard
href="#scaffold-with-create"
className="items-start gap-1 p-6 text-sm md:p-6"
>
<div className="font-medium">Use shadcn/create</div>
<div className="leading-relaxed text-muted-foreground">
Build your preset and generate a React Router project.
</div>
</LinkedCard>
<LinkedCard
href="#scaffold-with-cli"
className="items-start gap-1 p-6 text-sm md:p-6"
>
<div className="font-medium">Use the CLI</div>
<div className="leading-relaxed text-muted-foreground">
Scaffold a new React Router project directly from the terminal.
</div>
</LinkedCard>
<LinkedCard
href="#existing-react-router-project"
className="items-start gap-1 p-6 text-sm md:p-6"
>
<div className="font-medium">Existing Project</div>
<div className="leading-relaxed text-muted-foreground">
Configure shadcn/ui manually in an existing React Router project.
</div>
</LinkedCard>
</div>
<div id="scaffold-with-create" className="scroll-mt-24" />
## Use shadcn/create
<Steps>
### Build Your Preset
Open [shadcn/create](/create?template=react-router) and build your preset visually. Choose your style, colors, fonts, icons, and more.
<Button asChild size="sm">
<Link
href="/create?template=react-router"
target="_blank"
rel="noopener noreferrer"
className="mt-6 no-underline!"
>
Open shadcn/create
</Link>
</Button>
### Create Project
Click `Create Project`, choose your package manager, and copy the generated command.
The generated command will look similar to this:
```bash
npx shadcn@latest init --preset [CODE] --template react-router
```
The exact command will include your selected options such as `--base`, `--monorepo`, or `--rtl`.
### Add Components
Add the `Card` component to your project:
```bash
npx shadcn@latest add card
```
If you created a monorepo, run the command from `apps/web` or specify the workspace from the repo root:
```bash
npx shadcn@latest add card -c apps/web
```
The command above will add the `Card` component to your project. You can then import it like this:
```tsx showLineNumbers title="app/routes/home.tsx"
import {
Card,
CardContent,
CardDescription,
CardHeader,
CardTitle,
} from "~/components/ui/card"
export default function Home() {
return (
<Card className="max-w-sm">
<CardHeader>
<CardTitle>Project Overview</CardTitle>
<CardDescription>
Track progress and recent activity for your React Router app.
</CardDescription>
</CardHeader>
<CardContent>
Your design system is ready. Start building your next component.
</CardContent>
</Card>
)
}
```
If you created a monorepo, update `apps/web/app/routes/home.tsx` and import from `@workspace/ui/components/card` instead.
</Steps>
<div id="scaffold-with-cli" className="scroll-mt-24" />
## Use the CLI
<Steps>
### Create Project
Run the `init` command to scaffold a new React Router project. Follow the prompts to configure your project: base, preset, monorepo, and more.
```bash
npx shadcn@latest init -t react-router
```
**For a monorepo project, use `--monorepo` flag:**
```bash
npx shadcn@latest init -t react-router --monorepo
```
### Add Components
Add the `Card` component to your project:
```bash
npx shadcn@latest add card
```
If you created a monorepo, run the command from `apps/web` or specify the workspace from the repo root:
```bash
npx shadcn@latest add card -c apps/web
```
The command above will add the `Card` component to your project. You can then import it like this:
```tsx showLineNumbers title="app/routes/home.tsx"
import {
Card,
CardContent,
CardDescription,
CardHeader,
CardTitle,
} from "~/components/ui/card"
export default function Home() {
return (
<Card className="max-w-sm">
<CardHeader>
<CardTitle>Project Overview</CardTitle>
<CardDescription>
Track progress and recent activity for your React Router app.
</CardDescription>
</CardHeader>
<CardContent>
Your design system is ready. Start building your next component.
</CardContent>
</Card>
)
}
```
If you created a monorepo, update `apps/web/app/routes/home.tsx` and import from `@workspace/ui/components/card` instead.
</Steps>
<div id="existing-react-router-project" className="scroll-mt-24" />
## Existing Project
<Steps>
### Create Project
If you need a new React Router project, create one first. Otherwise, skip this step.
```bash
npm create react-router@latest
```
`create-react-router` already configures Tailwind CSS and the default `~/*` import alias for you. If you're adding shadcn/ui to an older or custom React Router app, make sure both are configured before continuing.
### Run the CLI
Run the `shadcn` init command to set up shadcn/ui in your project.
```bash
npx shadcn@latest init
```
### Add Components
You can now start adding components to your project.
```bash
npx shadcn@latest add button
```
The command above will add the `Button` component to your project. You can then import it like this:
```tsx showLineNumbers title="app/routes/home.tsx"
import { Button } from "~/components/ui/button"
export default function Home() {
return (
<div className="flex min-h-svh flex-col items-center justify-center">
<Button>Click me</Button>
</div>
)
}
```
</Steps>