Laravel Vitals v1.0
Star 1 Install
v1.0 First stable release Β· 22 SEO checks + N+1 attribution

Lighthouse, with your code attached.

Performance auditing, Real User Monitoring, and actionable recommendations β€” all inside your Laravel app. Your data stays in your own database. No SaaS, no per-seat billing.

Works with
Laravel
Livewire
Flux UI
Lighthouse
PHP 8.2+
Features

Everything Lighthouse can tell you, plus what your server was doing at the same moment.

Most performance tools stop at the page load. Laravel Vitals goes one step further β€” it correlates each Lighthouse finding with the queries, memory, and code paths that produced it.

Lighthouse, four drivers
Local Node, Playwright in Docker, the PageSpeed API, or a stub for testing. The auto driver falls back through the chain β€” most environments work with zero config.
Backend telemetry
Query count, total query time, N+1 suspicion, peak memory, jobs dispatched, cache hits β€” captured via a signed header during every audit run.
Source code references
Seven static analyzers attach exact file:line references to each Lighthouse finding. Click through to your editor from any recommendation.
Real User Monitoring
Add @vitalsRum to your head. Core Web Vitals from real visitors with INP attribution β€” no IP addresses, no cookies, no session identifiers.
SEO checks (22 Google-aligned)
22 checks across Configuration, Content, Meta, and Performance β€” every one a documented Google ranking signal. Results blend with the Lighthouse SEO score.
Self-hosted, MIT
Lives inside your own Laravel app. Audits, RUM beacons, recommendations β€” all stored in your own database. No SaaS account, no per-seat billing.
Compare

Lighthouse-grade audits, but they also know what your server was doing.

Most performance tools stop at the page load. Pick what to compare us against β€” the gap is the same shape every time.

Capability
PageSpeed Insights Google Β· free
GTmetrix commercial Β· SaaS
Sentry Performance commercial Β· SaaS
Laravel Vitals self-hosted Β· MIT
Lighthouse scores (Performance, A11y, SEO, Best Practices)
Backend telemetry β€” queries, memory, N+1, cache
Source code references β€” exact file and line
Real User Monitoring β€” self-hosted, no PII paid via CrUX
Performance budgets with CI exit codes
GitHub PR auto-comments with score table
22 custom SEO checks (Google-aligned)
Self-hosted β€” your data stays yours
Per-seat pricing free, public URLs only
Lighthouse scores (Performance, A11y, SEO, Best Practices)
Backend telemetry β€” queries, memory, N+1, cache
Source code references β€” exact file and line
Real User Monitoring β€” self-hosted, no PII
Performance budgets with CI exit codes limited
GitHub PR auto-comments with score table
22 custom SEO checks (Google-aligned)
Self-hosted β€” your data stays yours
Per-seat pricing
Lighthouse scores (Performance, A11y, SEO, Best Practices)
Backend telemetry β€” queries, memory, N+1, cache
Source code references β€” exact file and line partial
Real User Monitoring β€” self-hosted, no PII
Performance budgets with CI exit codes enterprise
GitHub PR auto-comments with score table
22 custom SEO checks (Google-aligned)
Self-hosted β€” your data stays yours
Per-seat pricing
PageSpeed Insights uses Lighthouse under the hood β€” same audit engine, different surface. The difference is in what the surface exposes.
Source code references

"Eliminate render-blocking resources" β€” fine, but which line?

Seven analyzers scan your project: Blade asset tags, image tags, Laravel config settings, Composer packages, Vite config, Blade view patterns, and .env settings β€” attaching the exact file and line to each Lighthouse finding.

  • Blade asset tags β€” render-blocking css/js detection
  • Image tags β€” defer offscreen images, image-alt missing
  • Laravel config β€” missing config:cache, debug-in-prod, sync queue, disabled OPcache
  • Composer packages β€” outdated package-level recommendations
  • Vite config β€” unused/uncompressed bundle hints
  • Blade view patterns β€” N+1 caller file + line, top 3 patterns
  • .env settings β€” debug / config / locale checks
resources/views/layouts/app.blade.php 1 finding
8 <head>
9 <meta charset="utf-8">
10 <meta name="viewport" content="width=device-width, initial-scale=1">
11 <title>{{ config('app.name') }}</title>
12 <link rel="stylesheet" href="/css/bootstrap.min.css">
13 @vite(['resources/js/app.js'])
14 @vitalsRum
15 </head>
Performance Eliminate render-blocking resources
line 12 β€” use @vite([...]) to bundle this stylesheet, or add defer / async.
Privacy by design

Your data never leaves your database.

Audits, telemetry, RUM beacons β€” all stored in your own Laravel app. No IP addresses, no cookies, no session identifiers. No SaaS account. No per-seat billing. MIT licensed, drop-in, gone if you uninstall.

No IP addresses stored
No cookies, no session IDs
GDPR-safe by default
MIT β€” uninstall any time
Live demo β€” public, fake data

Click through a fully seeded dashboard before you install.

Every page is reachable β€” Overview, URLs, Issues, SEO, RUM, Queries, Learn, Budgets. Real data shape, fake hostnames. Drop in, click around, share the link with your team.

  • 8 dashboard pages
  • Light + dark mode
  • Spotlight ⌘K
  • No login required
Install

Get to the bottom of every Lighthouse score.

Install the package, declare your URLs, run an audit. You'll have backend telemetry and code-level recommendations in under five minutes.

$ composer require corentinbtmps/laravel-vitals
PHP 8.2+ Β· Laravel 11 / 12 / 13 MIT licensed i18n: EN Β· FR Β· DE Β· ES