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

Widgets Laravel Package

filament/widgets

Filament Widgets provides the widget system for Filament panels, letting you build dashboards with stats, charts, tables, and custom widgets. Configure dashboard layouts, poll for updates, and reuse widget components across admin panels and resources.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • filament/widgets is a subtree split of the main filamentphp/filament monorepo, not an independent library. It ships Filament's Widget base class, the StatsOverviewWidget/ChartWidget/TableWidget primitives, and the Blade/Tailwind layout scaffolding. Its natural home is an existing Filament panel; it is a poor fit for anything that is not Laravel + Livewire.
  • For products already on Filament, this is close to a zero-architecture-decision: widgets are the framework's sanctioned dashboard extension point, and Dashboard pages already accept a getWidgets() array. Effort is dominated by data-source and permission work, not by integration.
  • For Livewire-only stacks, the package's value collapses to a small set of view components plus layout conventions. Reproducing the wrapper cost is low; adopting the split without the panel adds a dependency for modest gain. Treat this as a "buy the framework, get the widgets" decision, not a component-library decision.

Integration feasibility

  • High. composer require filament/widgets (or, better, the parent filament/filament, which is what virtually all deployments should pull), one artisan scaffold, one Blade view, one registration call. A credible spike is 1–2 engineer-days end to end including a real query.
  • Constraints are: Tailwind must be in the asset pipeline, Livewire 3.x is the supported target, and widgets must render inside a Livewire lifecycle. Apps on Livewire 2 or with a non-Tailwind design system face meaningful rework.
  • Interactive widgets (filters, date ranges, drill-downs) are supported but require you to own the Livewire state: mount, updates, and hydration behavior are not inherited for free.

Technical risk

  • Dependency identity risk (highest). Dependents: 0 is a measurement artifact of the subtree split — real consumption is via filament/filament. Do not read it as low adoption. Conversely, do not assume filament/widgets has an independent release train; its versions track monorepo tags, so pinning discipline matters.
  • Support-channel risk. Issues and PRs are not accepted on this repository. Anything you file lands in the monorepo backlog. Your escalation path is community + vendor (Filament has a commercial offering) — budget accordingly if dashboards become business-critical.
  • Version-lock risk. Widget classes are tied to Filament's major line. A Filament 4 upgrade is a coordinated migration across panels, widgets, and theme assets, not a patch bump.
  • Theming/design-system risk. Widgets are opinionated Tailwind. If your design system is not Tailwind-derived, you are shipping override CSS or custom Blade, which erodes the "free" part of the value proposition.
  • Data-shape risk. The widget primitives are presentation-only; performance, caching, and authorization of the underlying queries are entirely yours. Most real incidents will be query-shaped, not widget-shaped.

Key questions

  1. Is a Filament panel already in production or on the near roadmap? If no, this package is not the decision — Filament is.
  2. Do we consume filament/widgets standalone or via filament/filament? (Default answer: the meta-package, unless we explicitly want widgets without panels.)
  3. What is the Tailwind/design-system posture — adopt Filament's theme, or fund an override layer?
  4. How many widgets per dashboard, and what is the p95 query cost of each? A 15-widget dashboard is a 15-query-per-render problem regardless of package quality.
  5. Who owns widget governance (naming, grouping, permission mapping, chart vs. table conventions) once more than one team ships dashboards?
  6. Does anything require real-time? If yes, scope Laravel Echo/polling separately — widgets do not provide it.
  7. What is the upgrade budget for the next Filament major?

Integration Approach

Stack fit

  • Native: Laravel + Filament + Livewire 3 + Tailwind.
  • Workable: Laravel + Livewire 3, using widget view components inside existing dashboards.
  • Not a fit: non-PHP front ends, SPAs where the dashboard is React/Vue, or teams standardized on a no-code BI tool (Retool/Appsmith/Metabase) for internal reporting.

Migration path

  1. Inventory existing dashboard screens and classify each block as stat / chart / table / bespoke. Anything landing in the first three is a widget candidate; bespoke blocks stay custom and should be explicitly parked.
  2. Baseline — pick one low-risk dashboard (internal ops or admin home) rather than a customer-facing surface.
  3. Extract, don't rewrite. Wrap the existing query in a widget class and reuse the current view where possible. The first migration's success criterion is behavioral parity, not visual improvement.
  4. Establish the pattern — one base widget class, one naming convention, one place where permissions and cache TTLs are declared.
  5. Expand to remaining dashboards, then retire the hand-rolled layout code.

