divoto/cairn
Cairn is a lightweight Laravel package from Divoto that helps you mark a clear path through your codebase with a clean, expressive API. It integrates smoothly with Eloquent, ships with sensible defaults, and makes complex features easier to build and maintain in any Laravel app.
not_found entry type records 404s for URLs with no route, which were previously invisible, without starting sessions or counting visitors. This helps detect link rot, mistyped URLs, and scanner traffic without inflating pageviews or visitor figures.Metric::Errors, Dimension::Status, and Dimension::ErrorPage make errors a first-class dimension and metric. PMs can track error volume by route and page, set expectations for reliability, and compare error trends against releases or campaigns.Report::minimum() lets teams exclude rows below a metric floor before ordering and limiting, which is useful for ranked tables, “top N” summaries, and executive dashboards where sparse rows add noise.Consider Cairn when:
config:cache, and auditing API clients for parameters that are now rejected with 422.Look elsewhere when:
For executives: Cairn v1.3.0 turns existing Laravel telemetry into clearer operational insight. We can now see which routes are slow on the server, which pages are failing, and which broken links are driving 404s, without counting those failures as normal traffic. The release also hardens the reporting API so dashboards and integrations get ranked, filtered, and validated results instead of silently incorrect answers. It is a low-migration upgrade with targeted backfill steps, and it reduces the case for building custom analytics plumbing.
For engineering: The package already recorded response times and status codes; this release exposes them through Slowest Routes and Broken Pages, adds not_found tracking for unrouted 404s, and introduces Metric::Errors plus Status and ErrorPage dimensions. Privacy controls and URL scrubbing are applied consistently, including stronger scrubbing for unmatched paths. The API now ranks grouped rows before limiting, honors dimension filters, returns the actual interval, and rejects unreadable parameters with 422. Upgrade work is mainly a rollup backfill for historical routed errors, adding the new widgets if the config publishes a widget list, clearing config cache, and checking API clients for unknown parameters.
How can I help you explore Laravel packages today?