glhd/gretel
Gretel is a Laravel package for managing redirects and avoiding broken links. Define redirects in code, automatically catch 404s, route old URLs to new ones, and track hits with a simple, flexible API for keeping your app’s links healthy.
Gretel (glhd/gretel) is a small, single-purpose Laravel package for defining and rendering breadcrumb trails and menus from a fluent PHP API, resolved against the application's named routes and rendered through Blade components. Architecturally it sits entirely in the presentation layer of a server-rendered Laravel app: it registers a service provider, a facade/macro surface, and Blade components, with no persistence, no queue or event wiring, and no schema footprint. That gives it a very small blast radius and makes it a low-coupling dependency — an important property for a package we would otherwise need to justify to an architecture review.
Release 1.10.0 is a compatibility-maintenance release: it adds support for Laravel 13. There are no stated feature additions, deprecations, or breaking changes, and the changelog is a single line plus a diff link. That is a positive signal for upgrade risk but a weak signal for change confidence — the effective change surface is a widened illuminate/* / laravel/framework Composer constraint and whatever CI/test-matrix adjustments accompany it. The technical risk is therefore concentrated in dependency resolution and platform lifecycle rather than in runtime behaviour.
Key risks and open questions:
php requirement and whether our oldest supported app (likely PHP 8.2/8.3) is still covered.Stack fit: appropriate for our Laravel monolith and any Blade-rendered surface. It is worth flagging that Gretel is inherently server-side — if a significant share of our navigation ships through Inertia or a JS SPA router, Gretel only helps on the initial server render and may duplicate logic in the client. For Livewire/Blade-first apps it fits cleanly.
Migration path: this is an additive dependency, not a platform migration. The realistic sequencing is:
^1.9 on apps running Laravel 10–12; take 1.10.0 only if it passes the same test suite, since there is no functional upside yet.Compatibility: requires a Composer resolve against our other illuminate/* dependents; breadcrumb/menu packages are frequently co-installed with admin panels (Nova, Filament) and SEO/schema packages, so the constraint graph is the practical failure point. Expect a short composer update --dry-run spike per app to confirm no conflict. Existing usage (route-based crumb definitions, Gretel::make() call sites, published config/views) should carry over unchanged, but any app that has published and edited Gretel's Blade views should re-verify component markup after the bump, since vendored-view drift is the classic silent breakage here.
Maintenance: near-zero steady-state cost. No migrations, no scheduled work, no config churn. The recurring obligation is dependency hygiene — tracking Gretel's releases alongside Laravel majors and confirming each bump resolves in every app.
Support: a small, single-maintainer open-source package. That is acceptable for a presentation-layer breadcrumb helper and unacceptable for anything on the critical path of data integrity, but it should be recorded in our dependency register with an explicit "replaceable in a sprint with ~50 lines of Blade partials" disposition. The thin 1.10.0 release note is itself a mild documentation signal; we should rely on the diff and CI status rather than the prose.
Scaling: negligible. Breadcrumb resolution is per-request PHP work with no I/O unless a crumb definition resolves an Eloquent model — that is the one real scaling concern, since a trail that lazily loads a model per crumb can turn a cheap page into N+1 queries under load. Keep crumb definitions route/parameter-based and eager-load anything model-derived.
Failure modes to watch: a renamed or removed route makes trail resolution throw and 500s the page (breadcrumbs are in the layout, so the blast radius is every page that renders them); required route parameters not supplied at render time; recursive or self-referential trail definitions; and markup changes from published views breaking CSS/SEO assertions. Mitigation is cheap — a smoke test asserting HTTP 200 plus expected breadcrumb text on a handful of representative routes, and a schema/structured-data assertion if we emit JSON-LD.
Ramp-up: low. A developer familiar with Laravel can read the docs and ship a working breadcrumb trail in half a day, and the concept maps onto existing mental models (named routes, Blade components). Budget roughly one day of engineering plus a reviewer for the initial integration, and treat ongoing cost as a line item inside each Laravel major upgrade rather than a standing allocation.
How can I help you explore Laravel packages today?