For Laravel 13 · Filament v5

Did that alert
actually send?

Filament Outbox turns your app's Discord, Slack, Microsoft Teams and webhook notifications into something you can see and manage: endpoints live in your Filament panel instead of .env files, every send is recorded, and failures retry with one click.

$ composer require stboris/filament-outbox
yourapp.test/admin/outbox-endpoints

Endpoints

New endpoint
Name Channel
team-alerts Discord Send test
ops-slack Slack Send test
billing-webhook Webhook Send test
Test notification sent to team-alerts
Built on Laravel Notifications Filament v5 plugin PHP 8.3+ MIT-licensed core

The Laravel you already write

No parallel notification system to learn. Write a normal Notification class, return a message object, and reference a panel-managed endpoint by name.

class DeployFinished extends Notification
{
    public function via(object $notifiable): array
    {
        return ['discord'];
    }

    public function toDiscord(object $notifiable): DiscordMessage
    {
        return DiscordMessage::make()
            ->embed(fn (DiscordEmbed $embed) => $embed
                ->title('Deploy finished ✅')
                ->description('v2.14.0 → production')
                ->timestamp())
            ->endpoint('team-alerts'); // managed in the panel
    }
}

Real recording — a panel test-send arriving in Discord. Your team sees this; you see it in the send history.

The admin layer your notifications were missing

Free packages give you a sending channel. Filament Outbox Pro gives you the management UX around it.

Endpoint management

Webhook URLs live in your panel, not your .env. Named endpoints with per-environment scoping, enable toggles, and channel defaults like bot username or extra headers.

Send history

Every attempt recorded with status, HTTP code, and full payload preview — including error bodies on failure. Old rows prune themselves.

One-click retry

Retry failed sends from the panel. Each retry is a new, linked history row — auditable, never overwritten. Webhook bodies are re-signed automatically.

Test-send button

Verify any endpoint end to end before you rely on it — from the panel, or with php artisan outbox:test.

Model-event triggers

Notify on created/updated/deleted straight from config, with placeholder templates. No notification class needed.

Signed webhooks

Payloads signed with HMAC-SHA256 over the exact bytes on the wire. Receivers verify authenticity with one hash_equals() line.

Also in the box: queued sending with exponential backoff (3 tries), automatic retries for rate limits and 5xx responses, honest exceptions on permanent failures — and it all runs fine on shared hosting.

When something fails, you'll know — and fix it in one click

Rate-limited by Slack at 2 a.m.? The send history shows the failed attempt with the exact response body. Hit Retry and the message goes out again — recorded as a new attempt linked to the original, so your audit trail stays honest.

  • Filter by status, channel, or endpoint
  • Full payload & header preview per attempt
  • Auto-pruned after 30 days (configurable)

Real recording — a rate-limited Slack send retried from the panel.

Notifications without notification classes

For the routine stuff — "tell the team when an order comes in" — skip the boilerplate entirely. Declare triggers in config: pick the model events, the channels, a message template with {placeholder} attributes, done.

Flip queue => true and sends happen on your queue with three tries and exponential backoff.

// config/filament-outbox.php
'triggers' => [
    Order::class => [
        'events'    => ['created'],
        'channels'  => ['discord', 'webhook'],
        'endpoints' => ['discord' => 'team-alerts'],
        'template'  => 'Order #{id} placed — {total} EUR',
        'queue'     => true,
    ],
],

Simple pricing, no subscription

The channels are free and MIT-licensed. The admin layer is a one-time purchase.

Free

The notification channels, open source

$0

  • Discord, Slack, Teams & webhook channels
  • HMAC-signed webhook payloads
  • Automatic retries on 429/5xx
  • outbox:test command
  • MIT license, no Filament required
View on GitHub
Launch price

Pro

The Filament admin layer

$59 one-time, per project

  • Everything in Free, plus:
  • Endpoint management in your panel
  • Send history with payload preview & retry
  • Test-send button per endpoint
  • Model-event triggers & queued sending
  • 1 year of updates · use forever
Buy Pro · $59

Secure checkout & EU VAT handled by Polar · 14-day refund

Questions, answered

Is the free package enough for me?

If you're happy configuring webhook URLs in config files and don't need history or an admin UI — yes, and it's MIT-licensed. Pro is for when notifications become something your team depends on: managed endpoints, an audit trail, retries, and triggers.

What do I get when I buy Pro?

A license key and the filament-outbox-pro Composer package with an installation guide. You install it alongside the free package; your existing notification code doesn't change. Updates for one year are included — re-download anytime from your Polar account.

What happens after my year of updates?

Nothing breaks. You keep using the version you have forever — the license never expires, only the update window does. Renewing for further updates is optional.

What are the requirements?

PHP 8.3+, Laravel 13. The Pro admin layer additionally needs Filament v5. The free channels work in any Laravel app — no Filament required. Runs fine on typical shared hosting.

Do you offer refunds?

Yes — 14 days, no questions asked. Email with your order number and you'll get your money back.

Will I get a proper invoice? What about VAT?

Checkout runs through Polar as merchant of record: they charge the correct VAT for your country, and you get a compliant invoice you can pass straight to your accountant.