Redpanda UI
RC
Redpanda UI

Breadcrumb

Displays the path to the current resource using a hierarchy of links.

Made by shadcn
Loading component...

Installation

Usage

import {
  Breadcrumb,
  BreadcrumbHeader,
  BreadcrumbItem,
  BreadcrumbLink,
  BreadcrumbList,
  BreadcrumbPage,
  BreadcrumbSeparator,
} from "@/components/ui/breadcrumb"
<Breadcrumb>
  <BreadcrumbList>
    <BreadcrumbItem>
      <BreadcrumbLink href="/">Home</BreadcrumbLink>
    </BreadcrumbItem>
    <BreadcrumbSeparator />
    <BreadcrumbItem>
      <BreadcrumbLink href="/components">Components</BreadcrumbLink>
    </BreadcrumbItem>
    <BreadcrumbSeparator />
    <BreadcrumbItem>
      <BreadcrumbPage>Breadcrumb</BreadcrumbPage>
    </BreadcrumbItem>
  </BreadcrumbList>
</Breadcrumb>

When to use

Use Breadcrumb to help users understand their current location within a site hierarchy and navigate back to parent levels:

Use Breadcrumb when:

  • Site has 3 or more hierarchical levels
  • Users need to understand their current location
  • Content is organized in clear categories
  • Users frequently navigate between levels
  • Building e-commerce or documentation sites

Don't use Breadcrumb when:

  • Site has flat structure (1-2 levels)
  • Navigation path is not hierarchical
  • Current page is the home/landing page
  • Users rarely need to backtrack
  • Primary navigation is sufficient

Anatomy

The Breadcrumb component creates a horizontal navigation trail with clear hierarchy:

Breadcrumb Container
┌─────────────────────────────────────────────────────────────┐
│ BreadcrumbList (nav element)                                │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ BreadcrumbItem → BreadcrumbSeparator → BreadcrumbItem   │ │
│ │ ┌─────────────┐   ┌───────────────┐   ┌───────────────┐ │ │
│ │ │BreadcrumbLink│   │ ChevronRight  │   │BreadcrumbPage │ │ │
│ │ │  (clickable) │   │  (separator)  │   │ (current page)│ │ │
│ │ └─────────────┘   └───────────────┘   └───────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘

Advanced Patterns:
- BreadcrumbEllipsis for collapsed long paths
- DropdownMenu integration for category navigation
- Responsive with Drawer on mobile

Component Hierarchy:

  1. Breadcrumb (Root): Main navigation wrapper with semantic meaning
  2. BreadcrumbHeader: Optional header wrapper for layout and spacing
  3. BreadcrumbList: Ordered list container for screen readers
  4. BreadcrumbItem: Individual breadcrumb step wrapper
  5. BreadcrumbLink: Clickable navigation link (for parent pages)
  6. BreadcrumbPage: Current page indicator (non-clickable)
  7. BreadcrumbSeparator: Visual divider between items
  8. BreadcrumbEllipsis: Collapsed state for long breadcrumbs

Key Features:

  • Semantic HTML: Uses <nav> and <ol> for accessibility
  • Keyboard Navigation: Full keyboard support for links
  • Screen Reader Support: Proper ARIA labels and structure
  • Customizable Separators: Icons or custom components
  • Responsive: Collapsible with ellipsis and dropdowns
  • Framework Integration: Works with Next.js Link and other routers

Examples

Custom separator

Use a custom component as children for <BreadcrumbSeparator /> to create a custom separator.

Loading component...
import { Slash } from "lucide-react"

...

<Breadcrumb>
  <BreadcrumbList>
    <BreadcrumbItem>
      <BreadcrumbLink href="/">Home</BreadcrumbLink>
    </BreadcrumbItem>
    <BreadcrumbSeparator>
      <Slash />
    </BreadcrumbSeparator>
    <BreadcrumbItem>
      <BreadcrumbLink href="/components">Components</BreadcrumbLink>
    </BreadcrumbItem>
  </BreadcrumbList>
</Breadcrumb>

