Skip to main content
Turn on mail under core:
Core also supports database and broadcast. With enable_notifications on, and Pro not installed, a reply notifies the parent author and a top-level comment notifies the commentable’s user when that relation exists. The author is not notified about their own comment. Pending comments are skipped. Pro replaces that listener with the mail loop below. Notifications only send for approved comments.

Core setup

Create the notifications table if the app does not already have one:
App\Models\User needs the Notifiable trait. Laravel’s default user model already includes it. notification_channels accepts database, mail, and broadcast. Mail uses the app mailer. Broadcast uses your broadcasting driver. Queue the worker when QUEUE_CONNECTION is not sync:
Show them from the authenticated user’s unread notifications. Links should use the comment permalink (commentifyUrl() or Commentify::resolveCommentUrlUsing()), which already includes #comment-{id}. The mail button is included only when that URL is on the app.url host, so a request referer cannot redirect the recipient off the application. See Customization.

What Pro sends

Same-author replies (matching user id, or matching guest emails) are skipped.

Subscribe on post

The create payload / composer can send subscribe_to_replies: true. Requires a non-empty email (account email or guest email) and notifications.subscriptions_enabled (default true). Subscriptions live in commentify_subscriptions (unique per commentable + email) with a random token.

Unsubscribe

Signed route:
Middleware: web + signed. Marks subscribed = false and shows a small Blade view. Build the URL with SubscriptionManager::unsubscribeUrl(). Mail notifications already include it.
Mail CTAs need a public URL. Implement commentifyUrl() on the commentable or Commentify::resolveCommentUrlUsing(). See Usage. Links use #comment-{id}.

Moderator digest

daily (default) looks at the last day for new reports and spam denies, plus the current pending-comment count. hourly uses the last hour. off no-ops. Nothing is sent if all three counts are zero. Schedule it in routes/console.php:
Configure QUEUE_CONNECTION and mailer as you would for any Laravel notification.
Last modified on November 1, 2026