qalainau / filament-inbox
Email-like inbox messaging plugin for Filament v5 — threads, starring, trash, forwarding, read receipts, and multi-tenancy out of the box.
Requires
- php: ^8.2
- filament/filament: ^5.0
- spatie/laravel-package-tools: ^1.14
Requires (Dev)
- laravel/pint: ^1.0
- orchestra/testbench: ^10.0
- pestphp/pest: ^4.0
- pestphp/pest-plugin-laravel: ^4.0
- pestphp/pest-plugin-livewire: ^4.0
README
Email-like inbox messaging plugin for Filament v5. Add a complete internal messaging system to your admin panel — inbox, sent, starred, trash, threading, forwarding, read receipts, and more.
Screenshots
| Inbox | Thread View |
|---|---|
![]() |
![]() |
| Compose Message | Sent Messages |
|---|---|
![]() |
![]() |
Features
- Inbox, Sent, Starred, Trash — Full Gmail-style navigation
- Message Threading — Reply and Reply All with threaded conversations
- Message Forwarding — Forward messages with original headers
- Read Receipts — Per-recipient read tracking with status indicators
- Star Messages — Mark important messages for quick access
- Rich Text Editor — Compose messages with formatting and file attachments
- Bulk Actions — Mark as read, move to trash in batch
- Search & Filters — Filter by sender, unread, starred
- Database Notifications — Filament native notifications on new messages
- Stats Widget — Unread, total, and starred message counts
- Dark Mode — Full dark mode support
- Multi-tenancy — Filament native tenant scoping
- Configurable User Model — Works with any authenticatable model
- Laravel Events — Hook into MessageSent, MessageRead, MessageStarred, MessageTrashed, MessageRestored, MessageForwarded
- Test Factories — Message and MessageRecipient factories included
- i18n — English, Japanese, Spanish, French, Portuguese (BR), Chinese (Simplified), Korean, German
Requirements
- PHP 8.2+
- Laravel 12+
- Filament v5
Installation
composer require qalainau/filament-inbox
Run the notifications migration (required for Filament database notifications):
php artisan make:notifications-table php artisan migrate
Add the HasInbox trait to your User model:
use FilamentInbox\Concerns\HasInbox; class User extends Authenticatable { use HasInbox; }
Register the plugin in your Filament panel. databaseNotifications() is required to enable Filament's notification system:
use FilamentInbox\FilamentInboxPlugin; public function panel(Panel $panel): Panel { return $panel ->databaseNotifications() ->plugin(FilamentInboxPlugin::make()); }
Note:
databaseNotifications()requires thenotificationstable. If you see an error about a missing table, runphp artisan make:notifications-table && php artisan migrate.
Configuration
Publish the config file:
php artisan vendor:publish --tag=filament-inbox-config
// config/filament-inbox.php return [ // Custom user model (defaults to auth provider model) 'user_model' => null, // Custom users table name (auto-detected from model) 'users_table' => null, // Tenant-users relationship method on tenant model // Auto-detects 'members' or 'users' if null 'tenant_users_relationship' => null, ];
Multi-tenancy
Filament Inbox works with Filament's built-in tenancy. When tenancy is active:
- Messages are scoped to the current tenant
- Recipient options are limited to tenant members
- Tenant is automatically attached to new messages
No additional configuration is needed if your tenant model has a members() or users() relationship.
Events
Listen to messaging events in your EventServiceProvider or with Event::listen():
| Event | Dispatched When |
|---|---|
MessageSent |
A message or reply is sent |
MessageRead |
A message is marked as read |
MessageStarred |
A message is starred or unstarred |
MessageTrashed |
A message is moved to trash |
MessageRestored |
A message is restored from trash |
MessageForwarded |
A message is forwarded |
Testing
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
License
The MIT License (MIT). Please see License File for more information.



