---
title: "Notifications for Laravel — docs | Roundly"
description: "Developer docs for Notifications for Laravel: typed notifications, an in-app inbox, preferences, email de-dup, quiet hours, digests and reminders."
url: https://roundly-consulting.com/open-source/docs/notifications-for-laravel
language: en
---

[All packages](https://roundly-consulting.com/open-source.md)

Open source

# Notifications for Laravel

Install

`composer require roundly-consulting/notifications-for-laravel`

Requires: PHP ^8.4 · Laravel ^13.0

[GitHub](https://github.com/roundly-consulting/notifications-for-laravel) [Packagist](https://packagist.org/packages/roundly-consulting/notifications-for-laravel) [Donate (opens in a new tab)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Patreon](https://www.patreon.com/cw/roundly)

## Overview

Typed notifications for Laravel apps with an in-app inbox and email. Register each kind of notification once, send it from any feature through one call, and the package decides per recipient: may they still see the record, do they want it and on which channel, is it the same thing they heard a minute ago, is it the middle of their night, should it wait for their digest. Reminders follow a date and escalate when nobody acknowledges, and other packages’ notifications can run through the same rules. MIT-licensed and built on Laravel’s own notification system plus Roundly’s crypto, enums, options and package-toolkit — no third-party notification service.

### What you get

#### Typed notification types

Describe each kind of notification once — a small class or a fluent define() — with its category, channels, priority, window, subject and rendering hooks.

#### An inbox that never piles up

Ten events on one subject inside the window become one item that says 10 and shows the latest actor — filterable by context, with unread counts per workspace.

#### Preferences people control

Per type, category and channel, stored per user. Mandatory types cannot be muted, and a whole settings screen saves all or nothing.

#### Email that respects people

Leading or trailing de-dup, quiet hours in each user’s timezone, daily or weekly digests, discreet mail for sensitive subjects and at-most-once delivery.

#### Reminders that follow the calendar

60, 30 and 7 days before a date — moved when the date moves, re-armed on renewal, stopped on delete, escalated when nobody acknowledges.

#### Access re-checked at every hop

Your own policies are asked at the send, in the queue, after quiet hours, in the digest and on every reminder — someone who lost access gets nothing.

#### Facade, DI or actions

One Notifications facade, an injectable manager or single-purpose actions — plus a record-only fake, Pest expectations and an opt-in JSON API.

### Documentation

#### [Use cases](https://roundly-consulting.com/open-source/docs/notifications-for-laravel/use-cases.md)

Where the package fits — SaaS approvals, contract renewals, multi-workspace inboxes, security notices and other packages’ notifications.

#### [Installation](https://roundly-consulting.com/open-source/docs/notifications-for-laravel/installation.md)

Install via Composer, publish both migration sets, schedule notifications:sweep every minute, set key types and make your User a recipient.

#### [Configuration](https://roundly-consulting.com/open-source/docs/notifications-for-laravel/configuration.md)

Every key of config/notifications.php with its env variable and default — key types, tables, queue, inbox, mail, quiet hours, digests, routes, pruning.

#### [Notification types](https://roundly-consulting.com/open-source/docs/notifications-for-laravel/notification-types.md)

Register each kind of notification once — a NotificationType class or a fluent define() — with every hook, its default and the payload.

#### [Recipient and subject models](https://roundly-consulting.com/open-source/docs/notifications-for-laravel/recipient-models.md)

ReceivesNotifications, HasNotificationReminders and the contracts that name a timezone, a group’s members, an owner or a context label.

#### [The Notifications facade](https://roundly-consulting.com/open-source/docs/notifications-for-laravel/facade.md)

Tour the Notifications facade — send, type(), for($subject), inbox(), preferences(), define(), the accessors, sweep and prune — with every method.

#### [DI and actions](https://roundly-consulting.com/open-source/docs/notifications-for-laravel/without-facade.md)

Skip the facade: inject NotificationsManager or call a single-purpose action — every host-facing action with its execute() signature and facade path.

#### [Sending](https://roundly-consulting.com/open-source/docs/notifications-for-laravel/sending.md)

send(), the fluent type()->…->send(), for($subject), contexts, once() idempotency, escalate(), fan-out, transactions and the SendResult.

#### [Recipients and access](https://roundly-consulting.com/open-source/docs/notifications-for-laravel/recipients-and-access.md)

Recipients::users, role, members, owner, using and merge, the group resolver and teams recipe, fail-closed access checks and revoke().

#### [Inbox](https://roundly-consulting.com/open-source/docs/notifications-for-laravel/inbox.md)

Collapsing within a window, contexts, immutable queries and counts, read/archive/delete, resources without class names, broadcasting and the inbox channel.

#### [Preferences](https://roundly-consulting.com/open-source/docs/notifications-for-laravel/preferences.md)

Per-user channel, category and type preferences, mandatory types, the settings matrix, all-or-nothing update(), storage through options and locking.

#### [Email](https://roundly-consulting.com/open-source/docs/notifications-for-laravel/email.md)

Leading and trailing de-dup within the window, the life of a delivery, at-most-once sending, rendering, minimal mail and the address resolver.

#### [Quiet hours and timezones](https://roundly-consulting.com/open-source/docs/notifications-for-laravel/quiet-hours.md)

Hold non-urgent mail during each user’s local quiet hours, resolve the timezone, handle DST, and set a default for users without their own.

#### [Digests](https://roundly-consulting.com/open-source/docs/notifications-for-laravel/digests.md)

Collect low-priority notifications into one daily or weekly email at a local time — slots, periods, runs, frequency changes, failures and preview.

#### [Reminders and escalation](https://roundly-consulting.com/open-source/docs/notifications-for-laravel/reminders.md)

Reminder::before/after/at, while(), rearm(), acknowledgedOnRead(), the HasNotificationReminders trait, ad-hoc reminders, firing and escalation chains.

#### [Other packages’ notifications](https://roundly-consulting.com/open-source/docs/notifications-for-laravel/interop.md)

Map other packages’ notification classes to your types so preferences, de-dup, quiet hours and the inbox apply — or suppress them — with fail-open safety.

#### [JSON API](https://roundly-consulting.com/open-source/docs/notifications-for-laravel/json-api.md)

The opt-in JSON API — all 11 routes for the authenticated user’s inbox, preferences and types, with filters, bodies, errors and resources.

#### [Events](https://roundly-consulting.com/open-source/docs/notifications-for-laravel/events.md)

Every event the package dispatches after the commit — inbox, mail, digest, reminder, escalation, preference, skip and interop failures.

#### [Exceptions](https://roundly-consulting.com/open-source/docs/notifications-for-laravel/exceptions.md)

Every domain exception with its stable code and HTTP status, the configuration exceptions, and how to map them in your own API.

#### [Artisan commands](https://roundly-consulting.com/open-source/docs/notifications-for-laravel/commands.md)

notifications:sweep, prune, types, doctor, install and reminders:sync — what each does, the doctor’s checks and the facade equivalents.

#### [Testing](https://roundly-consulting.com/open-source/docs/notifications-for-laravel/testing.md)

Notifications::fake() records without running — every assertion, recorded operations, passthrough(), Pest expectations, the real pipeline and factories.

#### [Requirements](https://roundly-consulting.com/open-source/docs/notifications-for-laravel/requirements.md)

PHP 8.4+, Laravel 13, MySQL or PostgreSQL (SQLite for tests), a queue worker, the scheduler and four Roundly packages.

## 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](https://roundly-consulting.com/support-us.md)

By donating, you agree to our [donation terms](https://roundly-consulting.com/donation-terms.md).

[Support our open source work (opens in a new tab)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Join us on Patreon (opens in a new tab)](https://www.patreon.com/cw/roundly)

## 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.

[Get a quote in 48 hours](https://roundly-consulting.com/contact.md) [Browse all packages](https://roundly-consulting.com/open-source.md)
