PHPackages                             henryavila/filament-health-dashboard - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Logging &amp; Monitoring](/categories/logging)
4. /
5. henryavila/filament-health-dashboard

ActiveLibrary[Logging &amp; Monitoring](/categories/logging)

henryavila/filament-health-dashboard
====================================

Actionable Filament v4 dashboard for spatie/laravel-health: status grid, per-check meta drill-down, remediation actions and a failing-count navigation badge.

v0.1.0(1mo ago)00MITJavaScriptPHP ^8.3

Since Jun 2Pushed 1mo agoCompare

[ Source](https://github.com/henryavila/filament-health-dashboard)[ Packagist](https://packagist.org/packages/henryavila/filament-health-dashboard)[ Docs](https://github.com/henryavila/filament-health-dashboard)[ RSS](/packages/henryavila-filament-health-dashboard/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (1)Dependencies (7)Versions (2)Used By (0)

Filament Health Dashboard
=========================

[](#filament-health-dashboard)

[![Latest tag](https://camo.githubusercontent.com/11a35c117b1d49ee593b5e33127b80739e6a43acb024889697d7e44f6e4ec6c3/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f7461672f68656e72796176696c612f66696c616d656e742d6865616c74682d64617368626f6172643f6c6162656c3d72656c6561736526736f72743d73656d766572)](https://github.com/henryavila/filament-health-dashboard/tags)[![Filament v4](https://camo.githubusercontent.com/02d152f888d7e2f8158f075fcaab832f26178e280c6797757c0d6a8f849c578a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f46696c616d656e742d76342d663539653062)](https://filamentphp.com)[![License: MIT](https://camo.githubusercontent.com/62bb18ca34fc5207ae2a5608fc7d6a619a7b22f28c05b8116365291616492615/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f68656e72796176696c612f66696c616d656e742d6865616c74682d64617368626f617264)](LICENSE)

An **actionable** [Filament v4](https://filamentphp.com) dashboard for [`spatie/laravel-health`](https://github.com/spatie/laravel-health).

Most health dashboards are a read-only mirror of the status page. This one goes further: it surfaces each check's `meta` (drill-down), shows a failing-count navigation badge, can live as a page **or** a widget **or** an embeddable component, and exposes an **integration layer** so your domain checks can offer rich detail and one-click remediation — without coupling the package to your app.

```
// Minimal: a status dashboard on your panel
$panel->plugin(FilamentHealthDashboardPlugin::make());
```

---

Table of contents
-----------------

[](#table-of-contents)

- [Features](#features)
- [Requirements](#requirements)
- [Installation](#installation)
- [Quick start](#quick-start)
- [Where the dashboard appears (3 surfaces)](#where-the-dashboard-appears)
- [Configuration](#configuration)
- [Integration layer](#integration-layer)
- [Customizing the view](#customizing-the-view)
- [Testing](#testing)
- [License](#license)

Features
--------

[](#features)

- **Status grid** of every registered health check (color + icon + message).
- **Per-check `meta` drill-down** — the generic spatie `Result->meta` that most dashboards throw away, rendered in the most readable shape automatically (scalar → inline, nested → pretty JSON, **list of records → a table**). See [Metadata rendering](#metadata-rendering).
- **Failing-count navigation badge** on the dashboard menu item.
- **Three surfaces**: standalone page, widget, or embeddable Livewire component.
- **Integration layer** (`CheckIntegration`): per-check rich infolist + actions.
- **Optional polling** (auto-refresh) and a manual "re-run checks" button.
- **Authorization** hook and **publishable views**.

Requirements
------------

[](#requirements)

PHP8.3+Filamentv4spatie/laravel-health^1.30Installation
------------

[](#installation)

```
composer require henryavila/filament-health-dashboard
```

You also need `spatie/laravel-health` configured: register your checks (e.g. in a service provider via `Health::checks([...])`) and a result store such as `EloquentHealthResultStore`. Schedule `php artisan health:check` so the store stays fresh.

> **Styling is self-contained.** The dashboard inlines its own stylesheet, so there is **no `php artisan filament:assets` step** — it renders correctly the moment the plugin is registered (including path-symlinked dev installs). Fonts resolve to Filament's bundled Inter and a system monospace fallback; no external font CDN is fetched.

Quick start
-----------

[](#quick-start)

Register the plugin on a panel:

```
use HenryAvila\FilamentHealthDashboard\FilamentHealthDashboardPlugin;

public function panel(Panel $panel): Panel
{
    return $panel->plugin(
        FilamentHealthDashboardPlugin::make()
            ->navigationGroup('Infrastructure')
            ->navigationIcon('heroicon-o-heart'),
    );
}
```

That's it — a "Health" item appears in the panel navigation with the status grid.

Where the dashboard appears
---------------------------

[](#where-the-dashboard-appears)

The core is a Livewire widget, so the same dashboard can appear three ways. Pick any combination.

### 1. Standalone page (default)

[](#1-standalone-page-default)

Its own navigation item and route, registered by the plugin. Opt out if you only want the widget/component:

```
FilamentHealthDashboardPlugin::make()->registerPage(false);

// or swap the page to customize navigation/slug:
FilamentHealthDashboardPlugin::make()->usingPage(\App\Filament\Pages\MyHealth::class);
```

### 2. Widget

[](#2-widget)

Drop it onto any page or dashboard:

```
use HenryAvila\FilamentHealthDashboard\Widgets\HealthDashboardWidget;

protected function getHeaderWidgets(): array
{
    return [HealthDashboardWidget::class];
}
```

### 3. Embeddable Livewire component

[](#3-embeddable-livewire-component)

Render it inside any Blade — your own page, a modal, a tab:

```

```

Configuration
-------------

[](#configuration)

All methods are chained on `FilamentHealthDashboardPlugin::make()`:

MethodDescription`navigationGroup(?string)`Navigation group for the page.`navigationIcon(string|BackedEnum|null)`Navigation icon.`navigationLabel(?string)`Navigation label (default `Health`).`navigationSort(?int)`Navigation order.`navigationBadge(bool = true)`Show the failing-count badge (default on).`pollingInterval(?string)`Auto-refresh interval, e.g. `'60s'`.`authorize(Closure)`Gate access to the dashboard.`registerPage(bool = true)`Register the standalone page + nav item.`usingPage(class-string)`Use a custom page class.`integrations(array)`Register per-check integrations (see below).Metadata rendering
------------------

[](#metadata-rendering)

Every check's `Result->meta` is rendered automatically in the drill-down — no per-app code — picking the most readable shape per value:

Meta value shapeRendered asScalar (`string`/`int`/`bool`/`null`)inline value**List of records** (`[{...}, {...}]` — list of associative arrays)**a table** (columns = union of keys, one row per record)Any other nested array/objectpretty-printed, scrollable JSON blockThe table case is the high-value one: checks that store a list of rows as meta (e.g. `spatie/security-advisories-health-check` stores one advisory object per row) would otherwise read as a single 2 KB JSON line. The detection ([`MetaTable::tryFrom()`](src/Support/MetaTable.php)) is fully generic, so any check in any app gets the table for free — just put a list of records in `meta`:

```
Result::make()->meta([
    'advisories' => [
        ['package' => 'acme/foo', 'cve' => 'CVE-2026-1', 'severity' => 'high'],
        ['package' => 'acme/bar', 'cve' => 'CVE-2026-2', 'severity' => 'medium'],
    ],
]);
// → renders a 3-column table (package · cve · severity), 2 rows.
```

Need something richer than meta (status-coloured rows, remediation buttons, a bespoke layout)? Use the integration layer below.

Integration layer
-----------------

[](#integration-layer)

The dashboard renders every check generically. To add domain value to a specific check, implement `CheckIntegration` and register it via `->integrations([...])`. It is matched to a result by `checkName()` (equal to the spatie check's name).

```
use Filament\Actions\Action;
use Filament\Schemas\Schema;
use HenryAvila\FilamentHealthDashboard\Contracts\CheckIntegration;
use Spatie\Health\ResultStores\StoredCheckResults\StoredCheckResult;

final class MyCheckIntegration implements CheckIntegration
{
    public function checkName(): string
    {
        return 'my_check';
    }

    public function infolist(StoredCheckResult $result): ?Schema
    {
        // Rich drill-down, or null to fall back to the generic meta table.
        return null;
    }

    public function actions(StoredCheckResult $result): array
    {
        return [
            Action::make('remediate')
                ->label('Fix it')
                ->requiresConfirmation()
                ->action(fn () => /* run your command */ null),
        ];
    }
}
```

```
FilamentHealthDashboardPlugin::make()->integrations([
    MyCheckIntegration::class,
]);
```

Customizing the view
--------------------

[](#customizing-the-view)

Publish the views and edit them in your app:

```
php artisan vendor:publish --tag=filament-health-dashboard-views
```

Testing
-------

[](#testing)

```
composer test
```

License
-------

[](#license)

The MIT License (MIT). See [LICENSE](LICENSE).

###  Health Score

35

—

LowBetter than 77% of packages

Maintenance90

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity38

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

52d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/f05a7a5057256071ec7089d62dcf7b47d5700fe1189e7fceac681f93f2894a85?d=identicon)[henryavila](/maintainers/henryavila)

---

Top Contributors

[![henryavila](https://avatars.githubusercontent.com/u/8429941?v=4)](https://github.com/henryavila "henryavila (8 commits)")

---

Tags

spatielaravelmonitoringhealthdashboardfilament

###  Code Quality

TestsPest

### Embed Badge

![Health badge](/badges/henryavila-filament-health-dashboard/health.svg)

```
[![Health](https://phpackages.com/badges/henryavila-filament-health-dashboard/health.svg)](https://phpackages.com/packages/henryavila-filament-health-dashboard)
```

###  Alternatives

[spatie/laravel-health

Monitor the health of a Laravel application

87912.0M177](/packages/spatie-laravel-health)[rawilk/profile-filament-plugin

Profile &amp; MFA starter kit for filament.

3914.8k](/packages/rawilk-profile-filament-plugin)[defstudio/telegraph

A laravel facade to interact with Telegram Bots

813336.8k3](/packages/defstudio-telegraph)[stephenjude/filament-jetstream

A Laravel starter kit built with Filament inspired by Jetstream.

17760.2k3](/packages/stephenjude-filament-jetstream)[keepsuit/laravel-opentelemetry

OpenTelemetry integration for laravel

167558.4k1](/packages/keepsuit-laravel-opentelemetry)[harris21/laravel-fuse

Circuit breaker for Laravel queue jobs. Protect your workers from cascading failures.

45955.7k](/packages/harris21-laravel-fuse)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
