Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Filament Discord Laravel Package

tomatophp/filament-discord

Connects your Filament admin panel to Discord. Send notifications and alerts to Discord channels via webhooks, manage integration settings from a simple Filament page, and keep your team informed without leaving the dashboard.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. The package occupies a deliberately narrow seam: it turns an existing Filament\Notifications\Notification into an outbound Discord webhook POST. There is no new datastore, no queue worker requirement, no auth surface beyond the panel's own settings page. For a Filament panel, that means adoption is additive — it rides on the notification object the panel already constructs, so it does not force a refactor of how resources, hooks, or observers emit signals. The important architectural caveat is that this is the Filament notification object, not Illuminate\Notifications\Notification; there is no via()/toDiscord() channel abstraction here. Any existing Laravel-native notification architecture is a parallel system, not an integration point.

Integration feasibility. High, with a short list of preconditions. The API surface is small enough to read end-to-end in one sitting (src/ plus config/filament-discord.php), and v5.0.0 ships a test suite that fakes Discord HTTP calls — meaning the payload shapes and config keys are documented in executable form rather than prose. Publish the config, set DISCORD_WEBHOOK_URL in .env, verify the exact send method against the tests (not the README, and definitely not the package description), smoke-test from Tinker before wiring lifecycle hooks. A day of effort, not a sprint.

Technical risk. The dominant risk is dependency, not technology. Two stars, zero dependents, no support contract: treat this as unmaintained-by-default, pin the exact version, and wrap every vendor call behind an internal Ops::alert() helper so a rename or abandonment costs an afternoon rather than a migration. Secondary risks: (1) silent failure — v5 skips sends entirely when no webhook is configured, and the error reporter never throws, so a typo'd env key and a working setup are indistinguishable from the UI; (2) coupling to a Filament major — v5.0.0 is Filament v5 / Laravel 12–13 only, with no release spanning both lines; (3) credential exposure — the webhook URL is a bearer token, including the separate error webhook; (4) injection — user-derived content passed verbatim can carry @everyone or <@id> mention sequences.

Key questions.

  • Is the panel already on, or committed to, Filament v5 / Laravel 12–13? If not, we are adopting a legacy v3 branch with unfixed PHP 8.4 deprecations.
  • Is Discord where the team actually already works? If not, we are buying transport for a destination nobody watches.
  • Do we need awareness or delivery guarantees? This package provides the former and explicitly disclaims the latter.
  • Is a second-tier error channel acceptable behind Sentry/Bugsnag, or is someone expecting this to be the paging path?
  • Who owns the webhook rotation runbook when a URL leaks or a channel is deleted?

Integration Approach

Stack fit. Requires Laravel 12/13 + Filament v5 for the ^5.0 line; PHP 8.4 deprecations are fixed there. The integration expects Filament notifications as the emission mechanism and environment/config for the destination. Nothing about the app's broader stack constrains it.

Migration path. Do not install unconstrained. Resolve the correct line first (composer show -a tomatophp/filament-discord), then pin explicitly — ^5.0 for Filament v5, the v3 tag line for Filament v3 panels. Publish the config rather than committing secrets; webhook URLs live in .env only. Then wrap: create app/Support/Ops.php or similar exposing alert(title, body, severity), and forbid direct vendor-namespace imports elsewhere in the codebase. This is the single highest-value decision in the whole adoption and costs an hour.

Compatibility. Two hard constraints to design around. First, Filament-major compatibility is binary — there is no release that spans v3 and v5, so this cannot be adopted independently of a panel upgrade decision. Second, Discord-side limits are real: ~2000 characters per message (truncate to ~1900 with Str::limit), 10 embeds, and roughly 30 requests/minute per webhook. Anything high-volume needs batching before it needs code.

Sequencing.

  1. Decide the Filament major question first; everything else is downstream of it.
  2. Pin the version and publish config; establish the webhook in .env.
  3. Smoke-test a single send from Tinker — confirm the message actually lands before building anything on top.
  4. Build the internal Ops wrapper with response-status logging and mention escaping.
  5. Add the error reporter as a second-tier signal on a distinct #errors webhook.
  6. Route severity to channels (success/info → activity, warning/danger → alerts).
  7. Only then wire observers and Filament lifecycle hooks, all queued.
  8. Replace per-event emission with scheduled digests wherever volume permits.

Operational Impact

Maintenance. Low code churn, non-trivial ownership. The package is small and the surface is stable, but the maintenance burden we accept is pin-and-watch: track upstream tags against our Filament version, and hold a fork contingency. Keep the vendor notification class copyable into app/ if upstream stalls on a future Filament release. Because we own the Ops wrapper, payload formatting (embeds, colors, field ordering) stays under our control regardless of what upstream does.

Support. There is none. MIT license, two stars, no SLA, no security review, no CVE process. That is acceptable for a tactical utility and disqualifying as core infrastructure. Record that acceptance explicitly rather than rediscovering it during an incident.

Scaling. Not a scaling risk at current volumes; a rate-limit incident at higher ones. Per-webhook limits (~30/min plus burst behaviour) mean a created observer on a busy model will produce 429s quickly. The mitigations are structural, not config: implement ShouldQueue on the wrapper, batch or debounce per-event emissions, and prefer scheduled rollup commands over message-per-event. Discord is a paging surface, not an audit log — if we find ourselves needing delivery guarantees or history, we've mis-scoped the tool.

Failure modes.

  • Silent skip on missing webhook (v5 behaviour): message dropped before the HTTP call. Debug order is env var → exact config key → config:cache staleness → Discord. Never assume the send path.
  • Swallowed HTTP failures on normal sends: the Filament UI notification still reports success. Only our wrapper's response-status logging gives us signal.
  • Non-throwing error reporter: safe for the request lifecycle, useless as a sole alerting path. It sits behind Sentry, never in front.
  • Rotated or deleted webhook: returns 404/401 and never self-heals. Requires a health check or a small Artisan smoke command run after Discord channel maintenance.
  • Rate limiting: 429s surface as generic failed HTTP calls unless queued.
  • Credential leak: regenerate in Discord the moment a URL appears in a log, screenshot, or exception trace.

Ramp-up. Effectively zero for a Laravel developer — the whole package is an afternoon's read, and the fake-HTTP test suite doubles as onboarding material. The real ramp-up cost is organisational, not technical: teaching the team that silence is ambiguous, that the send path fails quietly, and that non-developers can now broadcast from a small panel page or header action. Budget for a short internal writeup and a smoke-check habit; that is what converts this from a demo into day-to-day utility.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
skyraptor/chatter
edlugz/sasapay
abbasudo/artisan-route
mirvan/ippanel
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource