Breadcrumb

A navigation trail from the root to the current page.

Show where the current page sits in the site. Add separators between levels and collapse the middle when the path gets long.

tsx
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 breadcrumb

Usage

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
        └── BreadcrumbPage

BreadcrumbList 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.

tsx
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.

tsx
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.

tsx
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>  )}

Put the ellipsis in a dropdown to keep hidden levels within easy reach.

tsx
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.

tsx
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>  )}

Set asChild on BreadcrumbLink and pass your router's Link component for client-side navigation.

tsx
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

PropTypeDefault
classNamestring
<Breadcrumb>  <BreadcrumbList>    <BreadcrumbItem>      <BreadcrumbLink href="/">Home</BreadcrumbLink>    </BreadcrumbItem>    <BreadcrumbSeparator />    <BreadcrumbItem>      <BreadcrumbPage>Docs</BreadcrumbPage>    </BreadcrumbItem>  </BreadcrumbList></Breadcrumb>
PropTypeDefault
classNamestring
<BreadcrumbList>  <BreadcrumbItem>...</BreadcrumbItem></BreadcrumbList>
PropTypeDefault
classNamestring
<BreadcrumbItem>  <BreadcrumbLink href="/">Home</BreadcrumbLink></BreadcrumbItem>
PropTypeDefault
asChildbooleanfalse
hrefstring
classNamestring
<BreadcrumbLink href="/">Home</BreadcrumbLink>
PropTypeDefault
classNamestring
<BreadcrumbPage>Docs</BreadcrumbPage>
PropTypeDefault
childrenReactNodechevron
classNamestring
<BreadcrumbSeparator />
PropTypeDefault
classNamestring
<BreadcrumbEllipsis />