Compatibility

  • Requires Livewire 3.x and Filament's current major. Verify against your pinned Laravel and PHP versions before committing — Filament's floor tends to move with Laravel's.
  • Tailwind must be in the build; if your app already ships Filament, this is satisfied by definition.
  • Blade view resolution needs a stable convention; set protected static string $view explicitly rather than relying on inference.
  • Confirm the release tag you pin actually resolves in your registry (the stated release date is ahead of today's date — treat it as a metadata anomaly to verify, not a fact to plan around).

Sequencing

  • Phase 1: install, one static widget, wire into the dashboard, ship behind a flag to internal users only.
  • Phase 2: dynamic data binding + authorization (canView()/shouldRender() mapped to policies).
  • Phase 3: caching and query tuning; add defer/lazy loading where render cost is measurable.
  • Phase 4: interactive widgets (filters, actions) and any user-configurable layouts.
  • Phase 5: optional real-time via polling or Echo — only if a product requirement justifies it.
  • Gate Phase 3+ on measured dashboard response time, not on enthusiasm.

Operational Impact

Maintenance

  • Widgets centralize dashboard logic, which reduces duplicate query and formatting code — a genuine maintenance win at 5+ dashboards.
  • The cost is version coupling: widget updates arrive with Filament releases, and each major upgrade is a scheduled project, not an opportunistic bump. Fund it in the roadmap a quarter ahead.
  • Custom subclasses drift from upstream conventions. Keep the custom surface thin (compose and configure; avoid forking widget internals) so upgrades stay mechanical.

Support

  • Documentation is adequate for the happy path and lives inside Filament's docs, not this repo. Non-Filament usage is effectively undocumented.
  • Debugging is split-brain: rendering issues are Livewire/Blade, styling issues are Tailwind/Filament theme, data issues are yours. Train the team to triage in that order before escalating.
  • No vendor SLA flows from this package. If dashboards become customer-facing and revenue-adjacent, evaluate Filament's commercial support as a separate line item.

Scaling

  • Vertical load scales with query count × widget count per render. Set a soft budget (e.g., ≤10 widgets per page, ≤100ms aggregate query time) and enforce it in review.
  • Cache at the data layer, not the widget layer — widget-level caching fights Livewire's lifecycle and produces stale-looking UIs.
  • Team scaling benefits from the shared vocabulary (stats/chart/table, groups, Widget::group()), which shortens onboarding for new dashboard work. The corresponding risk is widget sprawl: dozens of one-off widgets with divergent conventions. Mitigate with a registry and a PR checklist.

Failure modes

  • Slow dashboard: N+1 or unindexed aggregate queries behind each widget. Detection is trivial (timing per widget); prevention requires review discipline.
  • Stale data: no built-in refresh. Users lose trust quickly. Decide polling vs. manual refresh per dashboard and state it explicitly in the UI.
  • Authorization gaps: widgets inherit the panel's auth, but not your row-level policies. A widget that queries without scoping is a data-leak path — this is the highest-severity failure mode and deserves a dedicated test.
  • Styling collisions: Tailwind class conflicts with app-level CSS, producing inconsistent widgets. Resolve with theme configuration, not !important.
  • Silent empty states: a failing query renders as an empty chart rather than an error. Require explicit empty/error states on every widget.

Ramp-up

  • Filament-fluent engineers: hours. Livewire-only engineers: 1–2 days (mostly Filament conventions, not the widget API). Design-system owners: half a day to agree the theming posture.
  • Onboarding path: one static stats widget → one chart with a real query → one interactive widget with a filter → one widget with a policy check. Four artifacts cover ~90% of what teams actually build.
  • Scaffolding is available via Filament's generators; the real time sink is data plumbing and permissions, so scope estimates should be weighted there, not at the UI layer.
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.
ably/pubsub-server
mstfkhazaal/defender
mfonte/base62x
karnoweb/metapilot
tobya/bcsapiwrapper
swalker2/cpanel
vish4395/laravel-translation-manager
morningtrain/economic
teksite/systeminfo-laravel
atomcms/voting
run6/weather
siokas/laravelembeddirectives
adamlien/pkuuids
gilsonsouza/lara-doc-generator
manelgavalda/enrollment_mobile
unabomber/timezone
delatbabel/contacts
astritzeqiri/g-recaptcha
kevinongko/laravel-genode
developeruz/laravel-analytics