PHPackages                             rhishi-kesh/quick-talk - 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. rhishi-kesh/quick-talk

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

rhishi-kesh/quick-talk
======================

QuickTalk is a lightweight, fast, and developer-friendly chat package built for modern applications. It makes real-time messaging simple to integrate, scalable to grow, and flexible to customize.

v1.0.0(2mo ago)02MITPHPPHP ^8.2

Since Feb 25Pushed 2mo agoCompare

[ Source](https://github.com/rhishi-kesh/QuickTalk)[ Packagist](https://packagist.org/packages/rhishi-kesh/quick-talk)[ RSS](/packages/rhishi-kesh-quick-talk/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (3)Versions (2)Used By (0)

QuickTalk, Laravel Real-Time Chat Package
=========================================

[](#quicktalk-laravel-real-time-chat-package)

QuickTalk is a powerful, production-ready real-time chat system for Laravel applications. It provides private messaging, group chat, typing indicators, reactions, attachments, notifications, and broadcasting support using Reverb or Pusher.

### ✨Features

[](#features)

- 💬 One-to-one messaging
- 👥 Group conversations
- ⚡ Real-time updates (Reverb / Pusher)
- ✍️ Typing indicators
- 😀 Message reactions
- 📎 File attachments
- 🔔 Notifications
- 🟢 Online status tracking
- 🔐 Sanctum API authentication support
- 🧩 Easy installation command
- 🏗️ Clean architecture

### 📋 Requirements

[](#-requirements)

- PHP 8.2+
- Laravel 11^
- MySQL
- Laravel Sanctum
- Broadcasting driver (Reverb or Pusher)

### 😎Core Contributor

[](#core-contributor)

- [Rhishi kesh](https://github.com/rhishi-kesh)

### 🚀 Installation

[](#-installation)

Install via Composer:

```
composer require rhishi-kesh/quick-talk
```

Run the installer:

```
php artisan install:quicktalk
```

Follow the interactive prompts to choose:

- Broadcasting stack (Reverb / Pusher)
- Authentication setup (optional)

### ⚙️ Manual Setup (Required)

[](#️-manual-setup-required)

1️⃣ Add Avatar Column to Users Table
Add this to your users migration:

```
$table->string('avatar')->nullable();
```

2️⃣ Add Seeder to DatabaseSeeder
Open:

```
database/seeders/DatabaseSeeder.php
```

Add:

```
$this->call(UserSeeder::class);
```

Then run:

```
php artisan migrate
php artisan db:seed
```

3️⃣ Create Storage Symlink
Required for serving uploaded images:

```
php artisan storage:link
```

4️⃣ Register Chat Routes
Open bootstrap/app.php and add:

```
->withRouting(
    api: __DIR__ . '/../routes/api.php',
    channels: __DIR__ . '/../routes/channels.php',
    then: function () {
        Route::middleware('api')
            ->prefix('api')
            ->group(base_path('routes/chat_auth.php'));

        Route::middleware('api')
            ->prefix('api')
            ->group(base_path('routes/chat.php'));
    }
)
```

5️⃣ Enable Broadcasting Routes
Still in bootstrap/app.php, add:

```
->withBroadcasting(__DIR__ . '/../routes/channels.php', ['prefix' => 'api', 'middleware' => ['auth:sanctum']],)
```

6️⃣ User Model Configuration
Update your App\\Models\\User model
Required Traits

```
use Laravel\Sanctum\HasApiTokens;

use HasApiTokens;
```

Required Imports

```
use Illuminate\Support\Str;
```

Fillable Fields

```
protected $fillable = [
    'name',
    'email',
    'password',
    'avatar',
];
```

Helper: Initials

```
public function initials(): string
{
    return Str::of($this->name)
        ->explode(' ')
        ->take(2)
        ->map(fn($word) => Str::substr($word, 0, 1))
        ->implode('');
}
```

Chat Relationships

```
// Messages sent by this user
    public function sentMessages()
    {
        return $this->hasMany(Message::class, 'sender_id');
    }

    // Messages received by this user (for direct/private chats only)
    public function receivedMessages()
    {
        return $this->hasMany(Message::class, 'receiver_id');
    }

    // Conversations where user is a participant
    public function participants()
    {
        return $this->morphMany(Participant::class, 'participant');
    }

    // Conversations where user is a participant (through Participant model)
    public function conversations()
    {
        return $this->hasManyThrough(
            Conversation::class,
            Participant::class,
            'participant_id', // Foreign key on Participant table
            'id',             // Local key on Conversation table
            'id',             // Local key on User table
            'conversation_id' // Foreign key on Participant table
        )->where('participant_type', self::class);
    }

    // Message reactions made by this user
    public function messageReactions()
    {
        return $this->hasMany(MessageReaction::class);
    }

    // Read/delivery status records
    public function messageStatuses()
    {
        return $this->hasMany(MessageStatus::class);
    }

    // Firebase tokens for push notifications
    public function firebaseTokens()
    {
        return $this->hasOne(FirebaseToken::class);
    }
```

### 📡 Broadcasting Setup

[](#-broadcasting-setup-)

Ensure broadcasting is configured.

###### For Reverb

[](#for-reverb)

Follow Laravel Reverb setup instructions. ###### For Pusher

[](#for-pusher)

Set credentials ```
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=
```

### ▶️ Start Project Server

[](#️-start-project-server)

Use bellow commends

```
php artisan serve
```

```
npm run dev
```

```
php artisan reverb:start
```

### 📌 Setup Echo Js on your frontend

[](#-setup-echo-js-on-your-frontend)

In your frontend, configure Laravel Echo to connect to WebSockets.

```

    $(document).ready(function() {
        Echo.private('chat-channel.' + 1).listen('.message.event', (e) => {
            console.log('Message Receive:', e);
        })

        Echo.private('conversation-channel.' + 1).listen('.conversation.event', (e) => {
            console.log('Conversation and Unread Message count:', e);
        })

        Echo.join('online-status-channel')
            .here(users => {
                console.log('Active Users:', [users]);
            })
            .joining(user => {
                console.log('User Joined:', [user]);
            })
            .leaving(user => {
                console.log('User Left:', [user]);
            });

        const typingInput = document.getElementById('typingInput');
        const typingImage = document.getElementById('typingImage');

        let typingTimeout;

        // Send typing event when user types
        typingInput.addEventListener('input', function () {
            Echo.private('typing-indicator-channel.1')
                .whisper('typing', { user: 'RKB' });

            console.log('Typing Indicator Sent');
        });

        // Listen for typing event from others
        Echo.private('typing-indicator-channel.1')
            .listenForWhisper('typing', (e) => {
                console.log('Typing Indicator Received:', e.user);

                // Show typing image
                typingImage.style.display = 'block';

                // Clear previous timeout if user keeps typing
                clearTimeout(typingTimeout);

                // Hide typing image 2 seconds after last typing event
                typingTimeout = setTimeout(() => {
                    typingImage.style.display = 'none';
                }, 1000);
            });

    });

```

### 📁 API Routes

[](#-api-routes)

You Can Explore the API documentation from Here ()

### 🤝 Contributing

[](#-contributing)

- Contributions are welcome!
- Feel free to submit issues and pull requests.

### 📄 License

[](#-license)

MIT License

###  Health Score

38

—

LowBetter than 84% of packages

Maintenance92

Actively maintained with recent releases

Popularity2

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity46

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

Unknown

Total

1

Last Release

73d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/4781f5607e5c59ab8fa48686a7ba3b53ac795e1a25c91637ac3633ec08055c4f?d=identicon)[rhishi-kesh-bhowmik](/maintainers/rhishi-kesh-bhowmik)

---

Top Contributors

[![rhishi-kesh](https://avatars.githubusercontent.com/u/110187801?v=4)](https://github.com/rhishi-kesh "rhishi-kesh (4 commits)")

---

Tags

laravelreal-timemessagingchatchattingquicktalkrhishi-kesh

### Embed Badge

![Health badge](/badges/rhishi-kesh-quick-talk/health.svg)

```
[![Health](https://phpackages.com/badges/rhishi-kesh-quick-talk/health.svg)](https://phpackages.com/packages/rhishi-kesh-quick-talk)
```

###  Alternatives

[barryvdh/laravel-ide-helper

Laravel IDE Helper, generates correct PHPDocs for all Facade classes, to improve auto-completion.

14.9k123.0M683](/packages/barryvdh-laravel-ide-helper)[musonza/chat

Chat Package for Laravel

1.2k253.4k1](/packages/musonza-chat)[tehwave/laravel-achievements

Simple, elegant Achievements the Laravel way

7012.8k](/packages/tehwave-laravel-achievements)[lexxyungcarter/chatmessenger

Simple one-to-one/group chat messaging tool for Laravel 5, 6, 7, 8, 9 &amp; 10 with Pusher Integration

10724.1k](/packages/lexxyungcarter-chatmessenger)[syntaxlexx/chatmessenger

Simple one-to-one/group chat messaging tool for Laravel 5, 6, 7, 8, 9 &amp; 10 with Pusher Integration

10510.2k](/packages/syntaxlexx-chatmessenger)[interaction-design-foundation/laravel-geoip

Support for multiple Geographical Location services.

17221.0k3](/packages/interaction-design-foundation-laravel-geoip)

PHPackages © 2026

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