PHPackages                             qalainau/filament-team-chat - 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. qalainau/filament-team-chat

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

qalainau/filament-team-chat
===========================

A Slack-like team chat plugin for Filament v5

v0.4.3(4w ago)11314↓12%5[4 issues](https://github.com/qalainau/filament-team-chat/issues)[3 PRs](https://github.com/qalainau/filament-team-chat/pulls)MITPHPPHP ^8.3

Since May 12Pushed 4w agoCompare

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

READMEChangelogDependencies (7)Versions (27)Used By (0)

Filament Team Chat
==================

[](#filament-team-chat)

**A complete Slack-like team chat for Filament v5.** Drop it into any panel — channels, DMs, threads, reactions, mentions, file sharing, search, and unread tracking work out of the box. Self-hosted, no external services needed.

[![Filament v5](https://camo.githubusercontent.com/ede7239ea1619e2b1dc40543054cfa232ad006995c0699605a6ba0c3c7759c94/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f46696c616d656e742d76352e782d616d6265723f7374796c653d666c61742d737175617265)](https://camo.githubusercontent.com/ede7239ea1619e2b1dc40543054cfa232ad006995c0699605a6ba0c3c7759c94/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f46696c616d656e742d76352e782d616d6265723f7374796c653d666c61742d737175617265)[![Laravel v13](https://camo.githubusercontent.com/c7fcbd817e57126dc1c12b4256e1bcad1a8e004eaaef8d367ad680eea0f0b529/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d7631332e782d7265643f7374796c653d666c61742d737175617265)](https://camo.githubusercontent.com/c7fcbd817e57126dc1c12b4256e1bcad1a8e004eaaef8d367ad680eea0f0b529/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d7631332e782d7265643f7374796c653d666c61742d737175617265)[![PHP 8.3+](https://camo.githubusercontent.com/2223b1e38c87c8e1f05baa54ef6bcc97b6de8519e074742376390fa632e05e67/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e332b2d626c75653f7374796c653d666c61742d737175617265)](https://camo.githubusercontent.com/2223b1e38c87c8e1f05baa54ef6bcc97b6de8519e074742376390fa632e05e67/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e332b2d626c75653f7374796c653d666c61742d737175617265)[![Tests](https://camo.githubusercontent.com/42b6ec8e964fa4435b24677f4f8e7561be35d0d498f4d3f4a21637b5fb2f88e3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f54657374732d31303225323070617373696e672d627269676874677265656e3f7374796c653d666c61742d737175617265)](https://camo.githubusercontent.com/42b6ec8e964fa4435b24677f4f8e7561be35d0d498f4d3f4a21637b5fb2f88e3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f54657374732d31303225323070617373696e672d627269676874677265656e3f7374796c653d666c61742d737175617265)[![License MIT](https://camo.githubusercontent.com/152aa2a37725b9fd554b28ff24d270f6071c67927a63e6d635a55c8e188e20c7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e3f7374796c653d666c61742d737175617265)](https://camo.githubusercontent.com/152aa2a37725b9fd554b28ff24d270f6071c67927a63e6d635a55c8e188e20c7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e3f7374796c653d666c61742d737175617265)

---

[![Chat Overview](screenshots/01-chat-overview.png)](screenshots/01-chat-overview.png)

Why Filament Team Chat?
-----------------------

[](#why-filament-team-chat)

- **Zero external dependencies** — No Pusher, no Redis, no WebSocket server. Works with Livewire polling out of the box.
- **Filament-native** — Lives inside your Filament panel. Uses your existing auth, your existing users, your existing database.
- **Multi-tenant ready** — Optional `team_id` scoping with automatic Filament tenant detection.
- **Self-hosted** — Your data stays on your server. No third-party chat services.

Screenshots
-----------

[](#screenshots)

  **Threaded Conversations**
Click any message to reply in a side panel — just like Slack.

[![Thread Panel](screenshots/02-thread-panel.png)](screenshots/02-thread-panel.png) **File Attachments**
Share images (with inline preview) and documents.

[![File Attachments](screenshots/04-attachments.png)](screenshots/04-attachments.png)   **Dark Mode**
Full dark mode support, following your Filament panel theme.

[![Dark Mode](screenshots/03-dark-mode.png)](screenshots/03-dark-mode.png) Features
--------

[](#features)

### Messaging

[](#messaging)

- **Channels** — Public and private channels with member management
- **Direct Messages** — 1-on-1 and group DMs
- **Threads** — Reply to any message in a side panel, with reply count on the main feed
- **Markdown** — Messages support **bold**, *italic*, `code`, lists, and links
- **Edit &amp; Delete** — Edit or soft-delete your own messages (hover action bar)

### Collaboration

[](#collaboration)

- **Reactions** — 8 built-in emoji reactions (toggle on/off)
- **@Mentions** — `@user`, `@channel`, `@here` with live autocomplete
- **File Attachments** — Upload multiple files per message, image previews, download links
- **Search** — Full-text search across all channels and DMs you belong to

### Awareness

[](#awareness)

- **Unread Badges** — Per-channel/DM unread counts with automatic read tracking
- **Instant Refresh** — Your own messages appear immediately; others update via polling
- **Online Status** — Presence indicators and custom status text
- **Notifications** — Database notifications for @mentions and DMs

### Management

[](#management)

- **Inline Channel Settings** — Edit name, topic, and visibility directly in the chat header (owner only)
- **Archive Channels** — Soft-archive channels to hide them from the sidebar
- **Public Auto-Join** — Public channels appear for all users; clicking auto-joins
- **Member List** — View channel/DM members with online indicators and profile cards

### Technical

[](#technical)

- **Multi-Tenancy** — Optional `team_id` scoping with Filament tenant auto-detection
- **Dark Mode** — Follows your Filament panel theme
- **102 Tests** — Comprehensive test suite with Orchestra Testbench

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

[](#installation)

```
composer require qalainau/filament-team-chat
```

Publish and run the migrations:

```
php artisan vendor:publish --tag=team-chat-migrations
php artisan migrate
```

Getting Started
---------------

[](#getting-started)

### 1. Register the Plugin

[](#1-register-the-plugin)

```
use Filament\TeamChat\FilamentTeamChatPlugin;

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

### 2. Add the Trait to Your User Model

[](#2-add-the-trait-to-your-user-model)

```
use Filament\TeamChat\Concerns\HasTeamChat;

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

### 3. Notifications Table (if needed)

[](#3-notifications-table-if-needed)

Required for @mention and DM notifications:

```
php artisan make:notifications-table
php artisan migrate
```

### 4. Tailwind CSS Setup

[](#4-tailwind-css-setup)

The plugin uses Tailwind CSS classes that must be included in your Filament theme.

**If you don't have a custom theme yet**, create one first:

```
php artisan filament:theme
```

Then add the package views as a source in your theme file:

```
/* resources/css/filament/admin/theme.css */
@source '../../../../vendor/qalainau/filament-team-chat/resources/views/**/*';
```

Build the theme:

```
npm run build
```

**Done!** Visit `/admin/team-chat` to start chatting.

Configuration
-------------

[](#configuration)

Publish the config file:

```
php artisan vendor:publish --tag=team-chat-config
```

```
// config/team-chat.php
return [
    'table_prefix' => 'tc_',

    'user_model' => \App\Models\User::class,

    'polling' => [
        'messages' => 3,  // seconds
        'sidebar' => 5,   // seconds
    ],

    'uploads' => [
        'disk' => 'public',
        'directory' => 'team-chat-attachments',
        'max_size' => 10240, // KB
    ],

    'tenancy' => [
        'enabled' => false,
        'model' => null,    // e.g. \App\Models\Team::class
        'resolver' => null, // null = Filament::getTenant()
    ],
];
```

### Multi-Tenancy

[](#multi-tenancy)

Set `tenancy.enabled` to `true` to scope channels and conversations per team. The resolver supports:

ModeConfigBehaviorAuto (default)`null`Uses `Filament::getTenant()`Callable`fn () => auth()->user()->team_id`Custom closureClass`TenantResolver::class`Must have `resolve()` methodProgrammatic API
----------------

[](#programmatic-api)

All features are available as PHP classes — useful for seeders, commands, or integrations.

### Channels &amp; DMs

[](#channels--dms)

```
use Filament\TeamChat\Models\Channel;

// Create a channel
$channel = Channel::create([
    'name' => 'general',
    'slug' => 'general',
    'type' => 'public', // or 'private'
    'created_by' => $user->id,
]);
$channel->members()->attach($user->id, ['role' => 'owner']);

// DMs (idempotent — returns existing conversation if found)
$dm = $user->findOrCreateDirectMessage($otherUser->id);

// Group DM
$group = $user->createGroupConversation(
    userIds: [$user2->id, $user3->id],
    name: 'Project Team',
);
```

### Messages

[](#messages)

```
use Filament\TeamChat\Actions\SendMessage;

$message = app(SendMessage::class)->execute(
    messageable: $channel,    // Channel or Conversation
    userId: $user->id,
    body: 'Hello @Jordan! Check this **bold** text.',
    parentId: null,           // set for thread replies
    files: [],                // array of UploadedFile
);
```

### Reactions, Read Tracking, Search

[](#reactions-read-tracking-search)

```
use Filament\TeamChat\Actions\{ToggleReaction, MarkAsRead, SearchMessages};

// Toggle reaction (returns true=added, false=removed)
app(ToggleReaction::class)->execute($message->id, $user->id, '👍');

// Unread count
$channel->unreadCountFor($user->id); // => 3

// Mark as read
app(MarkAsRead::class)->execute($channel, $user->id);

// Search (respects channel/DM membership)
$results = app(SearchMessages::class)->execute($user->id, 'deploy', limit: 20);
```

Architecture
------------

[](#architecture)

### Database

[](#database)

All tables use a configurable `tc_` prefix:

TablePurpose`tc_channels`Public/private channels (optional `team_id`)`tc_channel_user`Channel membership pivot with roles`tc_conversations`1-on-1 and group DMs (optional `team_id`)`tc_conversation_user`DM participant pivot`tc_messages`Polymorphic messages (Channel or Conversation)`tc_reactions`Emoji reactions per message per user`tc_attachments`File metadata (name, path, MIME, size)`tc_mentions`@user / @channel / @here per message`tc_read_receipts`Per-user last-read tracking (polymorphic)`tc_user_statuses`Online status, display name, custom status### Livewire Components

[](#livewire-components)

ComponentRoleUpdates`Sidebar`Channel/DM list, unread badges, create/join5s poll + event`MessageFeed`Messages, reactions, edit/delete, reply3s poll + event`MessageComposer`Input, file upload, @mention autocompleteon submit`ChannelHeader`Name, topic, members, settings, archiveon event`ThreadPanel`Threaded replies with own composer3s poll`SearchModal`Full-text search across channels/DMson input`MemberList`Member list with online statuson open`UserProfileCard`Profile popup with DM shortcuton openTesting
-------

[](#testing)

```
# Run in the package directory
composer test

# Or in your Laravel app
php artisan test --filter=TeamChat
```

102 tests covering channels, DMs, threads, reactions, mentions, attachments, search, read receipts, notifications, user status, and channel management.

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

45

—

FairBetter than 91% of packages

Maintenance87

Actively maintained with recent releases

Popularity26

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity49

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

26

Last Release

28d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/8680efcea0de29a5992da943fd048e5fe313832f65c4ed0a45d86efb1969adc0?d=identicon)[qalainau](/maintainers/qalainau)

---

Top Contributors

[![qalainau](https://avatars.githubusercontent.com/u/238779?v=4)](https://github.com/qalainau "qalainau (30 commits)")

---

Tags

laravelslacklivewirechatTeamfilamentfilament-plugin

###  Code Quality

TestsPest

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/qalainau-filament-team-chat/health.svg)

```
[![Health](https://phpackages.com/badges/qalainau-filament-team-chat/health.svg)](https://phpackages.com/packages/qalainau-filament-team-chat)
```

###  Alternatives

[bezhansalleh/filament-google-analytics

Google Analytics integration for FilamentPHP

208175.5k8](/packages/bezhansalleh-filament-google-analytics)[rawilk/profile-filament-plugin

Profile &amp; MFA starter kit for filament.

3913.7k](/packages/rawilk-profile-filament-plugin)[wsmallnews/filament-nestedset

Filament nestedset tree builder powered by kalnoy/nestedset with Filament v4 and v5 support

196.5k14](/packages/wsmallnews-filament-nestedset)[jibaymcs/filament-tour

Bring the power of DriverJs to your Filament panels and start a tour !

12351.0k](/packages/jibaymcs-filament-tour)[aymanalhattami/filament-context-menu

context menu (right click menu) for filament

9939.0k](/packages/aymanalhattami-filament-context-menu)[asosick/filament-layout-manager

Allow users to create &amp; customize their own FilamentPHP pages composed of Livewire components

5721.3k3](/packages/asosick-filament-layout-manager)

PHPackages © 2026

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