NewWe open-sourced 50+ Laravel packages
Custom AI apps, agents and automation — Roundly ConsultingRoundly
All packages

Plain Laravel events fire from every write path regardless of whether broadcasting is on, so non-broadcasting apps can still react — notifications, search indexing, activity logs. All live under RoundlyConsulting\Messages\Events:

EventPublic propertiesFired when
ThreadCreated$threadA thread is created — once its participants are in (StartThread, including a new DM).
MessageSent$messageA message is sent — after the transaction commits, so attachments are already bound.
MessageEdited$messageEditMessage changes a body.
MessageDeleted$messageDeleteMessage unsends (soft-deletes) a message.
ParticipantJoined$participantAddParticipant adds a new participant row — not on a re-add of someone already in.
ParticipantLeft$thread, $participant (the model)RemoveParticipant or LeaveThread removes someone.
ThreadRead$participantMarkRead advances a read pointer.
ThreadRenamed$thread, $previousNameRenameThread changes the name.
ThreadArchived$threadArchiveThread archives a thread for the first time.
ParticipantTyping$thread, $participantMessages::thread($t)->typing() (or $thread->typing()) is called with broadcasting on — broadcast only.
use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Messages\Events\MessageSent;

Event::listen(MessageSent::class, function (MessageSent $event): void {
    // $event->message
});

ParticipantTyping is a transient, never-persisted signal that exists only to be broadcast — see Broadcasting. Role changes and ownership transfers fire no events of their own.

The package’s own listeners

The package listens to MessageSent twice: NotifyParticipantsOfNewMessage (inert unless notifications are enabled) and the queued WarmMessageMediaVariants (image previews for attachments). Your listeners run alongside them.

Show your open-source love

This package is free and MIT-licensed. If it saves you time, a one-off donation or a Patreon membership keeps it maintained, tested and documented.

More ways to support, including crypto

By donating, you agree to our donation terms.

Want this built into your product?

We integrate our packages into custom Laravel and AI builds. Tell us what you're working on and we'll reply within 48 hours.