Skip to content
UI

Breadcrumb

Shows where the current page sits in the hierarchy and links back to its parents.

@zenoxai/ui/components/breadcrumb Markdown
<Breadcrumb>
  <BreadcrumbList>
    <BreadcrumbItem>
      <BreadcrumbLink href="#">Assets</BreadcrumbLink>
    </BreadcrumbItem>
    <BreadcrumbSeparator />
    <BreadcrumbItem>
      <BreadcrumbLink href="#">Domains</BreadcrumbLink>
    </BreadcrumbItem>
    <BreadcrumbSeparator />
    <BreadcrumbItem>
      <BreadcrumbPage>acme.com</BreadcrumbPage>
    </BreadcrumbItem>
  </BreadcrumbList>
</Breadcrumb>

Usage

import {
  Breadcrumb,
  BreadcrumbItem,
  BreadcrumbLink,
  BreadcrumbList,
  BreadcrumbPage,
  BreadcrumbSeparator,
} from "@zenoxai/ui/components/breadcrumb"
<Breadcrumb>
  <BreadcrumbList>
    <BreadcrumbItem>
      <BreadcrumbLink href="/assets">Assets</BreadcrumbLink>
    </BreadcrumbItem>
    <BreadcrumbSeparator />
    <BreadcrumbItem>
      <BreadcrumbPage>acme.com</BreadcrumbPage>
    </BreadcrumbItem>
  </BreadcrumbList>
</Breadcrumb>

Use a breadcrumb on detail pages two or more levels deep: an asset, an alert, a report. Every level except the last is a BreadcrumbLink; the last is a BreadcrumbPage, which is not a link. Put a BreadcrumbSeparator between items, not inside them.

BreadcrumbLink renders an <a>. To navigate with your router, render its link component through render; the breadcrumb keeps its styles:

<BreadcrumbLink render={<Link to="/alerts" />}>Alerts</BreadcrumbLink>

Do not use a breadcrumb for the steps of a flow. A page one level below the shell navigation needs no breadcrumb: the Sidebar already shows where the user is.

Examples

Collapsed

On deep paths, replace the middle levels with BreadcrumbEllipsis. Keep the first level and the last two.

<Breadcrumb>
  <BreadcrumbList>
    <BreadcrumbItem>
      <BreadcrumbLink href="#">Acme Corp</BreadcrumbLink>
    </BreadcrumbItem>
    <BreadcrumbSeparator />
    <BreadcrumbItem>
      <BreadcrumbEllipsis />
    </BreadcrumbItem>
    <BreadcrumbSeparator />
    <BreadcrumbItem>
      <BreadcrumbLink href="#">Vulnerabilities</BreadcrumbLink>
    </BreadcrumbItem>
    <BreadcrumbSeparator />
    <BreadcrumbItem>
      <BreadcrumbPage>CVE-2024-3400</BreadcrumbPage>
    </BreadcrumbItem>
  </BreadcrumbList>
</Breadcrumb>

Custom separator

BreadcrumbSeparator renders a chevron by default. Pass an icon as children to replace it.

<Breadcrumb>
  <BreadcrumbList>
    <BreadcrumbItem>
      <BreadcrumbLink href="#">Reports</BreadcrumbLink>
    </BreadcrumbItem>
    <BreadcrumbSeparator>
      <SlashIcon />
    </BreadcrumbSeparator>
    <BreadcrumbItem>
      <BreadcrumbPage>Monthly exposure, October 2026</BreadcrumbPage>
    </BreadcrumbItem>
  </BreadcrumbList>
</Breadcrumb>

Accessibility

  • Breadcrumb is a <nav aria-label="breadcrumb"> around an ordered list. Pass a translated aria-label when the interface is not in English.
  • BreadcrumbPage carries aria-current="page". Separators and the ellipsis are hidden from screen readers.
  • The ellipsis is decorative. If the hidden levels must stay reachable, put them in a Dropdown Menu whose trigger is a real button with an aria-label.

API reference

Generated from the TypeScript source. className, style and children are accepted everywhere and omitted below.

Breadcrumb

Breadcrumb shows where the current page sits in the hierarchy, as a trail of links back to its ancestors. Compose BreadcrumbList with a BreadcrumbItem per level: a BreadcrumbLink for each ancestor, a BreadcrumbSeparator between levels and a BreadcrumbPage for the current page.

No props of its own. Accepts the props of the element it renders.

BreadcrumbList

No props of its own. Accepts the props of the element it renders.

BreadcrumbItem

No props of its own. Accepts the props of the element it renders.

BreadcrumbLink is the link to an ancestor page; pass `render` to use the router's link component.

PropTypeDefault
renderReactElement<unknown, string | JSXElementConstructor<any>> | ComponentRenderFn<HTMLProps, {}>

Allows you to replace the component's HTML element with a different tag, or compose it with another component.

-

BreadcrumbPage

BreadcrumbPage is the current page, the last level: text marked aria-current="page", not a link.

No props of its own. Accepts the props of the element it renders.

BreadcrumbSeparator

BreadcrumbSeparator is the chevron between two levels, hidden from screen readers; pass children to replace the icon.

No props of its own. Accepts the props of the element it renders.

BreadcrumbEllipsis

BreadcrumbEllipsis stands in for collapsed middle levels. It is hidden from screen readers, so when it opens a menu of those levels, wrap it in a button with an aria-label.

PropTypeDefault
labelstring

Already-translated text read by screen readers in place of the dots.

More