hugomyb/filament-error-mailer
Filament Error Mailer automatically emails you when errors occur in your Filament admin panel, including useful exception details so you can spot and fix issues faster. A simple monitoring add-on for Laravel and Filament apps.
Architecture fit. hugomyb/filament-error-mailer is a thin convenience layer, not infrastructure. It plugs into the Filament panel plugin lifecycle (registered in a PanelProvider) and hooks Laravel's exception reporting path to dispatch an email through the framework's mail stack. Architecturally it is a handful of classes plus a config file — low surface area, low coupling, no new runtime dependency beyond Filament itself. That is a good fit for a conventional Laravel monolith with a Filament admin panel and a small team that wants a "loud" alert channel without standing up an observability vendor. It is a poor fit for API-only services, multi-tenant platforms with per-tenant notification requirements, or anything where email is not already a trusted transport.
Integration feasibility. Install effort is genuinely small — a Composer require, a plugin registration line, vendor:publish for config, recipients and mailer via env. The real work is not the package: it is mail deliverability (SPF/DKIM/DMARC on the sending domain, a monitored distribution alias rather than a personal inbox, and a mail transport that is independent of the application's own failure domain). Budget one to two engineer-days end to end including staging verification.
Technical risk. Material, and mostly not about code quality:
Key questions for the maintainer / spike.
ExceptionHandler::report, a reportable() callback, or render? Does it honour dontReport / ShouldntReport and ignored exception lists?local and testing by default?Stack fit. Laravel 10–12 with Filament v3/v4 and PHP 8.1+. If the application does not already run Filament, this package is the wrong tool — the equivalent behaviour is a native Notification or a reportable() closure with a RateLimiter, roughly thirty lines and zero third-party risk. The package's only real value is the "one line in the PanelProvider" ergonomics for teams already in the Filament ecosystem.
Migration path. This is additive, not a replacement, and should be positioned as such. Two viable framings:
Compatibility and containment. Pin an exact version in composer.json rather than a caret range, and lock it. Add the package to the upgrade checklist for Filament and Laravel majors. Because the implementation is small, carry a documented fallback: vendor the code into app/ (MIT permits it) or replace with a native reportable() handler if the maintainer goes dormant. That fallback is the entire risk mitigation and it is cheap.
Sequencing.
RateLimiter keyed on exception class and message hash.Maintenance. Low code surface, moderate dependency risk. The package itself will rarely need attention; the surrounding Filament and Laravel versions will. Assign a named owner and add a line to the framework-upgrade checklist. With zero dependents in the wild, your team is effectively the package's QA function — assume you will find the edge cases.
Support. Single maintainer, MIT, no SLA, unknown issue-response characteristics. Plan for self-support. The vendoring fallback converts this from a vendor-risk problem into a routine code-ownership problem, which is why it should be documented up front rather than discovered during an incident.
Scaling. Email throughput is not the scaling concern — error volume is, and it scales inversely with your need for it. Effective controls: rate limiting per exception signature, sampling on high-frequency errors, and a hard cap on messages per hour. Also account for mailbox quotas and the sending domain's reputation; a flood can degrade transactional mail from the same domain. If the send is synchronous and not queued, it adds latency to every failing request — a poor property during an incident.
Failure modes, in rough order of severity.
| Failure | Consequence | Mitigation |
|---|---|---|
| Mail transport fails silently | You believe you are monitored; you are not | Heartbeat test alert on a schedule; monitor the mailbox |
| Exception storm | Inbox flood, alert fatigue, domain reputation damage | Rate limiting, dedupe, per-hour cap |
| Exception-path recursion | Cascading failure during incident | Verify guard; test with mailer deliberately broken |
| PII in traces/context | Compliance and data-handling exposure | Inspect payload; redact; restrict recipients |
| Filament/Laravel upgrade breakage | Silent loss of alerting | Version pin, upgrade checklist, fallback path |
| Coverage gap | Fatal errors, DNS failures, or total outage generate no PHP exception at all | Pair with an external uptime check — this package is not availability monitoring |
That last row is the one to socialise with stakeholders: it is an application-error notifier, not monitoring, not uptime, not incident response. Mis-set expectations here are more expensive than the package.
Ramp-up. Effectively zero for the installing engineer; roughly fifteen minutes for on-call to learn what arrives, who receives it, and what action is expected. The onboarding artefact that matters is the runbook, not the docs.
Verdict. Conditional pilot. Worth one to two days in a small-to-mid Filament monolith as a stopgap alerting channel, provided it is rate-limited, production-gated, routed to a team alias, and explicitly framed as complementary to — not a substitute for — real observability. Not worth adopting as a platform bet, and not worth adopting at all in a codebase that already has Sentry, Flare, or Nightwatch without a clear reason to add a second, weaker channel.
How can I help you explore Laravel packages today?