Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Sf Breadcrumbs Laravel Package

libriciel/sf-breadcrumbs

libriciel/sf-breadcrumbs is a lightweight breadcrumb package for PHP applications, offering a simple API to define, manage, and render navigational trails with minimal configuration. It helps keep page hierarchy clear and site navigation consistent across views.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit: mismatched framework, trivial domain. The package is a Symfony bundle (sf-breadcrumbs), not a Laravel package. It assumes Symfony's bundle registration in Kernel::registerBundles(), its DI container and compiler passes, Twig extensions, Symfony Routing with RequestStack, and the Symfony event dispatcher. Laravel has no bundle concept. It uses Blade, a different router with named routes and route-model binding, a different container, and a different middleware ordering. There is no supported boot path. Any "integration" would be a rewrite of the package's internals, at which point the dependency has evaporated.

Compounding this, breadcrumbs are a small, closed problem: resolve an ordered list of {label, url} items from the current route or a definition tree, render <nav aria-label="Breadcrumb"><ol>…</ol></nav> with aria-current="page" on the terminal item, optionally emit JSON-LD BreadcrumbList. That is a few hundred lines of first-party code with a dozen tests. Low domain weight matters here because it is the denominator in the risk calculus — a third-party dependency buys almost nothing while importing every cost below.

Integration feasibility: low, gated on legal. Blockers in priority order:

  1. License is the dominant risk, not a footnote. AGPL-3.0 §13's network-use clause is the sharpest copyleft in common circulation. If we modify the code and expose the resulting service over a network — which is precisely what a SaaS does — we may be obliged to offer Corresponding Source of the modified work to users. Whether our application is a combined work or an aggregate is a fact-specific legal question we are not equipped to answer internally. This needs counsel sign-off before any engineering spike. There is no permissive dual-license signal in the repo metadata.
  2. Zero evidence of external consumption. 0 stars, 0 dependents, composite score 0.3. That is not "early" — it reads as an internal Libriciel publication, a compliance artifact, or a subtree split of a private monorepo. We would be the first external consumer of record: no community patch flow, no issue-tracker corpus, no third-party security review, no signal that breaking changes will be versioned for anyone but the author.
  3. Unknown code surface. Before a decision we need LOC, test coverage, CI status, last-commit recency, PHP/Symfony version constraints, and the transitive dependency tree. Libriciel bundles commonly depend on sibling Libriciel packages, which would multiply the audit surface.
  4. The composer require false positive. Laravel does pull individual symfony/* components, so a naive install may resolve cleanly. A Symfony bundle will still never boot under Laravel's kernel. Successful installation is not successful integration, and a passing composer why check must not be read as a green light.

Key questions for the requester and for counsel:

  • What requirement does this satisfy that diglactic/laravel-breadcrumbs or tabuna/breadcrumbs does not? If none, the evaluation ends here.
  • Is AGPL intentional and non-negotiable, or an artifact of publishing from a GPL-adjacent public-sector org? Is a commercial exception obtainable from Libriciel?
  • Is this a maintained product or an archival publication? What is the commit cadence over the last twelve months?
  • Are we permitted to fork, and would a fork trigger publication obligations?
  • What is the deployment model — pure SaaS, on-prem customer install, or internal tool? This single answer swings the license analysis more than anything else on this page.

Recommendation: do not adopt as a dependency. Leverage it as a reference implementation — read it for the resolver contract and edge cases, then build first-party. Build cost is days; the cost of an AGPL contamination finding or an abandoned single-vendor dependency is orders of magnitude higher.

Integration Approach

Stack fit: no viable direct path. The impedance mismatches are concrete and each requires a translation layer: Symfony bundle manifest vs. Laravel ServiceProvider; Twig templates and extensions vs. Blade components and directives; Symfony RouterInterface and route attributes vs. Laravel named routes and route-model binding; Symfony RequestStack and sub-requests vs. Laravel's request lifecycle and middleware ordering. Translation layers are where behavior silently diverges from upstream — the worst outcome, because we would carry the license obligation and own the bugs.

Migration path: port the model, not the code. Extract only the design — the breadcrumb item value object, the resolver/definition contract, the trail assembly algorithm, the rendering contract. Reimplement natively:

  • A Breadcrumbs service bound as a singleton with a fluent ->for(string $route, array $params, ?string $label) definition API.
  • Definitions registered per route in a routes/breadcrumbs.php file or a dedicated service provider, with fallback resolution for nested and parameterized routes.
  • An <x-breadcrumbs :trail="$trail" /> Blade component emitting semantic markup: <nav aria-label="Breadcrumb">, <ol>, and aria-current="page" on the terminal crumb.
  • A separate, opt-in JSON-LD BreadcrumbList emitter so structured data can be validated independently of layout changes.

If a dependency is genuinely preferred over first-party code, choose a permissively licensed, Laravel-native alternative and accept feature loss — noting that feature loss in this domain is nearly nil, which further erodes the case for any dependency at all.

Compatibility. Verify independently of everything above: the package's composer.json PHP and Symfony constraints, whether it transitively requires Libriciel siblings, and whether Packagist marks it abandoned. Do not spend engineering time here until the license question is answered — technical green lights behind a legal red light create internal momentum toward adoption, which is the failure mode to avoid.

Sequencing.

  1. License and deployment-model triage (legal + TPM). Exposure stated in writing. Gate: proceed or stop.
  2. Requirements check. Confirm the gap is real and not already covered by our layout or an existing helper. Gate: is a new dependency justified at all?
  3. Timeboxed spike (2 days). Read upstream source for edge cases — dynamic routes, missing parents, localization, trailing-crumb-as-text convention — and produce an LOE for the first-party port.
  4. Decision record. An ADR naming alternatives considered, the license analysis, and the chosen path. This is the artifact that protects us in a future audit or reorg.
  5. Implement the service, Blade component, and JSON-LD emitter behind a feature flag.
  6. Wire into layouts at the highest sensible level so new screens inherit breadcrumbs without per-view work.
  7. Validate with tests covering static, parameterized, and 404/fallback routes, plus Lighthouse structured-data validation and a screen-reader pass on aria-current.
  8. Close out the spike and pin the ADR to the relevant backlog epic.

The critical path is step 1, not step 5. Most schedule risk here is legal latency, not engineering effort.

Operational Impact

Maintenance. If we adopt or fork, we own it permanently. AGPL obliges us to make modifications available to network users, which in practice means a public or customer-accessible fork, a contribution policy, and a release process — a standing cost several times the size of the code itself. With 0 stars and 0 dependents, upstream will not carry security patches for us, will not deprecate gracefully for us, and will not document breaking changes with us in mind; version bumps must be treated as potentially hostile. A first-party port is ~300 lines we can read in one sitting and delete in one commit.

Support. No community, no issue-tracker mass, no third-party writeups. The effective support channel is a cold email to a French public-sector software vendor with whom we have no commercial relationship — for a breadcrumb. That is a poor support posture even for a trivial surface, because the failure mode when it breaks is silent.

Scaling. A genuine non-issue, and it should be stated plainly so it does not muddy the decision. Trail assembly is O(depth) over a handful of items, computed once per request, cacheable trivially, and free at any realistic traffic level. There is no performance reason to choose this package and none to reject it. Decision weight belongs with license and ownership, not throughput.

Failure modes to design against. (a) Silent degradation — a route with no definition renders an empty or single-crumb trail rather than erroring, so QA and SEO regressions ship unnoticed; mitigate with a test asserting coverage across named routes and a runtime warning in non-production. (b) Parameterized-route drift — new required route params break parent resolution; mitigate by resolving definitions in one place and failing loudly in tests. (c) License contamination reaching production unremarked; mitigate via a dependency-policy check in CI that flags copyleft licenses, so this class of package is caught by tooling rather than by memory. (d) Stale fork — an adopted fork drifts from upstream with no rebase plan; mitigate by not adopting.

Ramp-up. Near zero for any Laravel engineer: the first-party port uses concepts the team already owns — service provider, singleton binding, Blade component, feature test. Compare that to ramping on Symfony bundle conventions, Twig extensions, and AGPL obligations in order to maintain a breadcrumb trail. The first-party path is not just cheaper; it is the only path with a credible ramp-up story.

Bottom line. Leverage this package as a design reference and a forcing function for a written build-vs-buy decision, not as a runtime dependency. Recommend: close the evaluation, record the ADR, and add "breadcrumbs" to the backlog as a minor UI task sized in days.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator
equipc/laravel-email-database-log
adedsec/nova-translated-labels
wazza/laravel-db-encryption
hokny/laravel-generator
vonsogt/backup
jengo/queues
jeremykenedy/laravel-observability
coleus/frame
thtg88/journalism
filagora/filagora-ai-forums