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 Announcements Laravel Package

marcelodelgado/filament-announcements

A Filament v5 plugin for institutional announcements and alerts on panel dashboards. Includes a severity-ordered widget, full CRUD resource with badges and bulk actions, per-user dismiss via pivot table, and automatic expiration using date windows—no jobs required.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

The package is a narrow, self-contained Filament panel plugin: a dashboard widget, a CRUD resource for announcement authoring, a dismissal pivot for per-user state, and expiry logic. It layers onto Filament's existing panel/widget/resource primitives rather than introducing a new runtime, queue worker, or external service. That is the right shape for the problem — there is no architectural impedance mismatch for a Laravel + Filament admin stack.

The strategic question is not "does it fit" but "is it worth a dependency." The feature surface is small enough that a competent Filament developer can reproduce it in one to three days: one model, one migration, one resource, one widget, one dismissal table. Adopting a third-party package therefore buys convenience, not capability, and it imports a maintenance relationship whose value must exceed that build cost.

Integration feasibility

Standard Filament plugin install path applies: Composer require, publish config/migrations/assets, register the plugin in the target PanelProvider, and optionally seed. Integration is gated entirely on the Filament v5 constraint — see risk below. Additional feasibility unknowns that must be resolved before commitment:

  • Whether migrations are publishable and reversible, and whether the dismissal table has proper foreign keys with cascade on user deletion.
  • Whether the widget is panel-scoped and multi-tenancy-aware, or global to the installation.
  • Whether announcement body content is rendered as trusted HTML (XSS exposure to anyone with authoring rights) or escaped/flat text.
  • Whether authorization for creating announcements routes through Filament policies or is effectively "any panel user."

Technical risk

Risk is concentrated and high relative to the value delivered:

  1. Version surface risk (primary). A Filament v5-only plugin cannot be installed on v3 or v4 panels. Filament major releases have historically carried substantial breaking changes in resource, schema, and widget APIs; a plugin pinned to the newest major has the smallest install base and the highest exposure to upstream churn. This single constraint likely disqualifies the package for most existing estates.
  2. Bus factor and evidence risk. One maintainer, 7 stars, 0 dependents, maturity classified as "readme" — meaning the README is the primary artifact, not a test suite or release history. There is no observable production usage to borrow confidence from.
  3. Abandonment risk. For a feature this small, abandonment is not catastrophic (forkable in a day), but it does mean the upgrade tax on the next Filament major lands on your team.
  4. Correctness risk in expiry/dismiss semantics. Automatic expiration plus per-user dismiss is deceptively fiddly: timezone handling on publish_at/expires_at, cache staleness across the boundary, and dismiss-state cleanup for deleted or deactivated users are all common defect sites.

Key questions

  • Which Filament major versions does our target estate actually run today, and is a v5 upgrade on the roadmap within the next two quarters?
  • Does the package ship tests, a changelog, and tagged releases, or only main?
  • Are migrations publishable and reversible, with cascading FKs on user and announcement deletion?
  • Is announcement content sanitized, and who is authorized to author it?
  • Does the widget support multi-tenancy and per-panel scoping, or will announcements leak across panels/tenants?
  • How does expiry interact with the widget query — evaluated per render, cached, or scheduled?
  • What is the concrete build estimate for an in-house equivalent on our existing Filament version?

Integration Approach

Stack fit

Fits cleanly if and only if the panel is on Filament v5 with a compatible PHP/Laravel baseline. On v3 or v4 the integration is not "hard," it is blocked — the correct move there is to treat this repository as a reference implementation and write the equivalent natively, which also removes the version-pin problem permanently.

Migration path

Sequence the evaluation as a timeboxed spike rather than a rollout:

  1. Branch/spike environment on the current panel. Composer require, publish config and migrations, register the plugin, run migrate then migrate:rollback to confirm reversibility.
  2. Author a sample announcement, verify widget render, per-user dismiss, and expiry behavior across a timezone boundary.
  3. Probe the authorization surface: can a low-privilege panel user reach the create/edit resource?
  4. Inspect the published migration and widget source directly; if source review is uncomfortable, the build-vs-buy answer is already "build."

Compatibility

Two compatibility axes to pin explicitly in the ADR: Filament major version (v5 only — hard gate) and the package's own version pinning strategy. Verify whether the constraint is ^5.0 or a tighter range, and whether releases are tagged. Also confirm the panel's other plugins do not conflict on shared Filament widget or resource registration.

Sequencing

Do not deploy to production until the spike passes and a fork-or-fallback decision is recorded. If adopted, land it behind the plugin registration in a single small PR with migrations reviewed like application code, and only after the in-house build estimate is written down for comparison. The realistic recommendation for most teams: do not adopt as a dependency; use it as a spec. The feature is cheap to rebuild, and rebuilding keeps you on your current Filament major with no external maintenance obligation.

Operational Impact

Maintenance

Ongoing maintenance is small in absolute terms but non-zero and externally triggered: every Filament major (and occasionally minor) bump is a potential breaking change requiring a package update you do not control. Budget a periodic upgrade-tax line item, or eliminate it by owning the code. The MIT license makes forking viable, which caps the downside — you are never truly stuck, just occasionally inconvenienced.

Support

Single maintainer, GitHub issues as the only channel, no SLA, no commercial backing. Acceptable for an internal, low-blast-radius admin affordance. Not acceptable for anything an audit or customer-facing commitment depends on. Do not staff a support rotation around this.

Scaling

Effectively a non-issue. Announcements are a low-cardinality table; dismissals scale with users × active announcements, which stays small if expired dismissals are pruned. The only scaling concern worth a ticket is the widget query firing on every dashboard load — confirm it is indexed on the active-window predicates (publish_at, expires_at, panel/tenant key) so dashboards do not degrade as the dismissal table grows.

Failure modes

  • Dashboard render failure. A widget that throws breaks the panel's dashboard for every user — high blast radius for a cosmetic feature. Wrap in defensive rendering or verify the widget handles empty and malformed states.
  • Stale or leaked announcements. Cache not invalidated at the expiry boundary, or missing tenant/panel scoping, surfaces announcements to the wrong audience. Verify scoping before any multi-tenant deployment.
  • Orphaned dismissals. User deletion without FK cascade leaves rows that can mis-suppress future announcements if IDs are reused.
  • Content injection. HTML-capable announcement bodies authored by a compromised or over-privileged account are a stored-XSS path into the admin panel.
  • Silent abandonment. No update arrives for the next Filament major; the plugin blocks the upgrade until forked.

Ramp-up

Hours, not days. Any Filament-fluent developer can read the README and have it running in an afternoon; the spike described above is the whole onboarding. The real cost is not learning the package but the decision overhead of adopting a v5-only, single-maintainer dependency for a feature you could own outright — which is why the build-vs-buy call should be made explicitly and recorded, not defaulted.

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.
adachsoft/changelog-linter
adachsoft/collection
payerurl/telegrambot-crypto-payment-instant-payout
dskripchenko/laravel-hybrid-search
riorizkyrainey/lara-ced
mehedimi/static-vel
zharp/zharp
nonsapiens/bigquery-model-sync
lgu-bayambang-ict-office/lgu-laravel-development-standards
andydefer/laravel-support
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel
draftsmaninc/draftsman
square-bit/laravel-volition
himito/laravel-mailman
htinlynn/genius-helper
maco-studios/hephaestus
adachsoft/php-code-style