A powerful and customizable chat system built for Laravel applications. This package supports private and group chats, media sharing, chat settings, user roles, activity messages, and more.
- Dual-mode (standard/universal) design.
- Private & Group Chat Support.
- Message types: message, activity
- User roles: admin, user
- Group settings (all permissions control)
- Message read/unread tracking
- Activity messages on: group creation, joins, leaves, settings changes
- Media upload support
- Configurable user info: name, avatar
- Extendable & clean architecture (Service-based)
composer require metafroliclabs/laravel-chat
php artisan larachat:install
Or, manually publish configuration file:
php artisan vendor:publish --tag=chat-config
Run migrations:
php artisan migrate
Make sure storage is linked:
php artisan storage:link
Customize settings in config/chat.php
:
You can switch between standard
(private/group chat) and universal
(global chat):
'type' => 'standard',
Also in universal type, you can enable/disable modules:
'features' => [
'reactions' => true,
'views' => false
],
You can also enable or disable pagination:
'pagination' => true,
Automatically generated for:
- Group creation
- User added/removed
- Group settings updated
- User left the chat
You can disable all activity messages globally:
'message' => [
'enable_activity' => false,
]
Define how user information (name and avatar) is retrieved:
'user' => [
'model' => \App\Models\User::class, // Default user model
'name_cols' => ['first_name', 'last_name'], // Columns to build full name
'image_col' => 'avatar', // Column for profile picture
'enable_image_url' => true, // If true, image will be URL
]
You can control how many chats a user can create and how many messages they can send per minute. These limits help prevent spam and abuse.
'rate_limits' => [
'chat_creation_per_minute' => 20, // Max 20 chats per user per minute
'messages_per_minute' => 40 // Max 40 messages per user per minute
],
- Limits are enforced per authenticated user (or IP if unauthenticated).
- You can adjust these values to suit your application's needs.
Laravel Chat dispatches events to help you hook into the system and extend functionality such as notifications, logging, analytics, and more.
Dispatched when a message is successfully sent or forwarded in a chat.
public MessageSent(Chat $chat, array $messages, User $sender, array $receiver)
php artisan make:listener HandleMessageSent
namespace App\Listeners;
use Metafroliclabs\LaravelChat\Events\MessageSent;
use Illuminate\Contracts\Queue\ShouldQueue;
class HandleMessageSent implements ShouldQueue
{
public function handle(MessageSent $event)
{
$chat = $event->chat;
$messages = $event->messages;
$sender = $event->sender;
$receivers = $event->receivers;
// Example: Send push notifications or log activity
}
}
In your app/Providers/EventServiceProvider.php
:
protected $listen = [
Metafroliclabs\LaravelChat\Events\MessageSent::class => [
App\Listeners\HandleMessageSent::class,
],
];
Then run:
php artisan event:cache
You can customize how chat lists are filtered based on user attributes (like gender, role, etc.).
Create a custom filter class in your project and extend the base filter class provided by Laravel Chat:
namespace App\Filters;
use Metafroliclabs\LaravelChat\Filters\BaseFilter;
class ChatUserFilter extends BaseFilter
{
protected function applyUserFilters($query): void
{
// Example: Filter users by gender
if ($this->request->filled('gender')) {
$query->where('gender', $this->request->gender);
}
// You can add more filters here...
}
protected function hasActiveUserFilters(): bool
{
return $this->request->filled('gender');
}
}
In your config/chat.php
file, register your custom filter class:
'filter' => \App\Filters\ChatUserFilter::class,
All routes are prefixed by the config value chat.prefix
(default: chat) and use the chat.middleware
middleware group.
Middleware: auth:sanctum
is required.
Method | Endpoint | Description |
---|---|---|
GET | /all/list |
Get all chats for the user |
GET | /unread/list |
Get all unread chats |
GET | /unread/count |
Get unread chat count |
Method | Endpoint | Description |
---|---|---|
POST | /create |
Create private chat |
POST | /create/group |
Create group chat |
POST | /{id}/update |
Update chat name/image/settings |
POST | /{id}/delete |
Delete a chat |
POST | /{id}/leave |
Leave group chat |
POST | /{id}/mute |
Mute/unmute chat |
GET | /{id} |
Get chat detail |
Method | Endpoint | Description |
---|---|---|
GET | /{id}/users |
Get all users in the chat |
POST | /{id}/users/add |
Add users to a group |
POST | /{id}/users/remove |
Remove users |
POST | /{id}/users/{uid}/admin |
Promote/demote user to/from admin |
Method | Endpoint | Description |
---|---|---|
GET | /{id}/messages |
Get all messages in a chat |
POST | /{id}/messages |
Send a new message |
POST | /{id}/messages/forward |
Forward messages |
POST | /{id}/messages/{mid}/update |
Update a message |
POST | /{id}/messages/{mid}/delete |
Delete a message |
Method | Endpoint | Description |
---|---|---|
GET | /{id}/messages/{mid}/likes |
Get users who liked a message |
POST | /{id}/messages/{mid}/likes |
Like/unlike a message |
GET | /{id}/messages/{mid}/views |
Get users who viewed a message |
POST | /{id}/messages/{mid}/views |
Mark message as viewed |
Some endpoints are rate limited to prevent abuse:
- Chat Creation (
/create
,/create/group
): Limited tochat_creation_per_minute
(default: 20) per user per minute. - Message Sending (
/{id}/messages
,/{id}/messages/forward
): Limited tomessages_per_minute
(default: 40) per user per minute.
If a user exceeds these limits, a 429 Too Many Requests
response will be returned by the API.
This project is licensed under the MIT License.