suiss/ui
  • Docs
  • Components
  • Patterns
  • Interactions
  • Charts
  • Blocks
GitHubGet started
DocsComponentsPatternsInteractionsChartsBlocks
Components82
  • Overview
  • Accordion
  • Alert
  • Alert Dialog
  • Alert Sheet
  • Amount Input
  • Aspect Ratio
  • Attachment
  • Avatar
  • Badge
  • Bottom Bar
  • Breadcrumb
  • Bubble
  • Button
  • Button Group
  • Calendar
  • Card
  • Carousel
  • Chart
  • Checkbox
  • Chip
  • Collapsible
  • Combobox
  • Command
  • Context Menu
  • Dialog
  • Direction
  • Drawer
  • Dropdown Menu
  • Empty
  • FAB
  • Field
  • Fullscreen Menu
  • Haptics
  • Header
  • Hover Card
  • Icon
  • Input
  • Input Accessory Bar
  • Input Group
  • Input OTP
  • Item
  • Kbd
  • Keyboard Scroll View
  • Keypad
  • Label
  • Marker
  • Menubar
  • Message
  • Message Scroller
  • Native Select
  • Navigation Menu
  • Page Indicator
  • Pagination
  • Pin Pad
  • Popover
  • Progress
  • QR Scanner
  • Questionnaire
  • Radio Group
  • Resizable
  • Screen
  • Scroll Area
  • Select
  • Separator
  • Sheet
  • Sidebar
  • Signature Pad
  • Skeleton
  • Slider
  • Spinner
  • Switch
  • Tab Bar
  • Table
  • Tabs
  • Text
  • Textarea
  • Toast
  • Toggle
  • Toggle Group
  • Tooltip
  • Wheel Picker
  • Widget

suiss/ui · Component

Breadcrumb

A trail of links that shows where the current page sits in the site hierarchy.

Breadcrumb is an open-source component from suiss/ui for React. The @esuiss/ui CLI copies its source into your project, so you own the code.

A Breadcrumb is a labelled nav that contains a BreadcrumbList. The list holds BreadcrumbItem parts separated by BreadcrumbSeparator parts. Each item contains either a BreadcrumbLink to an ancestor page or, for the last item, a BreadcrumbPage for the current page. Use BreadcrumbEllipsis inside an item to stand in for collapsed levels.

Use breadcrumbs in deep hierarchies so people can see their location and move up quickly. For top-level navigation between sections, use a navigation menu or tabs.

Installation

CLI

$ pnpm dlx shadcn@latest add @esuiss/breadcrumb

Works in any project with a components.json. See Installation for the one-line registry setup. Or use the suiss/ui CLI:

$ pnpm dlx @esuiss/ui@latest add breadcrumb

Manual

  1. Install the dependencies and add the cn helper:
$ pnpm add @base-ui/react @phosphor-icons/react
  1. Copy the source into components/ui/breadcrumb.tsx:
  1. Update the import paths to match your project.

Usage

import { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator, BreadcrumbEllipsis } 
<Breadcrumb













Place a BreadcrumbSeparator between items as its own sibling, not inside a BreadcrumbItem. It renders a caret by default; pass children to use a different separator.

BreadcrumbLink renders an a by default and can render your router's link component instead.

Use the render prop to render your router's link component: render={<Link href="/" />}.

Set asChild on BreadcrumbLink and pass your router's link component as the child.

Pass a render function to BreadcrumbLink that returns your router's link component with the props it receives.

For an icon-only link, such as a home icon, add an aria-label.

Examples

With home icon

Replaces the first link with a home icon and an aria-label.

With ellipsis

Collapses middle levels with BreadcrumbEllipsis.

Custom separator

Uses a slash instead of the default caret separator.

API Reference

Anatomy7 parts
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink />
<BreadcrumbPage />
<BreadcrumbEllipsis />
</BreadcrumbItem>
<
01

Breadcrumb

The nav landmark that wraps the trail.

Also accepts the props of React.ComponentProps<"nav">.

02

BreadcrumbList

The ordered list of items.

Also accepts the props of React.ComponentProps<"ol">.

03

BreadcrumbItem

A single step in the trail.

Also accepts the props of React.ComponentProps<"li">.

04

BreadcrumbLink

A link to an ancestor page.

Also accepts the props of useRender.ComponentProps<"a">.

05

BreadcrumbPage

The current page, rendered as plain text.

Also accepts the props of React.ComponentProps<"span">.

06

BreadcrumbSeparator

A decorative divider between items.

Also accepts the props of React.ComponentProps<"li">.

07

BreadcrumbEllipsis

A placeholder for collapsed levels, with a screen-reader label.

Also accepts the props of React.ComponentProps<"span">.

Accessibility

  • Breadcrumb renders a nav with aria-label="breadcrumb".
  • BreadcrumbPage sets aria-current="page".
  • Separators have role="presentation" and aria-hidden="true", so only items are announced as list items.
  • BreadcrumbEllipsis hides its icon and includes visually hidden text, More by default; pass children to change it.
  • Only links are in the tab order; the ellipsis and current page are skipped.

Notes

  • Styling hooks: data-slot values from breadcrumb through breadcrumb-ellipsis.
  • The default caret separator flips in right-to-left layouts.
  • Ancestor links use text-muted-foreground and the current page uses text-foreground.
NextBubblePreviousBottom Bar

