PHPackages                             banulakwin/filament-pwa - 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. [Admin Panels](/categories/admin)
4. /
5. banulakwin/filament-pwa

ActiveLibrary[Admin Panels](/categories/admin)

banulakwin/filament-pwa
=======================

Filament PWA, web push, mobile bottom nav styling, and global search modal integration for Laravel.

1.0.1(3w ago)00MITPHPPHP ^8.4CI passing

Since May 17Pushed 3w agoCompare

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

READMEChangelogDependencies (11)Versions (3)Used By (0)

Filament PWA (`banulakwin/filament-pwa`)
========================================

[](#filament-pwa-banulakwinfilament-pwa)

[![Latest Version on Packagist](https://camo.githubusercontent.com/e83020161edab25942555c7c2a745b8c8d027955acc31bc707b92d27e6c232e5/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f62616e756c616b77696e2f66696c616d656e742d7077612e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/banulakwin/filament-pwa)[![Tests](https://github.com/banulalakwindu/filament-pwa/actions/workflows/tests.yml/badge.svg)](https://github.com/banulalakwindu/filament-pwa/actions/workflows/tests.yml)[![Total Downloads](https://camo.githubusercontent.com/d8eccf2f5c2a01bb122299118d49fc20f5435f9f72e346eb8bb7f819008df822/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f62616e756c616b77696e2f66696c616d656e742d7077612e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/banulakwin/filament-pwa)[![License](https://camo.githubusercontent.com/942e017bf0672002dd32a857c95d66f28c5900ab541838c6c664442516309c8a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75652e7376673f7374796c653d666c61742d737175617265)](LICENSE)

Filament panel PWA support: web push (VAPID + service worker), app badge sync, deduplicated admin broadcasts, mobile global search trigger, navigation loading overlay, and optional mobile bottom navigation view override.

---

Requirements
------------

[](#requirements)

- PHP `^8.4`
- Laravel `^11.0|^12.0|^13.0`
- Filament `^5.0`

---

Installation
------------

[](#installation)

```
composer require banulakwin/filament-pwa
```

Or run the install command:

```
php artisan filament-pwa:install
```

This publishes config, service worker, webmanifest, and mobile bottom nav override.

---

Configure
---------

[](#configure)

### 1. VAPID Keys

[](#1-vapid-keys)

Set in `.env`:

```
VAPID_SUBJECT=mailto:support@example.com
VAPID_PUBLIC_KEY=your_public_key
VAPID_PRIVATE_KEY=your_private_key
```

Or use `FILAMENT_PWA_*` prefixed overrides. Values also merge from `config/services.php` `vapid` if present.

### 2. Badge Count

[](#2-badge-count)

Implement `Banulakwin\FilamentPwa\Contracts\BadgeCountProvider` and set:

```
FILAMENT_PWA_BADGE_COUNT_PROVIDER=App\Services\MyBadgeCountProvider
```

### 3. Recipients

[](#3-recipients)

Default strategy is `config`:

```
FILAMENT_PWA_NOTIFIABLE_MODEL=App\Models\User
```

Set `recipient_criteria.where` in config (e.g. `['is_admin' => true]`).

Alternatively use `recipient_strategy=query` with `DefinesWebPushRecipientsQuery` on your model, or bind a custom `WebPushRecipientResolver`.

### 4. Notifiable Model

[](#4-notifiable-model)

Add the trait to your user model:

```
use Banulakwin\FilamentPwa\Concerns\HasWebPushSubscriptions;

class User extends Authenticatable
{
    use HasWebPushSubscriptions;
}
```

### 5. Panel Registration

[](#5-panel-registration)

```
use Banulakwin\FilamentPwa\FilamentPwaPlugin;

->plugins([
    FilamentPwaPlugin::make(),
])
```

### 6. Optional panel plugins

[](#6-optional-panel-plugins)

These are **not** required by Composer; install them in your app when you use the related features:

```
composer require charrafimed/global-search-modal hammadzafar05/mobile-bottom-nav
```

```
use CharrafiMed\GlobalSearchModal\GlobalSearchModalPlugin;
use HammadZafar05\MobileBottomNav\MobileBottomNav;

->plugins([
    FilamentPwaPlugin::make(),
    GlobalSearchModalPlugin::make(),
    MobileBottomNav::make()->items([/* ... */]),
])
```

Run `php artisan filament-pwa:install` (or publish tag `filament-pwa-mobile-bottom-nav`) for the glass bottom nav Blade override.

### 7. PWA appearance

[](#7-pwa-appearance)

```
FILAMENT_PWA_THEME_COLOR=#ffffff
FILAMENT_PWA_BACKGROUND_COLOR=#ffffff
FILAMENT_PWA_APPLE_STATUS_BAR_STYLE=default
```

After `filament-pwa:install`, edit `public/favicon/admin-site.webmanifest` so `theme_color` / `background_color` match your brand. The status bar meta tag reads from config automatically.

---

Sending Pushes
--------------

[](#sending-pushes)

```
use Banulakwin\FilamentPwa\WebPushBroadcaster;

WebPushBroadcaster::send('Title', 'Body', [
    'url' => '/admin/some-resource/1',
    'type' => 'contact-request',
    'priority' => 'normal',
    'dedupeKey' => 'contact-request:' . $id,
    'dedupeTtlSeconds' => 300,
]);
```

---

Routes
------

[](#routes)

The package registers `admin/api` routes (configurable via `route_prefix`):

RouteMethodDescription`filament-pwa.badge-count`GETReturns badge count JSON`filament-pwa.push-subscription.store`POSTRegister push subscription`filament-pwa.push-subscription.destroy`DELETERemove push subscription---

Publish Tags
------------

[](#publish-tags)

TagDescription`filament-pwa-config`Config file`filament-pwa-assets`Service worker + webmanifest`filament-pwa-views`Blade views`filament-pwa-mobile-bottom-nav`Mobile bottom nav override---

Testing
-------

[](#testing)

```
composer test          # Run PHPUnit
composer pint          # Fix code style
composer phpstan       # Static analysis
composer quality       # Run all (pint + phpstan + test)
```

---

Changelog
---------

[](#changelog)

See [CHANGELOG.md](CHANGELOG.md) for details.

---

Contributing
------------

[](#contributing)

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/your-feature`)
3. Run `composer quality` to ensure tests and style pass
4. Commit and push
5. Open a pull request

---

Package layout (reference)
--------------------------

[](#package-layout-reference)

```
src/
  FilamentPwaPlugin.php
  FilamentPwaServiceProvider.php
  WebPushBroadcaster.php
  Concerns/
    HasWebPushSubscriptions.php
  Console/
    InstallFilamentPwaCommand.php
  Contracts/
    BadgeCountProvider.php
    WebPushRecipientResolver.php
    DefinesWebPushRecipientsQuery.php
  Http/Controllers/
    BadgeCountController.php
    PushSubscriptionController.php
  Models/
    PushSubscription.php
  Notifications/
    WebPushAlertNotification.php
    Channels/
      MinishlinkWebPushChannel.php
  Resolvers/
    ConfigWebPushRecipientResolver.php
config/
  filament-pwa.php
database/
  migrations/
    2026_04_17_150000_create_push_subscriptions_table.php
resources/
  stubs/
    sw.js
    admin-site.webmanifest
  views/
    components/pwa-head.blade.php
    hooks/mobile-global-search-trigger.blade.php
    partials/*.blade.php
    vendor/mobile-bottom-nav/bottom-navigation.blade.php

```

---

License
-------

[](#license)

MIT — see [LICENSE](LICENSE) for details.

###  Health Score

40

—

FairBetter than 86% of packages

Maintenance95

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity52

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 ~0 days

Total

2

Last Release

22d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/64958389?v=4)[Banula Lakwindu](/maintainers/banulalakwindu)[@banulalakwindu](https://github.com/banulalakwindu)

---

Top Contributors

[![banulalakwindu](https://avatars.githubusercontent.com/u/64958389?v=4)](https://github.com/banulalakwindu "banulalakwindu (2 commits)")

---

Tags

laraveladminfilamentpwaWeb Push

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StyleLaravel Pint

Type Coverage Yes

### Embed Badge

![Health badge](/badges/banulakwin-filament-pwa/health.svg)

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

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3325.1M337](/packages/psalm-plugin-laravel)[laravel/cashier

Laravel Cashier provides an expressive, fluent interface to Stripe's subscription billing services.

2.5k28.4M134](/packages/laravel-cashier)[spatie/laravel-health

Monitor the health of a Laravel application

87311.3M149](/packages/spatie-laravel-health)[laravel/ai

The official AI SDK for Laravel.

9782.1M153](/packages/laravel-ai)[api-platform/laravel

API Platform support for Laravel

59156.3k10](/packages/api-platform-laravel)[fleetbase/core-api

Core Framework and Resources for Fleetbase API

1232.2k16](/packages/fleetbase-core-api)

PHPackages © 2026

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