Breadcrumb
Shows where the current page sits in the site's hierarchy and links to each level above it. It is a map of the structure, not a record of where people have been.
Installation
Set up Camaleo once (Installation), then import what you need. It has no state and no effects, so it renders on the server too; BreadcrumbLink takes a render prop for your router's link.
import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator, BreadcrumbEllipsis } from "@camaleo/react";Anatomy
A nav landmark around an ordered list. Each level is an item; separators are items of their own, hidden from screen readers, and the last item is the current page.
Examples
Every example is a real file you can copy. They all wear the skin, mode and brand from the bar above.
Running shoes
148 productsFree shipping over $80
Category path
Mirror the catalog tree, so someone who landed on a category from a search can go up a level and browse its neighbors.
Permissions
Settings path
Deep settings screens are easy to get lost in. The trail ends with the page's own heading, which repeats it as the title.
Budget.xlsx
Edited on 03/14/2026 by Ana RibeiroCollapsed middle levels
Press the … button. Keep the first level and the last two in view and put the rest in a Menu opened by a BreadcrumbEllipsis; its name says how many levels it hides.
Office lease 2026.pdf
Signed on 02/01/2026 · 12 pagesWith icons
A house alone means nothing to a screen reader. Give an icon-only link a name with VisuallyHidden, and mark every icon aria-hidden.
Annual brand guidelines refresh and asset migration
Long labels
Clip a long name on screen with an ellipsis, never in the text: screen readers still read the whole name, and the heading below shows it in full.
checkout.tsx
128 lines · last commit 2 days agoSlash separators
Every separator holds a chevron and a slash. Set --cml-crumb-chevron: none and --cml-crumb-slash: inline for file paths, where the slash is the convention.
With the Next.js link
render={<NextLink href="…" />} keeps client-side navigation and prefetching, and the link keeps its slot, its style and its focus ring.
On a phone
The list wraps to a second line instead of scrolling sideways. When it would take three lines, collapse the middle levels.
In context
These are whole pieces of UI you can copy, in the skin you picked.
Pegasus 41 Road Running Shoe
$139.99or 4 payments of $35.00| Name | Size |
|---|---|
| Q4 planning | — |
| Budget 2026.xlsxShared | 248 KB |
| Board memo 03-14.docx | 36 KB |
Invoice details
Invoices go out on the 1st of every month.
Guidelines
The same order is always under Orders, however people got to it.
That is what the Back button is for. A trail that changes with every visit can't teach the structure.
Refunds
BreadcrumbPage says "you are here" with aria-current="page" and isn't a link to itself.
Refunds
It looks like somewhere else to go, and following it only reloads the same page.
Props
BreadcrumbItem, BreadcrumbPage and BreadcrumbSeparator take the props of their li, span and li. BreadcrumbLink takes the props of an a, plus render to use your router's link instead. BreadcrumbEllipsis stands for collapsed levels: alone it is an image named "More pages"; with render={<button type="button" />}, as a menu's trigger, it is a button. Pass aria-label to say how many levels it hides.
Styling hooks
Restyle it without forking: target the slots, or set the tokens on a parent, a skin or the breadcrumb itself.
Attributes
Tokens it reads
Color
Shape & size
Type & motion
This component only
/* slashes instead of chevrons in the file browser */
.files [data-slot="breadcrumb"] {
--cml-crumb-chevron: none;
--cml-crumb-slash: inline;
}Accessibility
- It is a nav landmark named "Breadcrumb". Translate the name with aria-label; screen readers list it among the page's landmarks.
- The levels are an ordered list, so screen readers say how many there are. The current page has aria-current="page" and is plain text.
- Separators are aria-hidden: screen readers read the names one after the other, without "slash" or "greater than" in between.
- A plain BreadcrumbEllipsis is an image named "More pages" (from the messages); as a menu trigger it is a button with the same name, which aria-label can replace.
- Links are at least 24px tall (WCAG 2.5.8). An icon-only link needs a text name, for example with VisuallyHidden.