charlielangridge/filament-mail-previewer
A Filament plugin for previewing Laravel mailables right in your admin panel. Browse available mail classes, render each one with sample data, and inspect the HTML and plain-text output before sending—so no more firing off test emails just to see how they look.
Architecture fit
charlielangridge/filament-mail-previewer is a developer/operations-facing tool, not a runtime domain dependency. It plugs into a Filament panel via the standard plugin contract (Plugin interface, getId(), register(), boot()) and adds a page that renders mailables so engineers and QA can inspect rendered output without triggering real sends. Architecturally this places it alongside Laravel Telescope, Horizon, and Debugbar in the "diagnostics and dev-experience" tier — valuable, but it should not be on the critical path of a production request cycle.
v0.2.1 does not change that positioning. The release is a compatibility-and-correctness release: expanded Testbench range and CI matrix for Laravel 13, a config-loading fix, and new boot/registration test coverage. Notably, the Filament plugin API and page registration behaviour are explicitly preserved — meaning this is a non-breaking patch from an integration standpoint.
Integration feasibility
Feasible with low effort. The expected path is composer require --dev, then adding the plugin to a panel provider's ->plugin() chain. The config fix (loading config/mail-previewer.php correctly while keeping a fallback for the previous config key lookup) is the one item that touches integrators: any project that published the earlier config file or referenced the old key in its own code will keep working, but is now on a deprecation-adjacent path.
The Laravel 13 claim deserves a caveat. Expanding the Testbench range and CI matrix signals intent and evidence of green builds against a forward version, but "support coverage" for an unreleased or newly released framework major should be treated as a claim to verify in our matrix, not a guarantee. Confirm which Filament major(s) are exercised in CI — the notes mention Laravel coverage, not Filament v3/v4 coverage, which is the compatibility axis that actually matters for a Filament plugin.
Technical risk
~0.2.1 and review each release rather than floating ^0.2.Key questions
illuminated/Laravel version constraints that would block adoption on our current 11/12 baseline while we evaluate 13?Stack fit Best fit is an existing Filament-based admin panel on Laravel 11/12 with PHP 8.2+, where the team already accepts Filament plugins as a composition mechanism. It is a poor fit for non-Filament Laravel apps (the UI surface is the product), and redundant where teams already have a mail-preview workflow via a local mail catcher plus Blade snapshot tests.
Migration path This is a greenfield adoption — no prior assessment exists and no prior install is assumed. Sequence:
require-dev, ~0.2.1 pinned) and register the plugin inside the local/staging panel provider only, not the shared PanelProvider used across environments.mail-previewer); do not rely on the legacy-key fallback for new work. Treat the fallback purely as insurance for any existing reference in our code.Compatibility Two axes must be confirmed independently: Laravel (11/12 today, 13 aspirational) and Filament (the version our panel runs). v0.2.1 speaks to the first axis only. Additionally confirm PHP constraint overlap with our runtime and that the package does not require a Filament version we have not yet upgraded to — a common source of transitive constraint conflicts in Filament plugin ecosystems.
Sequencing Adopt now, in a sandbox panel, on our current Laravel version. Do not couple this adoption to a Laravel 13 or Filament major upgrade; if we later move to Laravel 13, this package is a low-risk passenger rather than a blocker. Defer any production/staging enablement until the authorization question is answered, and re-review at v0.3.x or first 1.0 RC.
Maintenance Low ongoing effort for us: dev-only, no runtime data path, no migrations, no queue workers. The maintenance burden is concentrated in upgrade tracking — each Laravel and Filament major requires a corresponding package release, and we inherit the maintainer's adoption lag. Budget a compatibility check per framework upgrade cycle.
Support
Single-maintainer, community-supported package with no commercial backing. Expect GitHub-issue-level support. Mitigation: keep the integration shallow enough that removal is a one-line panel-provider change plus composer remove. The added boot/plugin-registration tests in v0.2.1 modestly improve confidence in the package's own correctness, but they are the maintainer's tests, not a support contract.
Scaling Effectively a non-issue. The page renders on demand in a developer context; there is no throughput, storage, or concurrency profile worth modelling. The only "scaling" concern is organizational: as more engineers and QA rely on it in staging, access control and the fidelity of previewed data (seed vs. real records) become the governing constraints. Large mailables with heavy inline assets may render slowly, but that is a developer-experience annoyance, not a capacity risk.
Failure modes
config('mail-previewer.*') resolves as expected.Ramp-up Minimal. A Laravel developer familiar with Filament panel configuration can install, publish config, and register the plugin in well under an hour. Documentation reading is the bulk of it. The genuine ramp-up cost is procedural rather than technical: establishing the convention that this plugin lives only in local/staging providers and sits behind an authorization gate, so that the pattern is copied correctly by the next engineer rather than re-derived. Recommend a short internal note capturing that convention alongside the pinned version and the config-key decision.
How can I help you explore Laravel packages today?