Laravel Echo is a powerful tool for real-time event broadcasting in Laravel applications. It simplifies WebSocket integration, allowing seamless communication between the server and client. But how do you use public, private, and presence channels effectively?
In this guide, we’ll break down each channel type, explain their differences, and show you how to implement them in your Laravel app. Whether you’re building a live chat, notifications system, or collaborative dashboard, mastering Laravel Echo channels will take your real-time features to the next level.
Table of Contents
- What is Laravel Echo?
- Public Channels
- When to Use Public Channels
- How to Set Up Public Channels
- Private Channels
- Securing Private Channels
- Authentication & Authorization
- Presence Channels
- Tracking User Presence
- Building Real-Time Collaboration Features
- Choosing the Right Channel
- Conclusion
1. What is Laravel Echo?
Laravel Echo is a JavaScript library that makes it easy to subscribe to WebSocket channels and listen for server-side events in real time. It works seamlessly with Laravel’s broadcasting system, supporting drivers like Pusher, Ably, and Laravel Websockets.
Echo simplifies real-time communication by handling channel subscriptions, authentication, and event listening—so you can focus on building interactive features.
2. Public Channels
When to Use Public Channels
Public channels are open to all users—no authentication required. They’re ideal for broadcasting general updates, such as:
- Live news feeds
- Public chat rooms
- Real-time sports scores
How to Set Up Public Channels
Broadcast an Event
event(new PublicMessageEvent($message));
Listen in JavaScript
Echo.channel('public-channel')
.listen('PublicMessageEvent', (data) => {
console.log(data.message);
});
Public channels are simple but lack security—anyone can listen. For sensitive data, use private or presence channels.
3. Private Channels
Securing Private Channels
Private channels require authentication. Only authorized users can subscribe, making them perfect for:
- User-specific notifications
- Private messaging
- Secure data updates
Authentication & Authorization
Define Channel Authorization (in routes/channels.php
)
Broadcast::channel('private-user.{userId}', function ($user, $userId) {
return $user->id === $userId;
});
Subscribe in JavaScript
Echo.private(`private-user.${userId}`)
.listen('PrivateMessageEvent', (data) => {
console.log(data.message);
});
Laravel automatically handles authentication via broadcasting/auth endpoint.
4. Presence Channels
Tracking User Presence
Presence channels extend private channels by tracking who’s online. They’re great for:
- Live user dashboards
- Collaborative editing tools
- Group chat “who’s online” features
Implementing Presence Channels
Authorize the Channel
Broadcast::channel('presence-chat.{roomId}', function ($user, $roomId) {
return ['id' => $user->id, 'name' => $user->name];
});
Join & Listen in JavaScript
const presenceChannel = Echo.join(`presence-chat.${roomId}`)
.here((users) => {
console.log('Current users:', users);
})
.joining((user) => {
console.log(`${user.name} joined`);
})
.leaving((user) => {
console.log(`${user.name} left`);
});
Presence channels provide real-time user tracking, enhancing engagement.
5. Choosing the Right Channel
- ✅ Public – General broadcasts
- ✅ Private – Secure user-specific data
- ✅ Presence – Tracking active users
6. Conclusion
Laravel Echo makes real-time features effortless with public, private, and presence channels.
- Use public channels for open broadcasts.
- Secure data with private channels.
- Track active users with presence channels.
By mastering these channels, you can build dynamic, interactive Laravel applications that keep users engaged.