On this page

  1. 01Installation
    • CLI
    • Manual
  2. 02Usage
  3. 03Examples
    • With home icon
    • With ellipsis
    • Custom separator
  4. 04API Reference
    • Breadcrumb
    • BreadcrumbList
    • BreadcrumbItem
    • BreadcrumbLink
    • BreadcrumbPage
    • BreadcrumbSeparator
    • BreadcrumbEllipsis
  5. 05Accessibility
  6. 06Notes
from
"@/components/ui/breadcrumb"
>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink href="#">Home</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbLink href="#">Projects</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbPage>Website redesign</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
BreadcrumbSeparator
/>
</BreadcrumbList>
</Breadcrumb>
import {
  Breadcrumb,
  BreadcrumbItem,
  BreadcrumbLink,
  BreadcrumbList,
  BreadcrumbPage,
  BreadcrumbSeparator,
} from "@/components/ui/breadcrumb"

export default function BreadcrumbDemo() {
  return (
    <Breadcrumb>
      <BreadcrumbList>
        <BreadcrumbItem>
          <BreadcrumbLink href="#">Home</BreadcrumbLink>
        </BreadcrumbItem>
        <BreadcrumbSeparator />
        <BreadcrumbItem>
          <BreadcrumbLink href="#">Projects</BreadcrumbLink>
        </BreadcrumbItem>
        <BreadcrumbSeparator />
        <BreadcrumbItem>
          <BreadcrumbPage>Website redesign</BreadcrumbPage>
        </BreadcrumbItem>
      </BreadcrumbList>
    </Breadcrumb>
  )
}
components/ui/breadcrumb.tsx
"use client"

import { mergeProps } from "@base-ui/react/merge-props"
import { useRender } from "@base-ui/react/use-render"
import { CaretRightIcon, DotsThreeIcon } from "@phosphor-icons/react"
import type * as React from "react"
import { cn } from "@/lib/utils"

function Breadcrumb({ className, ...props }: React.ComponentProps<"nav">) {
  return (
    <nav
      aria-label="breadcrumb"
      data-slot="breadcrumb"
      className={className}
      {...props}
    />
import { HouseIcon } from "@phosphor-icons/react"
import {
  Breadcrumb,
  BreadcrumbItem,
  BreadcrumbLink,
  BreadcrumbList,
  BreadcrumbPage,
  BreadcrumbSeparator,
} from "@/components/ui/breadcrumb"

export default function BreadcrumbWithHomeIcon() {
  return (
    <Breadcrumb>
      <BreadcrumbList>
        <BreadcrumbItem>
          <BreadcrumbLink
            href="#"
            aria-label="Home"
            className="text-foreground"
          >
            <HouseIcon />
          </BreadcrumbLink>
        </BreadcrumbItem>
        <BreadcrumbSeparator />
        <BreadcrumbItem>
          <BreadcrumbLink href="#">Menu</BreadcrumbLink>
        </BreadcrumbItem>
        <BreadcrumbSeparator />
        <BreadcrumbItem>
          <BreadcrumbLink href="#">Main Courses</BreadcrumbLink>
        </BreadcrumbItem>
        <BreadcrumbSeparator />
        <BreadcrumbItem>
          <BreadcrumbPage>Grilled Meatballs</BreadcrumbPage>
        </BreadcrumbItem>
      </BreadcrumbList>
    </Breadcrumb>
  )
}
import {
  Breadcrumb,
  BreadcrumbItem,
  BreadcrumbLink,
  BreadcrumbList,
  BreadcrumbPage,
  BreadcrumbSeparator,
} from "@/components/ui/breadcrumb"

export default function BreadcrumbCustomSeparator() {
  return (
    <Breadcrumb>
      <BreadcrumbList>
        <BreadcrumbItem>
          <BreadcrumbLink href="#">Docs</BreadcrumbLink>
        </BreadcrumbItem>
        <BreadcrumbSeparator>
          <span>/</span>
        </BreadcrumbSeparator>
        <BreadcrumbItem>
          <BreadcrumbLink href="#">Components</BreadcrumbLink>
        </BreadcrumbItem>
        <BreadcrumbSeparator>
          <span>/</span>
        </BreadcrumbSeparator>
        <BreadcrumbItem>
          <BreadcrumbPage>Breadcrumb</BreadcrumbPage>
        </BreadcrumbItem>
      </BreadcrumbList>
    </Breadcrumb>
  )
}
import {
  Breadcrumb,
  BreadcrumbEllipsis,
  BreadcrumbItem,
  BreadcrumbLink,
  BreadcrumbList,
  BreadcrumbPage,
  BreadcrumbSeparator,
} from "@/components/ui/breadcrumb"

export default function BreadcrumbWithEllipsis() {
  return (
    <Breadcrumb>
      <BreadcrumbList>
        <BreadcrumbItem>
          <BreadcrumbLink href="#">Home</BreadcrumbLink>
        </BreadcrumbItem>
        <BreadcrumbSeparator />
        <BreadcrumbItem>
          <BreadcrumbEllipsis />
        </BreadcrumbItem>
        <BreadcrumbSeparator />
        <BreadcrumbItem>
          <BreadcrumbLink href="#">Settings</BreadcrumbLink>
        </BreadcrumbItem>
        <BreadcrumbSeparator />
        <BreadcrumbItem>
          <BreadcrumbPage>Notifications</BreadcrumbPage>
        </BreadcrumbItem>
      </BreadcrumbList>
    </Breadcrumb>
  )
}