marcorieser/statamic-vitals
Vitals adds a diagnostics dashboard to the Statamic control panel, running health checks on PHP version, caching, queues, and configuration so you can catch problems early and keep your sites running smoothly. Results appear as status badges, making issues easy to spot at a glance.
Install and confirm it registers. This is a Statamic addon, so installation is a Composer bump plus Statamic's addon auto-discovery — there is no manual service-provider registration in config/app.php.
composer require marcorieser/statamic-vitals:^1.3.0
Pin ^1.3.0 if you are on (or heading to) Statamic v6; stay on ^1.2 for v5 sites until the v6 upgrade is sequenced. After install, clear caches so Statamic picks up the addon manifest and any new CP assets:
php artisan cache:clear
php artisan view:clear
php artisan statamic:stache:clear # if the addon touches the Stache
Where to look first. In order:
vendor/marcorieser/statamic-vitals/config/ — the package's default config. This is the contract: which checks run, how they're grouped, and what the extension point looks like. Read it before you publish anything.config/statamic/cp.php under widgets if you want it to appear for every user by default.First use case. Get the widget onto your dashboard before you get it onto anyone else's. Open the CP, confirm each check reports the state you expect (PHP version, environment, cache driver, storage writability, queue health), then decide which results actually matter for your site. The value here is not "green checkmarks" — it's that a red cache or queue result on a Monday morning tells you about a broken deployment before an editor files a ticket.
Publish and own the config. Zero-config defaults are fine for a first look, but publish the config and commit it so check behaviour is reviewable in diffs:
php artisan vendor:publish --tag=statamic-vitals-config
Then treat the published file as code: the checks enabled in production should not be the same set you run locally (storage thresholds, queue expectations, and environment assertions all differ).
Environment-scoped checks. The most common day-to-day pattern is making the check list config-driven per environment — strict in production (queue must be running, storage must be writable, APP_DEBUG must be false), lenient locally (skip queue checks if you're not running a worker). Do this through the config rather than by commenting out widget code.
Custom checks. The addon advertises an extensible architecture, so the intended pattern is: find the check contract (an interface or abstract class in the package source), implement it, and register your class in the published config's checks array — or via whatever registration hook the package exposes if it isn't purely config-driven. A pragmatic custom check looks like:
final class SearchIndexFreshCheck implements VitalsCheck
{
public function run(): VitalsResult
{
$stale = Cache::get('search:last_sync');
return $stale && $stale->gt(now()->subHours(6))
? VitalsResult::pass('Search index synced within 6h')
: VitalsResult::warn('Search index stale — last sync: ' . ($stale ?? 'never'));
}
}
Keep custom checks cheap and side-effect free. The dashboard renders them on page load; a check that queries an external API or walks the filesystem synchronously will make the CP feel slow and will be the first thing you regret.
External monitoring. The package's premise is exposing vitals "for external usage" — so the second integration pattern is wiring the results into something outside the CP: an uptime monitor, a status page, or a scheduled Slack ping. Verify in the source whether that means a route/endpoint or just a programmatic API you call from your own command. If it's a route, it must be behind auth or an IP allowlist — a public endpoint that reports your PHP version, environment name, and queue state is a reconnaissance gift.
Deploy-time smoke test. If the checks are callable outside the CP (a facade, a service class, or an artisan command), add them to your post-deploy script or a staging smoke test. Failing the deploy when APP_DEBUG is on in production is worth more than any dashboard.
cp.php.vendor/.../config/*.php — new checks or renamed keys won't appear automatically.composer.json whether v1.3.0 widens the constraint to allow v5 and v6 or replaces v5 support entirely — that determines whether v5 sites can take patch fixes. Keep the pin explicit in every site you own rather than floating on *.vendor/. Keep vendor/ pristine so upgrades stay one-line.How can I help you explore Laravel packages today?