wirelabs / fluxchat
A beautiful Laravel Livewire chat component built with Flux UI, supporting real-time messaging with Reverb.
Requires
- php: ^8.3
- laravel/framework: ^12.0
- livewire/flux-pro: ^2.0
- livewire/livewire: ^3.0
Requires (Dev)
- orchestra/testbench: ^9.0
- phpunit/phpunit: ^11.0
This package is not auto-updated.
Last update: 2025-09-08 18:48:37 UTC
README
A beautiful Laravel Livewire chat component built with Flux UI, supporting both standard polling and real-time messaging with Laravel Reverb.
โจ Features
- ๐จ Beautiful UI - Built with Flux UI components
- โก Real-time Support - Optional Laravel Reverb integration
- ๐ Fallback Polling - Works without WebSocket server
- ๐ Multi-language - English and Norwegian included
- ๐ฑ Responsive Design - Works on all devices
- ๐ง Highly Configurable - Customize everything
- ๐ Easy Installation - One command setup
๐ Requirements
- PHP 8.3+
- Laravel 12.0+
- Livewire 3.0+
- Flux UI Pro 2.0+
๐ Installation
Install via Composer:
composer require wirelabs/fluxchat
Run the installation command:
php artisan fluxchat:install
Run migrations:
php artisan migrate
๐ฏ Basic Usage
Add the component to your Blade view:
<livewire:fluxchat :contacts="$contacts" />
Where $contacts
is a collection of users/contacts:
// In your controller $contacts = User::where('id', '!=', auth()->id())->get(); return view('chat', compact('contacts'));
โ๏ธ Configuration
Publish the config file:
php artisan vendor:publish --tag="fluxchat-config"
Basic Configuration
// config/fluxchat.php return [ 'realtime' => [ 'enabled' => env('FLUXCHAT_REALTIME_ENABLED', false), 'auto_refresh_interval' => env('FLUXCHAT_AUTO_REFRESH', 5), // seconds ], 'ui' => [ 'theme' => env('FLUXCHAT_THEME', 'dark'), 'avatar_size' => env('FLUXCHAT_AVATAR_SIZE', 'sm'), ], ];
Environment Variables
Add to your .env
file:
# Standard mode (polling every 5 seconds) FLUXCHAT_REALTIME_ENABLED=false FLUXCHAT_AUTO_REFRESH=5 # Real-time mode (requires Reverb) FLUXCHAT_REALTIME_ENABLED=true BROADCAST_CONNECTION=reverb
๐ฅ Real-time Messaging
FluxChat supports two modes:
1. Standard Mode (Default)
- Polls for new messages every 5 seconds
- No additional server required
- Works everywhere
2. Real-time Mode
- Instant message delivery via WebSockets
- Requires Laravel Reverb
- Better user experience
To enable real-time messaging:
- Install and configure Laravel Reverb:
php artisan install:broadcasting
- Update your
.env
:
FLUXCHAT_REALTIME_ENABLED=true BROADCAST_CONNECTION=reverb
- Start the Reverb server:
php artisan reverb:start
๐จ Customization
Custom Contact Model
<livewire:fluxchat :contacts="$contacts" contact-model="App\Models\Contact" contact-name-field="full_name" :contact-search-fields="['name', 'email']" />
Custom Styling
Publish the views to customize:
php artisan vendor:publish --tag="fluxchat-views"
Views will be published to resources/views/vendor/fluxchat/
.
Language Customization
Publish language files:
php artisan vendor:publish --tag="fluxchat-lang"
Add your own translations in resources/lang/vendor/fluxchat/
.
๐ Advanced Usage
Programmatic Control
// In your Livewire component use Wirelabs\FluxChat\Models\Conversation; use Wirelabs\FluxChat\Models\Message; // Create a conversation $conversation = Conversation::create([ 'type' => 'private', 'is_group' => false, ]); // Add participants $conversation->addParticipant(auth()->user()); $conversation->addParticipant($contact); // Send a message $message = $conversation->messages()->create([ 'sendable_id' => auth()->id(), 'sendable_type' => User::class, 'body' => 'Hello!', 'type' => 'text', ]);
Events
Listen to FluxChat events:
// EventServiceProvider use Wirelabs\FluxChat\Events\MessageSent; protected $listen = [ MessageSent::class => [ SendMessageNotification::class, ], ];
๐งช Testing
composer test
๐ API Reference
Component Properties
Property | Type | Default | Description |
---|---|---|---|
contacts |
Collection/Array | [] |
Available contacts |
contactModel |
String | User::class |
Contact model class |
contactNameField |
String | 'name' |
Contact name field |
contactSearchFields |
Array | ['name'] |
Searchable fields |
maxContacts |
Integer | 10 |
Max contacts to show |
Models
Conversation
messages()
- Get all messagesparticipants()
- Get all participantsaddParticipant($user)
- Add participantmarkAsRead($user)
- Mark as read
Message
conversation()
- Get conversationsendable()
- Get senderisEdited()
- Check if edited
๐ ๏ธ Troubleshooting
Real-time not working
- Check Reverb is running:
php artisan reverb:start --debug
- Verify configuration:
php artisan config:show broadcasting.default
- Check browser console for WebSocket connections
Messages not updating
- Ensure auto-refresh is enabled:
FLUXCHAT_AUTO_REFRESH=5
- Check Livewire is working:
@livewireScripts
๐ค Contributing
Contributions are welcome! Please see CONTRIBUTING.md for details.
๐ License
The MIT License (MIT). Please see License File for more information.
๐ Credits
- Built by Wirelabs
- Powered by Laravel
- UI by Flux UI
- Real-time by Laravel Reverb
Made with โค๏ธ by Wirelabs