watson/breadcrumbs
Lightweight Laravel package for defining and rendering breadcrumb trails. Add breadcrumbs in PHP, attach them to routes, and output accessible HTML with Blade. Supports current-page detection, custom templates, nested trails, and simple configuration for Laravel applications.
BreadcrumbList structured data, which influences how URLs appear in search results. If organic search or internal-link equity is on the roadmap, standardized breadcrumbs are a prerequisite — though note this package only renders the visible trail; the JSON-LD block is your work.Breadcrumbs::register()), a parent/child builder (parent(), push()), and a Blade render. A mid-level engineer reproduces this in an afternoon. The decision is really "adopt a small dependency" versus "own 150 lines of code," and the argument for adoption is convention and speed, not capability.nav, aria-label, aria-current), and truncation rules — provided you override the default view, which ships Bootstrap-flavored and will not match most design systems.spatie/laravel-sitemap if that's in scope.Adopt when all of these hold:
Look elsewhere — or build in-house — when:
diglactic/laravel-breadcrumbs (the widely used continuation of Dave James Miller's package) is the safer default and covers the same API shape; migration cost later is non-trivial only if you've spread registrations widely.Risk posture: pin the version, fork it into your org, and assign an owner. Treat it as internal code with a recognizable origin.
To executives: A small, MIT-licensed Laravel utility that gets consistent breadcrumb navigation live in days instead of a sprint, improving wayfinding on deep pages and enabling search-result breadcrumb display that lifts click-through on category and documentation URLs. Cost is negligible; the risk is also low because it is small enough to own outright — we fork it, we own it, no vendor lock-in. Frame it as a two-day enabler for the information-architecture and SEO work already on the roadmap, not as a strategic platform bet.
To engineering: It's a thin registry — register a named trail per route, compose with parent(), render from Blade, override the view to match our design system. Roughly a day of integration plus a test asserting every public route has a registered trail, which is where the real long-term value sits. Be explicit with them: zero dependents and a single maintainer mean we should vendor the source and not rely on upstream for fixes. If the team prefers to minimize dependencies, the honest counter-proposal is to write the same ~150 lines internally; this package wins only on convention and time-to-first-trail, and it loses to the more established fork on maintenance confidence. Let the team make that call, but don't let the decision drift into "we'll add breadcrumbs later" — the accessibility and SEO debt compounds with every new template.
How can I help you explore Laravel packages today?