erag/laravel-pwa
Laravel PWA adds progressive web app support to Laravel 8–13 projects: auto-generated manifest and service worker, a configurable add-to-home-screen prompt, and Blade directives. Works with Blade, Livewire, Vue 3, and React; requires HTTPS.
@PwaHead + @RegisterServiceWorkerScript are two lines in a layout, which makes "add install prompt" a cheap A/B-testable lever. Instrument installs and repeat-visit rate, not just deployment success, before deciding whether to invest further.PWA::update() facade plus PWA::processLogo() allow per-account app name, theme color, and icon at runtime. Relevant if you sell branded instances and want each tenant's install to look like their app, not yours.Adopt when:
public/ is writable and persistent across deploys (note: containerized/serverless or read-only-filesystem deployments break the manifest-update and logo-upload features — verify this before committing).public/logo.png convention, or you accept dynamic icon management through the provided upload path.Look elsewhere when:
vite-plugin-pwa instead; this is a thin convenience layer, not a service-worker framework.NOASSERTION despite an MIT badge in the README. Confirm the actual license text before it enters your dependency tree.To executives: This is a low-cost, reversible bet that makes our existing web app installable to a home screen and usable offline in degraded form — no app-store review, no second codebase, no per-download fees. Cost is roughly a day or two of engineering, delivered in an existing sprint. Success is measured by install rate, repeat-visit frequency among installers, and a drop in offline error reports; if those numbers don't move, we remove two Blade directives and a Composer dependency. It answers the "do we need a native app?" question with data instead of a workshop.
To engineering: One composer require, one Artisan install command, two Blade directives in the main layout, and config in config/pwa.php. No build-pipeline changes, no front-end framework coupling (works with Blade, Livewire, Vue 3, React), and it tracks Laravel versions through 13.x with frequent patch releases. Known constraints to design around: the icon filename is fixed to logo.png, the manifest and logo writes need a writable public/, HTTPS is mandatory for service workers, and the service-worker scope is intentionally shallow. Pin the version, wrap the directives in a feature flag, and fork if the maintainer goes quiet — the surface area is small enough that a fork is a maintenance afternoon, not a project.
How can I help you explore Laravel packages today?