PHPackages                             dits-sa/reqdesk-filament-widget - 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. [Utility &amp; Helpers](/categories/utility)
4. /
5. dits-sa/reqdesk-filament-widget

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

dits-sa/reqdesk-filament-widget
===============================

Production-ready Filament v4/v5 plugin for the Reqdesk support widget — inject, configure and HMAC-sign the widget from inside your Filament panel.

v1.6.0(2mo ago)013MITPHPPHP ^8.2

Since Apr 23Pushed 2mo agoCompare

[ Source](https://github.com/dits-sa/reqdesk-filament-widget)[ Packagist](https://packagist.org/packages/dits-sa/reqdesk-filament-widget)[ Docs](https://github.com/dits-sa/reqdesk-filament-widget)[ RSS](/packages/dits-sa-reqdesk-filament-widget/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (10)Dependencies (10)Versions (17)Used By (0)

Reqdesk Filament widget
=======================

[](#reqdesk-filament-widget)

[![Latest Version on Packagist](https://camo.githubusercontent.com/ce9db0a1c47fdb93d1775edf3eced22da46e1784342d6676d0cd8c539df9b3c2/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f646974732d73612f7265716465736b2d66696c616d656e742d7769646765742e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/dits-sa/reqdesk-filament-widget)[![Total Downloads](https://camo.githubusercontent.com/a8a83fd9783b54f047b8c2d4e30ef09d1970660928cc59c2e5ed4a94318ec394/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f646974732d73612f7265716465736b2d66696c616d656e742d7769646765742e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/dits-sa/reqdesk-filament-widget)[![License](https://camo.githubusercontent.com/ce4d5221169d807e9d3a58fa7d228eff2a140b2e9a74ff11a499800d5de4fd82/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f646974732d73612f7265716465736b2d66696c616d656e742d7769646765742e7376673f7374796c653d666c61742d737175617265)](LICENSE.md)

Drop the Reqdesk support widget into any Filament v4 or v5 panel, configure every option from a native settings page, and HMAC-sign authenticated Laravel users so they never see a second login.

```
use Reqdesk\Filament\ReqdeskWidgetPlugin;

public function panel(Panel $panel): Panel
{
    return $panel->plugin(ReqdeskWidgetPlugin::make());
}
```

That's the whole wire-up. `REQDESK_API_KEY` + `REQDESK_SIGNING_SECRET` in `.env`, plus the line above, and your admins see the widget already logged in as themselves.

Table of contents
-----------------

[](#table-of-contents)

- [Why this plugin](#why-this-plugin)
- [Requirements](#requirements)
- [60-second quickstart](docs/01-quickstart.md)
- [Configuration reference](docs/02-configuration.md) — every setting, every env var
- [Signed host-app identity](docs/03-identity.md) — how the no-login flow works + custom resolvers
- [Security &amp; threat model](docs/04-security.md)
- [Custom menu actions cookbook](docs/05-custom-actions.md)
- [Multi-panel &amp; multi-tenant](docs/06-multi-panel.md)
- [Troubleshooting](docs/07-troubleshooting.md)
- [Upgrade guide](docs/08-upgrading.md)
- [Contributing](CONTRIBUTING.md)
- [Security policy](SECURITY.md)
- [Changelog](CHANGELOG.md)

Why this plugin
---------------

[](#why-this-plugin)

Laravel teams running Filament already have the information Reqdesk needs in order to trust a user: the session and the user's email. This plugin closes the loop so there's no second login prompt, no user-pasted email form, and no redirect ping-pong — the widget opens straight into the admin's ticket history.

- **One-line registration** on your `PanelProvider`.
- **Render hook injection** into `PanelsRenderHook::BODY_END`, scoped to the panel you register it on. No global script tag, no layout edits.
- **Signed host-app identity by default** — Laravel's authenticated user is HMAC-signed (`sha256={hex}` over `"{ts}.{email}"`) so the widget trusts the email without an SSO round-trip.
- **Swappable resolver** — implement `WidgetUserResolver` when your user model doesn't expose `->email` / `->name` directly.
- **Two-mode auth** — the widget automatically switches between `auth_mode_when_signed` (default `signed`) and `auth_mode_when_anonymous` (default `email`) based on Laravel's session.
- **Full settings page** covering every `ReqdeskWidgetConfig` key across seven tabs.
- **`spatie/laravel-settings` persistence** with encrypted `api_key` and `signing_secret` columns and env-backed first-load defaults.
- **Install + doctor commands** that fail fast on missing env vars and run a non-destructive health check.
- **Strict mode** (`REQDESK_STRICT=true`) promotes missing configuration to a hard exception at boot — great for staging, off by default in production.
- **Arabic and English translations** shipped.

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

[](#requirements)

PackageVersionPHP8.2, 8.3, 8.4Laravel11.28+, 12.xFilament4.x or 5.xspatie/laravel-settings3.4+Laravel 11.0 – 11.27 is supported only on the Filament 4.x lane; Filament 5 requires Laravel 11.28+.

Installation at a glance
------------------------

[](#installation-at-a-glance)

```
composer require dits-sa/reqdesk-filament-widget
php artisan reqdesk-widget:install
```

```
REQDESK_API_KEY=rqd_pk_your_project_key
REQDESK_SIGNING_SECRET=your_server_side_hmac_secret
```

```
->plugin(ReqdeskWidgetPlugin::make())
```

Full walkthrough: [`docs/01-quickstart.md`](docs/01-quickstart.md). The install command runs the package migration non-interactively, so CI / `--no-interaction` deploys land with the settings table populated.

Navigation &amp; placement
--------------------------

[](#navigation--placement)

By default the settings page appears under its own "Reqdesk" group with a lifebuoy icon. Place it under an existing group, pin a sort position, and swap the icon with the fluent builders:

```
use App\Filament\Navigation\NavigationGroup;
use Reqdesk\Filament\ReqdeskWidgetPlugin;

$panel->plugin(
    ReqdeskWidgetPlugin::make()
        ->navigationGroup(NavigationGroup::Support) // string or UnitEnum
        ->navigationSort(60)
        ->navigationIcon('heroicon-o-chat-bubble-left-right') // string or BackedEnum
);
```

Any of the three builders may be omitted; omitted ones keep their existing defaults. The group accepts plain unit enums as well as backed enums, matching Filament's own navigation signature.

Access control
--------------

[](#access-control)

The settings page exposes `api_key` and `signing_secret`, so multi-role panels should gate it. Pass a Gate ability or a closure to `authorize()`:

```
// String ability — pairs with a Gate::define(...) or a Policy
$panel->plugin(
    ReqdeskWidgetPlugin::make()->authorize('reqdesk.settings.manage')
);

// Closure — receives the current user (nullable)
$panel->plugin(
    ReqdeskWidgetPlugin::make()->authorize(
        fn ($user): bool => $user?->isAdmin() ?? false,
    )
);
```

When `authorize()` is not called the page stays accessible (unchanged default). `bezhansalleh/filament-shield` consumers can leave `authorize()` unset and rely on Shield's per-page permission auto-discovery — `ReqdeskSettings` participates in `shield:generate` like any other Filament page.

Multi-panel usage
-----------------

[](#multi-panel-usage)

Each `->plugin(ReqdeskWidgetPlugin::make())` call produces its own plugin instance, and the render hook is scoped to the registering panel's id. Two panels, two independent configurations:

```
// AdminPanelProvider
$panel->plugin(ReqdeskWidgetPlugin::make()->navigationGroup('Support'));

// AgentPanelProvider — widget only, no settings page
$panel->plugin(
    ReqdeskWidgetPlugin::make()
        ->registerSettingsPage(false)
);
```

The widget is injected only into the panels that register the plugin.

See [`docs/06-multi-panel.md`](docs/06-multi-panel.md) for the deep dive.

Custom guards &amp; identity middleware
---------------------------------------

[](#custom-guards--identity-middleware)

The signed-identity refresh endpoint is protected by `web,auth` by default. Consumers on a non-default guard (for example a Filament panel authenticated through `auth:agent` or a portal using a custom session driver) can override the middleware stack via env:

```
# Single non-default guard
REQDESK_IDENTITY_MIDDLEWARE=web,auth:agent

# Multiple guards — auth middleware tries each left-to-right
REQDESK_IDENTITY_MIDDLEWARE=web,auth:web,agent
```

The endpoint itself can also be moved:

```
REQDESK_IDENTITY_ENDPOINT=/support/identity
```

Both values are also exposed through `config/reqdesk-widget.php` under the `identity` key if you prefer a published config over env.

See [`docs/03-identity.md`](docs/03-identity.md) for the full identity flow.

License
-------

[](#license)

MIT — see [LICENSE.md](LICENSE.md).

###  Health Score

40

—

FairBetter than 86% of packages

Maintenance84

Actively maintained with recent releases

Popularity5

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity55

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

16

Last Release

83d ago

Major Versions

v0.1.0 → v1.0.02026-04-23

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/33623537?v=4)[A.D Adams](/maintainers/adams100111)[@adams100111](https://github.com/adams100111)

![](https://avatars.githubusercontent.com/u/155188377?v=4)[dits-sa](/maintainers/dits-sa)[@dits-sa](https://github.com/dits-sa)

---

Top Contributors

[![adams100111](https://avatars.githubusercontent.com/u/33623537?v=4)](https://github.com/adams100111 "adams100111 (17 commits)")

---

Tags

laravelwidgetsupportfilamentfilament-pluginhelpdeskreqdesk

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/dits-sa-reqdesk-filament-widget/health.svg)

```
[![Health](https://phpackages.com/badges/dits-sa-reqdesk-filament-widget/health.svg)](https://phpackages.com/packages/dits-sa-reqdesk-filament-widget)
```

###  Alternatives

[rawilk/profile-filament-plugin

Profile &amp; MFA starter kit for filament.

3914.8k](/packages/rawilk-profile-filament-plugin)[finity-labs/fin-mail

A powerful email template manager and composer for Filament with dynamic token replacement, template versioning, and inline email sending.

284.8k2](/packages/finity-labs-fin-mail)[croustibat/filament-jobs-monitor

Background Jobs monitoring like Horizon for all drivers for FilamentPHP

274333.4k9](/packages/croustibat-filament-jobs-monitor)[stephenjude/filament-jetstream

A Laravel starter kit built with Filament inspired by Jetstream.

17760.2k3](/packages/stephenjude-filament-jetstream)[stephenjude/filament-debugger

About

104162.2k2](/packages/stephenjude-filament-debugger)[tapp/filament-form-builder

User facing form builder using Filament components

132.4k5](/packages/tapp-filament-form-builder)

PHPackages © 2026

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