exolnet/laravel-heartbeat
A lightweight heartbeat endpoint for Laravel apps, exposing a route that confirms your application and scheduler are alive so external monitors can alert you when cron jobs or queued work stop running.
composer require exolnet/laravel-heartbeat. As of v1.15.0 the package requires Laravel 12+ (Laravel 11 and Testbench 9 were dropped) — check your composer.json platform constraints before running composer update, otherwise Composer will silently keep you on 1.14.x or fail resolution.config/app.php or bootstrap/providers.php.php artisan vendor:publish and pick the heartbeat tag — confirm the exact tag name in the package README for your version). This is where you set the route path, middleware, and any checks the endpoint performs.GET /heartbeat, or whatever path the config defines) and confirm you get a JSON payload back. Then point an external uptime monitor (Better Uptime, UptimeRobot, Pingdom, a Cloudflare/Kubernetes health check, an ALB target group) at that URL. That single step is 90% of the package's value — it gives you an application-level signal instead of a bare TCP ping.200, degraded → 503. If the package always returns 200, wrap it or extend the check so failures are visible to the monitor.sessions table and fill access logs with probe traffic.curl -f https://staging.example.com/heartbeat in your pipeline and fail the build on non-2xx. This catches "deploy succeeded but the app can't boot" far earlier than a user report.testing. In feature tests, assert the route returns the expected status with $this->get('/heartbeat')->assertOk().spatie/laravel-health and keep the heartbeat cheap."exolnet/laravel-heartbeat": "^1.14" in composer.json before your next composer update; otherwise you'll get a resolution failure or an accidental downgrade elsewhere in the dependency graph. Upgrade path is: Laravel 11 → 12 first, then bump the heartbeat package.php artisan config:clear and php artisan route:clear — a cached config or route table will make it look like your new route path "didn't apply."curl on the box shows.routes/web.php (or api.php) and use Route::has('heartbeat') to check whether the package already claimed the path. Keep custom logic in your app, not in a vendor/ edit — the next composer update will erase it.How can I help you explore Laravel packages today?