tomatophp/filament-pwa
Filament PWA adds progressive web app support to your FilamentPHP panel, with install prompts, manifest and service worker settings managed right from the panel, plus a Blade directive for non-Filament pages.
Architecture fit. For a team already standardized on FilamentPHP, this is close to the ideal shape: it is a declarative plugin, not a framework. It hooks into panel bootstrapping through a single FilamentPWAPlugin::make() registration, exposes the entire configuration surface — app name, icons, manifest, theme, offline behavior — through a Filament settings page, and offers an @filamentPWA Blade directive so non-panel surfaces (login, public marketing pages) get installability too. That last detail is the real differentiator versus Filament-only PWA plugins: the install prompt and manifest are usually forgotten exactly where unauthenticated users first arrive. The product consequence is that post-launch branding and rollout changes become operable by non-engineers — no deploy, no ticket, no engineering time. Draw the scope boundary explicitly in any brief: this delivers installability plus basic asset caching for authenticated admin panels. It is not a PWA platform. No background sync, no push notifications, no write queue, no multi-tenant manifest scoping.
Integration feasibility. Mechanically simple, transitively non-trivial. The path is composer require, publish the Spatie settings migrations, filament-settings-hub:install, filament-pwa:install, then one line in AdminPanelProvider. The real cost is dependency surface: spatie/laravel-settings, the TomatoPHP settings hub, a new settings table, a publishable config, and a filesystem-disk decision for manifest and icon assets (added in v5). Budget a half-day spike producing a working "Add to Home Screen" proof on a real device, plus explicit time for what the package does not solve: service-worker debugging in DevTools, CDN and cache-header sanity, and an HTTPS-terminated staging origin. One engineer-day for a single panel is a defensible estimate; more if multi-panel scoping or custom asset storage is in scope. If we already run our own settings mechanism, this introduces a parallel one — the honest alternative is a thin hand-rolled service worker, and that buy-vs-build call should be made consciously rather than by default.
Technical risk. Four items belong in the go/no-go review:
v4 branch. This dependency moves when Filament moves. That is a calendar entry, not a surprise.allowPWASettings(false) is per-panel, and v5 fixed both duplicate settings-hub registration and per-panel settings bleed. Multi-panel and multi-tenant installs are precisely where that class of bug recurs — re-verify on our topology rather than trusting the changelog.Key questions.
v4 branch. It is the biggest gate in this evaluation.Stack fit. Laravel + Filament, PHP 8.2+, Spatie settings, standard asset pipeline. It fits cleanly if we already run, or are willing to adopt, the TomatoPHP settings hub; otherwise we are adding a second settings system for one feature. Publish config, views, and translations on day one so we own the override surface instead of depending on upstream defaults — this is also what makes an eventual fork viable. Register the plugin behind a feature flag and a per-panel guard from the start, using v5's allowPWASettings(false) as designed rather than bolting it on after a problem appears.
Migration path. Additive and reversible, which is the strongest thing about it. It creates a settings table and public assets; it touches no existing schema, routes, or models. The rollback story is "disable the plugin and drop the settings table." For a pilot inside a system of record, that matters more than feature depth — a failed experiment costs a day, not a quarter.
Compatibility. Pin explicitly (^5.0 on Filament v5, v4 branch otherwise) and record the exact Filament / Laravel / PHP combination in the pilot document. Run the compatibility check as a named task against our real deployment, not against the README — with a changelog made of breaking ports, a minor-version surprise is a realistic scenario, not a tail risk. Confirm the asset disk behaves with our storage and CDN configuration before committing to icons-from-the-panel as an operator workflow.
Sequencing.
Maintenance. Low steady-state effort with one predictable, non-optional tax: this package tracks Filament majors, so every Filament upgrade is a paired upgrade here. Budget one to two engineer-days per Filament major for re-validation, and carry the pinned version in the upgrade backlog rather than treating it as set-and-forget. The compensating win is real: settings-driven branding, icons, and prompts move day-to-day changes off the engineering queue entirely. Because it is MIT with a single maintainer, keep the published config and views in our repo so a fork stays a realistic fallback rather than a rewrite.
Support. No SLA, no contract, no support channel — GitHub issues and a small contributor pool. Acceptable for an internal admin capability adopted as a tactical pilot; not acceptable as a stated dependency for a system of record. Say exactly that to stakeholders, and name an internal owner (platform team) so "who fixes the service worker?" has an answer before launch. Community translations exist (e.g., pt_BR) but coverage is uneven — verify our locales render rather than assuming.
Scaling. Scales well along one axis and poorly along another. More users, more panels, larger icon sets are all fine; the artifacts are static and cacheable. What does not scale is scope: no per-tenant manifest scoping, no advanced offline patterns, no push. If the roadmap later requires tenant-branded manifests, background sync, or notifications, those are new builds, not configuration changes. Document that limit in the pilot brief — discovering it mid-sprint is the expensive path.
Failure modes. Ranked by what actually bites:
Ramp-up. Fast for anyone who has registered a Filament plugin — hours, not days. Operators need a short written guide (where the settings live, what each field does to the installed app, how to force an update on a device). Engineering needs the runbook plus the security test procedure, because the security test is the artifact that keeps this safe across future Filament upgrades.
How can I help you explore Laravel packages today?