You can compose <BreadcrumbItem /> with a <DropdownMenu /> to create a dropdown in the breadcrumb.

Loading component...
import {
  DropdownMenu,
  DropdownMenuContent,
  DropdownMenuItem,
  DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu"

...

<BreadcrumbItem>
  <DropdownMenu>
    <DropdownMenuTrigger className="flex items-center gap-1">
      Components
      <ChevronDownIcon />
    </DropdownMenuTrigger>
    <DropdownMenuContent align="start">
      <DropdownMenuItem>Documentation</DropdownMenuItem>
      <DropdownMenuItem>Themes</DropdownMenuItem>
      <DropdownMenuItem>GitHub</DropdownMenuItem>
    </DropdownMenuContent>
  </DropdownMenu>
</BreadcrumbItem>

Collapsed

We provide a <BreadcrumbEllipsis /> component to show a collapsed state when the breadcrumb is too long.

Loading component...
import { BreadcrumbEllipsis } from "@/components/ui/breadcrumb"

...

<Breadcrumb>
  <BreadcrumbList>
    {/* ... */}
    <BreadcrumbItem>
      <BreadcrumbEllipsis />
    </BreadcrumbItem>
    {/* ... */}
  </BreadcrumbList>
</Breadcrumb>

To use a custom link component from your routing library, you can use the asChild prop on <BreadcrumbLink />.

Loading component...
import { Link } from "next/link"

...

<Breadcrumb>
  <BreadcrumbList>
    <BreadcrumbItem>
      <BreadcrumbLink asChild>
        <Link href="/">Home</Link>
      </BreadcrumbLink>
    </BreadcrumbItem>
    {/* ... */}
  </BreadcrumbList>
</Breadcrumb>

Card component

You can wrap the breadcrumbs in a Card component to make them stand out more.

Loading component...
<Card className="py-2">
  <CardContent>
    <Breadcrumb>
      <BreadcrumbList>
        <BreadcrumbItem>
          <BreadcrumbLink href="/">
            <Home className="size-4" />
          </BreadcrumbLink>
        </BreadcrumbItem>
        <BreadcrumbSeparator />
        <BreadcrumbItem>
          <BreadcrumbLink href="/">Components</BreadcrumbLink>
        </BreadcrumbItem>
        <BreadcrumbSeparator />
        <BreadcrumbItem>
          <BreadcrumbPage>Breadcrumb</BreadcrumbPage>
        </BreadcrumbItem>
      </BreadcrumbList>
    </Breadcrumb>
  </CardContent>
</Card>

Responsive

Here's an example of a responsive breadcrumb that composes <BreadcrumbItem /> with <BreadcrumbEllipsis />, <DropdownMenu />, and <Drawer />.

It displays a dropdown on desktop and a drawer on mobile.

Loading component...

Header wrapper

Use the <BreadcrumbHeader /> component to wrap your breadcrumb in a header with consistent layout and spacing. This is particularly useful when integrating breadcrumbs into layouts with collapsible sidebars.

import { BreadcrumbHeader } from "@/components/ui/breadcrumb"

...

<BreadcrumbHeader>
  <Breadcrumb>
    <BreadcrumbList>
      <BreadcrumbItem>
        <BreadcrumbLink href="/">Home</BreadcrumbLink>
      </BreadcrumbItem>
      <BreadcrumbSeparator />
      <BreadcrumbItem>
        <BreadcrumbLink href="/components">Components</BreadcrumbLink>
      </BreadcrumbItem>
      <BreadcrumbSeparator />
      <BreadcrumbItem>
        <BreadcrumbPage>Breadcrumb</BreadcrumbPage>
      </BreadcrumbItem>
    </BreadcrumbList>
  </Breadcrumb>
</BreadcrumbHeader>

The header wrapper provides:

  • Fixed height (64px) with responsive behavior for collapsible sidebars (48px)
  • Flexbox layout with consistent gap spacing
  • Smooth width and height transitions

Credits

  • We use Radix UI for the slot component.
  • We take our inspiration from Shadcn UI for the breadcrumb style.

Built by malinskibeniamin. The source code is available on GitHub.

On this page