What it is
Breadcrumb renders one styled link — small, bold, all-caps, in the brand color — from a
page to its parent. It ships as part of the page-frame templates
(templates/Page/Breadcrumb.tsx), alongside Title, Status, and the rest of the header’s
Left slot, and it is exported from the package root like any of them.
Live example
No Storybook story exists forBreadcrumb — verified against the live Storybook index. It has
no .stories.js file in its own directory, and no other component’s story renders it either.
Exports
Props, from
BreadcrumbProps in source:
Vocabulary
Say “the breadcrumb link”, not “the breadcrumbs”. Plural implies a chain, and this component
never renders more than one link at a time.
Choose Breadcrumb when
- The page has one real parent — a list it belongs to, a section it lives under — and naming that parent in a short link helps a reader get back to it.
- One level of ancestry is enough. The destination is the immediate parent, not a full path back to the root.
Choose something else when
Anatomy
Variants, sizes, and states
There are none.Breadcrumb takes no size, color, or variant prop — confirmed directly
from BreadcrumbProps, which declares only to, children, and includeBrowserRouter. Every
instance renders identically: small, bold, all-caps text in theme.palette.primary.main, with
textDecoration: none applied unconditionally — including on hover, since no hover rule exists
in the component’s styles at all.
Edge and failure states
Tokens
Verified directly fromBreadcrumb.tsx — no per-component token emitter exists yet for this
concept, so this table is hand-confirmed rather than generated.
Composition
It belongs in the header’sLeft slot, above Title. Views overview
documents the region: at most one Breadcrumb, omitted at the top level of a section, sitting
above the page’s title. This page does not repeat that region-level guidance — see it there.
Content
- Name the parent, not the action. “Campaigns”, not “Back to campaigns” — the link text names the destination, the way a breadcrumb does in a file path.
- Keep it to one or two words. The component’s fixed all-caps small type does not have headroom for a long label before it starts competing with the title beneath it.
Accessibility
- Renders a real
<a>throughreact-router-dom’sLink— confirmed by the component’s own test, which assertsgetByRole("link", ...)finds it with the correcthref. - No
navlandmark and noaria-label="breadcrumb"exist anywhere in source. For a single link this costs little — a screen reader announces it as a link like any other — but it means there is no landmark to inherit if a trail is ever built on top of this component. - Link text should make sense heard in isolation, same as any link — see Link for the general rule.
Constraints
Known issues
Breadcrumb: open issues
Divergences, open decisions, and undocumented gaps for Breadcrumb.
Why it works this way
It is chrome for one relationship, not a navigation system. A page’s ancestry is part of its identity — the same reasoning that putsTitle in the header rather than the body — so a single
link naming the parent lives beside the title rather than as a standalone navigation component.
The cost of that minimalism is that anything beyond one level has no answer yet, which is why the
warning at the top of this page exists rather than a worked multi-level example.
Status
Hand-confirmed — no per-component status emitter exists yet for this concept.Related
No utilization data is tracked forBreadcrumb on its own — it is not its own entry in the
concept map, so its adoption is folded into Views overview’s
count rather than reported separately.
- Views overview — the region this fills, and the rest of the header’s
Leftslot - Link — the system’s general-purpose styled hyperlink
- TopNav · SideNav — for moving to a different subject rather than back to a parent