Show where the current page sits in the site. Add separators between levels and collapse the middle when the path gets long.
import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator,} from "@/components/ui/breadcrumb"export function Example() { return ( <Breadcrumb> <BreadcrumbList> <BreadcrumbItem> <BreadcrumbLink href="/docs">Docs</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbLink href="/docs/components">Components</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbPage>Breadcrumb</BreadcrumbPage> </BreadcrumbItem> </BreadcrumbList> </Breadcrumb> )}Installation
npx @arctis-sh/@arctis-sh/ui@latest add breadcrumbUsage
import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator,} from "@/components/ui/breadcrumb"<Breadcrumb> <BreadcrumbList> <BreadcrumbItem> <BreadcrumbLink href="/docs">Docs</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbLink href="/docs/components">Components</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbPage>Breadcrumb</BreadcrumbPage> </BreadcrumbItem> </BreadcrumbList></Breadcrumb>Composition
Breadcrumb
└── BreadcrumbList
├── BreadcrumbItem
│ └── BreadcrumbLink
├── BreadcrumbSeparator
├── BreadcrumbItem
│ └── BreadcrumbLink
├── BreadcrumbSeparator
└── BreadcrumbItem
└── BreadcrumbPageBreadcrumbList holds the ordered trail. Each BreadcrumbItem contains either a BreadcrumbLink or the current BreadcrumbPage, with BreadcrumbSeparator between items.
Basic
A root, section, and current page with the default chevron separators.
import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator,} from "@/components/ui/breadcrumb"export function Example() { return ( <Breadcrumb> <BreadcrumbList> <BreadcrumbItem> <BreadcrumbLink href="/docs">Docs</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbLink href="/docs/components">Components</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbPage>Breadcrumb</BreadcrumbPage> </BreadcrumbItem> </BreadcrumbList> </Breadcrumb> )}Custom separator
Pass children to BreadcrumbSeparator to replace the chevron with a slash, dot, or another mark.
import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator,} from "@/components/ui/breadcrumb"export function Example() { return ( <Breadcrumb> <BreadcrumbList> <BreadcrumbItem> <BreadcrumbLink href="/docs">Docs</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator> <SlashIcon /> </BreadcrumbSeparator> <BreadcrumbItem> <BreadcrumbLink href="/docs/components">Components</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator> <SlashIcon /> </BreadcrumbSeparator> <BreadcrumbItem> <BreadcrumbPage>Breadcrumb</BreadcrumbPage> </BreadcrumbItem> </BreadcrumbList> </Breadcrumb> )}Collapsed
Replace middle levels with BreadcrumbEllipsis when the full trail is too long.
import { Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator,} from "@/components/ui/breadcrumb"export function Example() { return ( <Breadcrumb> <BreadcrumbList> <BreadcrumbItem> <BreadcrumbLink href="/docs">Docs</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbEllipsis /> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbLink href="/docs/components">Components</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbPage>Breadcrumb</BreadcrumbPage> </BreadcrumbItem> </BreadcrumbList> </Breadcrumb> )}Dropdown
Put the ellipsis in a dropdown to keep hidden levels within easy reach.
import { Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator,} from "@/components/ui/breadcrumb"import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger,} from "@/components/ui/dropdown-menu"export function Example() { return ( <Breadcrumb> <BreadcrumbList> <BreadcrumbItem> <BreadcrumbLink href="/docs">Docs</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <DropdownMenu> <DropdownMenuTrigger aria-label="Show hidden crumbs" className="flex size-5 items-center justify-center rounded-sm text-foreground/50 transition-colors duration-200 ease-out hover:bg-surface-hover hover:text-foreground" > <BreadcrumbEllipsis className="size-4" /> </DropdownMenuTrigger> <DropdownMenuContent align="start"> <DropdownMenuItem href="/docs/installation"> Installation </DropdownMenuItem> <DropdownMenuItem href="/docs/theming">Theming</DropdownMenuItem> <DropdownMenuItem href="/docs/installation">Installation</DropdownMenuItem> </DropdownMenuContent> </DropdownMenu> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbLink href="/docs/components">Components</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbPage>Breadcrumb</BreadcrumbPage> </BreadcrumbItem> </BreadcrumbList> </Breadcrumb> )}Icon
Place an icon or logo in any crumb, usually the first. Add aria-label when it has no visible text.
import { Logo } from "@/components/brand/logo"import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator,} from "@/components/ui/breadcrumb"export function Example() { return ( <Breadcrumb> <BreadcrumbList> <BreadcrumbItem> <BreadcrumbLink href="/" aria-label="Home"> <Logo className="h-3 w-auto" /> </BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbLink href="/docs/components">Components</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbPage>Breadcrumb</BreadcrumbPage> </BreadcrumbItem> </BreadcrumbList> </Breadcrumb> )}Link component
Set asChild on BreadcrumbLink and pass your router's Link component for client-side navigation.
import Link from "next/link"import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator,} from "@/components/ui/breadcrumb"export function Example() { return ( <Breadcrumb> <BreadcrumbList> <BreadcrumbItem> <BreadcrumbLink asChild> <Link href="#link-component">Docs</Link> </BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbLink asChild> <Link href="#link-component">Components</Link> </BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbPage>Breadcrumb</BreadcrumbPage> </BreadcrumbItem> </BreadcrumbList> </Breadcrumb> )}API Reference
Breadcrumb
| Prop | Type | Default |
|---|---|---|
| className | string | — |
<Breadcrumb> <BreadcrumbList> <BreadcrumbItem> <BreadcrumbLink href="/">Home</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbPage>Docs</BreadcrumbPage> </BreadcrumbItem> </BreadcrumbList></Breadcrumb>BreadcrumbList
| Prop | Type | Default |
|---|---|---|
| className | string | — |
<BreadcrumbList> <BreadcrumbItem>...</BreadcrumbItem></BreadcrumbList>BreadcrumbItem
| Prop | Type | Default |
|---|---|---|
| className | string | — |
<BreadcrumbItem> <BreadcrumbLink href="/">Home</BreadcrumbLink></BreadcrumbItem>BreadcrumbLink
| Prop | Type | Default |
|---|---|---|
| asChild | boolean | false |
| href | string | — |
| className | string | — |
<BreadcrumbLink href="/">Home</BreadcrumbLink>BreadcrumbPage
| Prop | Type | Default |
|---|---|---|
| className | string | — |
<BreadcrumbPage>Docs</BreadcrumbPage>BreadcrumbSeparator
| Prop | Type | Default |
|---|---|---|
| children | ReactNode | chevron |
| className | string | — |
<BreadcrumbSeparator />BreadcrumbEllipsis
| Prop | Type | Default |
|---|---|---|
| className | string | — |
<BreadcrumbEllipsis />