A FIELD GUIDE TO LARAVEL · VOLUME II · THE ECOSYSTEM
ENTRY II.32 · OBSERVABILITY
Pulse
Laravel\Pulse · Package · first recorded 1 December 2023, v1.0.0-beta1 on Packagist
A performance dashboard inside your own app. Recorders listen to framework events, aggregate them into buckets in your database, and a Livewire page at /pulse shows slow requests, queries, jobs, exceptions and the busiest users.
Specification
Kind Package: in-process recorders plus a Livewire dashboard
Driver Storage: MySQL, MariaDB or PostgreSQL; ingest: database or a Redis stream
Client Any browser at /pulse, behind the viewPulse gate
Installed by composer require laravel/pulse · vendor:publish · migrate
Voice pulse:check · pulse:work · pulse:restart
Scales by Sampling per recorder; a dedicated DB connection; Redis ingest and a worker
Range Cloud: yes; pulse:check as a custom background process if the Servers card is wanted
Forge, VPS: yes, with pulse:check under Supervisor
Vapor: partly: recorders write on terminate; no resident pulse:check or pulse:work on Lambda
Neighbours
Telescope is the other in-app lens, and the Pulse docs point there for debugging individual events: every request in detail, mostly local. Nightwatch is the hosted one, run by Laravel. Pulse keeps aggregates in your own database, for a team watching production.
Field marks
PULSE_DB_CONNECTION=pulse
PULSE_INGEST_DRIVER=redis
config/pulse.php
Gate::define('viewPulse', ...)
Fig. II.32.1 · the recording path, exploded
Parts
1 Event. A slow query, a request, a cache miss, an exception: framework events that are already being fired.
2 Recorder. One class per metric in config/pulse.php, with a sample rate and ignores; slow ones add a 1,000 ms threshold.
3 Ingest. Written after the response is sent; PULSE_INGEST_DRIVER=redis sends to a stream and pulse:work drains it.
4 Buckets. Pre-aggregated avg, count, max, min and sum, so the dashboard reads summaries, not raw rows.
5 pulse:check, optional. A resident process per server that reports CPU, memory and disk for the Servers card.
6 Dashboard. /pulse, Livewire cards in a 12-column grid; publish dashboard.blade.php to rearrange or add your own.
Hidden joinery
If Pulse cannot write, it fails silently rather than fail the request; handleExceptionsUsing changes that. Trimming is a lottery at ingest, not a scheduled job. Sampled values show scaled, prefixed with ~. Only the user id is stored; names and avatars resolve at render. Redis ingest should not share the queue's connection.
Every line checked against the 13.x docs, laravel/pulse source and Vapor docs on 2026-10-08.
TITLE
Pulse · the recording path
SOURCES
laravel.com/docs/13.x/pulse · github.com/laravel/pulse · repo.packagist.org/p2/laravel/pulse.json · laravel.com/docs/13.x/telescope · laravel.com/cloud/docs/workers · laravel.com/forge/docs · docs.vapor.build · github.com/laravel/vapor-core/blob/2.0/src/Runtime/HttpKernel.php · nightwatch.laravel.com/docs/start-guide · Monitor 704
STATUS
Verified · 2026-10-08
SHEET
II.32 of 48
REV
A · 2026-10-08
DRAWN
BS
FINISH
All faces, including the back