A navigation trail. Every item but the last renders as a link; the last is always plain text
marked aria-current="page", regardless of whether it was given an href — the current page
shouldn't link to itself. Server-renderable: no hooks, since a breadcrumb trail is derived from the
current route, not interactive state.
tsx
<Breadcrumbs />Examples
items takes plain data — omit href on the last entry, or leave it in; either way it renders as
the current page:
tsx
<Breadcrumbs
items={[
{ label: "Home", href: "/" },
{ label: "Components", href: "/components" },
{ label: "Breadcrumbs" },
]}
/>as takes your router's own link component, the same convention Card/Button use for href —
applied to every non-current item at once, since a trail's links all go through the same router:
tsx
import Link from "next/link";
<Breadcrumbs as={Link} items={items} />;separator swaps the icon between items — anything from the Icon
catalog works:
tsx
<Breadcrumbs
separator="arrow-right"
items={[{ label: "Home", href: "/" }, { label: "Settings" }]}
/>Props
| Prop | Type | Default | Description |
|---|---|---|---|
| as | readonly | — | Your router's own link component, e.g. Next's `Link` — passed through to every non-current item, the same `as` convention `Card`/`Button` use for `href`. |
| className | text | — | — |
| items * | readonly | — | — |
| separator | warning | chevron-down | chevron-up | chevron-left | chevron-right | close | check | plus | minus | search | arrow-right | arrow-left | menu | info | circle | eye | eye-off | trash | edit | copy | download | upload | external-link | star | calendar | clock | user | settings | filter | more-horizontal | refresh | lock | maximize | minimize | chevron-right | — |