PHPackages                             anselmokossa/filament-sentinel - 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. anselmokossa/filament-sentinel

ActiveLibrary

anselmokossa/filament-sentinel
==============================

Branded, diagnostic error pages (500, 403, 404, 419, 503) for Filament — native Filament UI, dark mode and translations out of the box.

v1.2.1(3w ago)61.9k1[2 PRs](https://github.com/anselmocossa/filament-sentinel/pulls)1MITBladePHP ^8.2

Since Jul 15Pushed 1mo agoCompare

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

READMEChangelogDependencies (18)Versions (5)Used By (1)

 [![Filament Sentinel](art/banner.png)](art/banner.png)

Filament Sentinel
=================

[](#filament-sentinel)

 Branded, diagnostic error pages for [Filament](https://filamentphp.com).

 [![Filament v5](https://camo.githubusercontent.com/0f2528eadf7accd64874ea6728dc09a2c2982c1b6a3b0c2f0d146a9f320fcbdc/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f46696c616d656e742d76352d4644414534423f7374796c653d666c61742d737175617265)](https://camo.githubusercontent.com/0f2528eadf7accd64874ea6728dc09a2c2982c1b6a3b0c2f0d146a9f320fcbdc/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f46696c616d656e742d76352d4644414534423f7374796c653d666c61742d737175617265) [![PHP 8.2+](https://camo.githubusercontent.com/55239fed202a8d0166ef8d9fcc163425f68eb6123d9b0edf0579051291553f6e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e322b2d3737374242343f7374796c653d666c61742d737175617265266c6f676f3d706870266c6f676f436f6c6f723d7768697465)](https://camo.githubusercontent.com/55239fed202a8d0166ef8d9fcc163425f68eb6123d9b0edf0579051291553f6e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e322b2d3737374242343f7374796c653d666c61742d737175617265266c6f676f3d706870266c6f676f436f6c6f723d7768697465) [![Laravel 12](https://camo.githubusercontent.com/06ea735703a9f1df04eafc3035859ba230f5b3396114bb712770feb5eb1ded4f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d31322d4646324432303f7374796c653d666c61742d737175617265266c6f676f3d6c61726176656c266c6f676f436f6c6f723d7768697465)](https://camo.githubusercontent.com/06ea735703a9f1df04eafc3035859ba230f5b3396114bb712770feb5eb1ded4f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d31322d4646324432303f7374796c653d666c61742d737175617265266c6f676f3d6c61726176656c266c6f676f436f6c6f723d7768697465) [![Tests](https://camo.githubusercontent.com/4d6273f945853911baa4462d8babaf04e13f5430a1f06917b9ac3d3c5b6e1332/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f74657374732d323625323070617373696e672d627269676874677265656e3f7374796c653d666c61742d737175617265)](https://camo.githubusercontent.com/4d6273f945853911baa4462d8babaf04e13f5430a1f06917b9ac3d3c5b6e1332/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f74657374732d323625323070617373696e672d627269676874677265656e3f7374796c653d666c61742d737175617265) [![MIT License](https://camo.githubusercontent.com/ac049ef4e7a0b7196b09add6ac2d4f180e544c0ac779c2b2ac2fd2723a209579/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75653f7374796c653d666c61742d737175617265)](https://camo.githubusercontent.com/ac049ef4e7a0b7196b09add6ac2d4f180e544c0ac779c2b2ac2fd2723a209579/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75653f7374796c653d666c61742d737175617265)

---

A drop-in replacement for Laravel's default **500, 403, 404, 419 and 503** pages, built from native Filament UI so they inherit your panel's colours, fonts, brand logo and dark mode automatically.

- **Native Filament, not a bespoke theme** — pages are composed from ``, `badge`, `section` and `icon`, on a light theme-aware scaffold. No design system to maintain.
- **Real data, never invented** — content is derived from the actual exception: authorization detail on 403, the missing path on 404, `Retry-After` on 503, and on 500 the real exception behind a **"View more"** panel — class, location, message and a structured, debugger-style stack trace, unwrapped to the root cause. Exposure follows `APP_DEBUG` by default; force it on/off with `show_exception_details`.
- **SAP-style message numbers** (e.g. `SNT-500-087`), stable per error signature — the same failure always quotes the same number, easy to give to support.
- **Request ids** assigned by middleware and echoed on the response, so the id on the page matches your logs.
- **Translations** for English, European Portuguese and Brazilian Portuguese.

Screenshots
-----------

[](#screenshots)

#### A panel action failed — the branded 500 appears over the real, still-visible page

[](#a-panel-action-failed--the-branded-500-appears-over-the-real-still-visible-page)

[![500 overlay over a live Filament panel](art/screenshots/500-overlay.png)](art/screenshots/500-overlay.png)

[![403 Access denied](art/screenshots/403.png)](art/screenshots/403.png)
*403 — access denied, with the real reason*[![404 Page not found](art/screenshots/404.png)](art/screenshots/404.png)
*404 — page not found, with the missing path*[![419 Session expired](art/screenshots/419.png)](art/screenshots/419.png)
*419 — session expired*[![503 Down for maintenance](art/screenshots/503.png)](art/screenshots/503.png)
*503 — maintenance, with `Retry-After`*#### Every page follows your panel's light or dark theme automatically

[](#every-page-follows-your-panels-light-or-dark-theme-automatically)

[![500 overlay over a live Filament panel in light theme](art/screenshots/500-overlay-light.png)](art/screenshots/500-overlay-light.png)

[![403 Access denied, light theme](art/screenshots/403-light.png)](art/screenshots/403-light.png)
*403 — light theme*[![404 Page not found, light theme](art/screenshots/404-light.png)](art/screenshots/404-light.png)
*404 — light theme*[![419 Session expired, light theme](art/screenshots/419-light.png)](art/screenshots/419-light.png)
*419 — light theme*[![503 Down for maintenance, light theme](art/screenshots/503-light.png)](art/screenshots/503-light.png)
*503 — light theme*Installation
------------

[](#installation)

```
composer require anselmokossa/filament-sentinel
```

That's it. The package auto-registers and its pages become the default for aborted requests — nothing to publish. Your app can still override any page by adding its own `resources/views/errors/{code}.blade.php`.

> The pages reuse Filament's published base stylesheet (`public/css/filament/filament/app.css`). It is created by `php artisan filament:assets`, which Filament already runs on install and deploy.

### Register the plugin (optional)

[](#register-the-plugin-optional)

Add the plugin to a panel to configure it fluently. This is optional — the pages work without it.

```
use Filament\Sentinel\SentinelPlugin;

public function panel(Panel $panel): Panel
{
    return $panel
        ->plugins([
            SentinelPlugin::make()
                ->brand('Acme')                 // defaults to the panel/app name
                ->messagePrefix('ACM')           // ACM-500-087
                ->windowPosition('bottom-right')  // or ->fullPage() for a full-page 500
                ->email('help@acme.test')        // "Contact support" mailto:
                ->homeUrl('/admin'),
        ]);
}
```

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

[](#configuration)

Publish the config to tweak defaults:

```
php artisan vendor:publish --tag=sentinel-config
```

OptionDescriptionDefault`enabled`Serve the branded pages at all`true``codes`Status codes Sentinel provides`[500, 403, 404, 419, 503]``brand`Wordmark shown on each pagepanel / app name`message_number.enabled`Show the `SNT-500-087` reference`true``message_number.prefix`Message-number prefix`SNT``request_id.enabled`Show and assign a request id`true``show_exception_details`Reveal the real exception on 500: `null` follows `APP_DEBUG`, `true` always, `false` never`null``window.style`500 presentation: `window` (small docked) or `page` (full page, like the other codes)`window``window.position`Docked window placement: `bottom-left`, `bottom-right`, `top-left`, `top-right`, `top-center`, `bottom-center`, `center`, or a full-height slide-over with `slide-right` / `slide-left``bottom-left``window.width`Docked window width — a number (pixels) or CSS length (`"28rem"`)`400``support_url`URL / `mailto:` for "Contact support"`null``home_url`Destination of the primary button`/`Fluent API
----------

[](#fluent-api)

Every option above is also settable on `SentinelPlugin::make()`; anything left unset falls back to `config/sentinel.php`.

MethodPurpose`->brand($name)`Wordmark on every page`->messagePrefix($prefix)`Prefix of the message number`->messageNumbers($bool)`Toggle message numbers`->requestId($bool)`Toggle the request id`->showExceptionDetails($bool)`Force the 500 exception panel on (`true`) or off (`false`); omit to follow `APP_DEBUG``->windowPosition($position)`Where the docked 500 window sits (`center`, `top-right`, `slide-right`, …)`->windowWidth($width)`Docked window width (`460` or `"28rem"`)`->fullPage($bool = true)`Render the 500 as a full page like the other codes`->supportUrl($url)`"Contact support" link`->email($address)`"Contact support" as a `mailto:` link`->homeUrl($url)`Primary "back to safety" destination`->codes($array)`Status codes to brand`->enabled($bool)`Disable the whole packagePublishing &amp; customization
------------------------------

[](#publishing--customization)

```
php artisan vendor:publish --tag=sentinel-config        # config/sentinel.php
php artisan vendor:publish --tag=sentinel-translations  # lang files to edit the wording
php artisan vendor:publish --tag=sentinel-views         # the Blade views, to restyle
```

### Overriding a page

[](#overriding-a-page)

Because the pages register as the default `errors::{code}` views, you override any of them the standard Laravel way — add your own `resources/views/errors/404.blade.php`and it wins.

### Eject — keep the pages after removing the plugin

[](#eject--keep-the-pages-after-removing-the-plugin)

```
php artisan vendor:publish --tag=sentinel-errors
```

This drops a **self-contained** set of error pages (500, 403, 404, 419, 503) straight into `resources/views/errors/`. They have **no dependency on this package — or even on Filament** (their own palette, inlined styles and icons, only Laravel core for the message number, request id and exception detail), so they stay branded and keep working even after you `composer remove` the plugin. From then on they are yours to edit. The published copies live in your app, so they take precedence over the plugin immediately.

Testing
-------

[](#testing)

```
composer test
```

License
-------

[](#license)

MIT. See [LICENSE.md](LICENSE.md).

###  Health Score

48

—

FairBetter than 94% of packages

Maintenance92

Actively maintained with recent releases

Popularity29

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity49

Maturing project, gaining track record

 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

Every ~7 days

Total

4

Last Release

26d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/103646784?v=4)[anselmocossa](/maintainers/anselmocossa)[@anselmocossa](https://github.com/anselmocossa)

---

Top Contributors

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

---

Tags

laravelexception handlerfilamentfilament-pluginerror-pageshttp errors

###  Code Quality

TestsPest

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/anselmokossa-filament-sentinel/health.svg)

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

###  Alternatives

[rawilk/profile-filament-plugin

Profile &amp; MFA starter kit for filament.

3915.5k](/packages/rawilk-profile-filament-plugin)[spatie/laravel-health

Monitor the health of a Laravel application

89313.5M195](/packages/spatie-laravel-health)[harris21/laravel-fuse

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

24795.1k](/packages/harris21-laravel-fuse)[psalm/plugin-laravel

Psalm plugin for Laravel

3365.5M359](/packages/psalm-plugin-laravel)[defstudio/telegraph

A laravel facade to interact with Telegram Bots

818355.4k3](/packages/defstudio-telegraph)[nativephp/mobile

NativePHP for Mobile

1.2k128.7k171](/packages/nativephp-mobile)

PHPackages © 2026

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