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 Gridstack Dashboard Laravel Package

invaders-xx/filament-gridstack-dashboard

A Filament plugin that brings GridStack.js drag-and-drop dashboards to your admin panel, letting users arrange, resize, and persist widget layouts with ease.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • The package (invaders-xx/filament-gridstack-dashboard) is a Filament plugin that layers GridStack.js on top of the Filament panel to deliver a drag-and-drop, resizable widget dashboard. It is additive to a TALL-stack application: it does not touch Eloquent models or business logic, so it slots in beside existing Filament resources and pages rather than competing with them.
  • Fit is good only if we are already committed to Filament as the admin surface and the requirement is genuinely "user-arrangeable dashboard." If the requirement is a fixed KPI dashboard, standard Filament widgets are cheaper and carry no third-party dependency.
  • v1.9's additions (canAccess, shouldRegisterNavigation, navigationLabel) are plugin-registration options. Their significance is that dashboard visibility and navigation presence can now be governed from the PanelProvider — the same place we already centralise panel configuration — instead of requiring page subclassing or conditional plugin registration. That closes the main architectural objection to adopting this package (an ungovernable, always-on dashboard page).
  • The canAccess option is the most architecturally meaningful: it aligns the dashboard with Laravel's Gate/Policy model, which is how we would want RBAC expressed in a Filament app.

Integration feasibility

  • Low-to-moderate. Standard Composer install plus plugin registration in the panel provider; front-end assets are published/served through Filament's asset pipeline, and layout persistence (wherever it lives) may require a published migration.
  • v1.9 is additive and non-breaking on its face: three new configuration keys, no signature changes, no deprecations, no removed methods. Semver minor bump is appropriate.
  • The real integration cost is not the package, it is the widget contract: we need to confirm what a "grid widget" must implement, whether standard Filament widgets can be reused as-is, and whether each widget declares its own default size/position.

Technical risk

  • Low for v1.9 itself. Additive config surface, single maintainer, small diff (one PR). No security-relevant surface introduced — but also note canAccess is now the only access control for the page, so a misconfiguration (e.g. defaulting to true while we assume it defaults to admin-only) is a self-inflicted exposure risk, not a package flaw.
  • Medium for the dependency overall. Single-maintainer, single-PR release cadence. Filament's own major-version churn (v3 → v4) will almost certainly require a corresponding plugin release; there is no evident guarantee that will land on our timeline. GridStack.js version drift between the bundled JS and the layout JSON schema is a latent breakage source.
  • Medium for persistence. User-arranged layouts are user data. If layouts are keyed on widget class names or indexes, refactoring a widget class silently corrupts or orphans saved layouts. This needs a migration story before we let real users arrange things.
  • Low for licensing/compliance. MIT-licensed dependency chain (Filament, GridStack.js), no copyleft or attribution concerns beyond standard notice retention.

Key questions

  1. Does canAccess accept a Closure (and receive the Panel/user), or only a boolean? Is it evaluated per-request or cached at panel boot?
  2. What is the default for canAccess when unset — does v1.9 change behaviour for existing installs? (Confirm: no.)
  3. Which Filament major version(s) does v1.9 target, and is there a published compatibility matrix?
  4. Are navigationIcon, navigationGroup, and navigationSort also configurable, or do we still need a page subclass for placement? v1.9 covers label but not group/sort.
  5. Does shouldRegisterNavigation also remove the route, or only the nav entry? (Nav-hidden-but-routable matters for our access-control review.)
  6. What is the widget contract, and how are layouts persisted and keyed?
  7. Are there automated tests in the repo, and does the PR adding these options include them?

Integration Approach

Stack fit

  • Assumes Laravel 10/11 + Filament v3 (confirm), PHP 8.1+, and a build pipeline that can accommodate published front-end assets.
  • Only panel(s) where we explicitly register the plugin are affected — registration is opt-in, which makes a scoped pilot trivial.

Migration path

  • composer require invaders-xx/filament-gridstack-dashboard:^1.9 — pin to the minor, not *, given the release cadence.
  • Publish any migrations/assets in the same deploy step, and add the asset-publish command to the deploy script so built JS is never stale relative to the Composer lock.
  • Register the plugin in the target PanelProvider with explicit configuration from day one:
    • canAccess bound to a dedicated permission (e.g. dashboard.grid.view) rather than a role name.
    • shouldRegisterNavigation(false) initially for the pilot, so the page is reachable by URL for the test group only and invisible to everyone else until we sign off.
    • navigationLabel set to our product's terminology, not the package default.
  • No data migration needed to adopt v1.9 from v1.8.1; the migration risk is in adopting the package at all (layout persistence), not in this release.

Compatibility

  • v1.9 is backward compatible with v1.8.1 by inspection (additive config keys only). Existing installs that set nothing behave as before — conditional on the defaults for the three new keys being permissive/legacy-equivalent. Verify before upgrading a production panel.
  • Forward compatibility with Filament v4 is unproven; treat as unknown and plan for it in the upgrade window.

Sequencing

  1. Spike in a dev branch: install, register, publish, render three widgets, confirm the grid persists across sessions and browsers.
  2. Add canAccess gating behind a new permission; add the permission to the seeder and to the admin role only.
  3. Pilot with the internal ops team (5–10 users) for one sprint; capture layout-loss and render bugs.
  4. Flip shouldRegisterNavigation(true) and navigationLabel, then expand to broader roles.
  5. Only after step 4: decide whether to invest in custom widgets or stay with the defaults.

Operational Impact

Maintenance

  • Small, single-maintainer dependency. Budget a recurring line item: track releases, read every changelog (they are short — v1.9 is one line), and re-test on each Filament upgrade. This is a "watch it monthly" dependency, not a "set and forget."
  • Pin the version in composer.json and rely on Renovate/Dependabot for visibility rather than auto-merge. A breaking change here manifests as a blank or broken dashboard page, which is high-visibility and low-severity.
  • Track the bundled GridStack.js version against the layout JSON we persist; a mismatch is the most likely source of a future silent break.

Support

  • Expect user tickets of the form "my dashboard reset" or "my widget moved." Root causes will be: browser cache serving stale assets, a widget class renamed/removed, or a permission change altering which widgets register.
  • Document for the team: how to reset a single user's saved layout, and how to disable the dashboard globally via canAccess as a kill switch. The v1.9 options make that kill switch a one-line config change and a deploy — previously it required code changes. This is the single biggest operational win in this release.
  • Escalation path to the upstream maintainer is via GitHub issues only; no commercial support. Assume we own fixes.

Scaling

  • Dashboard rendering is per-user and client-side-heavy (GridStack manipulates the DOM); server cost is a page load plus a layout read/write. Negligible at our scale.
  • Watch the layout write path: if every drag/resize is a synchronous persisted request, high-traffic admin panels could generate write amplification. Confirm whether saves are debounced and whether they hit a dedicated table or the users table (the latter would contend with auth writes).
  • Asset delivery: served through the app, so it inherits our CDN/cache headers. No unique scaling concern.

Failure modes

  • Assets not published / stale after deploy → unstyled, non-draggable grid. Mitigation: asset publish in the deploy script + cache-busting.
  • canAccess misconfigured → dashboard exposed to, or hidden from, the wrong cohort. Because v1.9 makes this the sole access gate, we must test the negative case explicitly (a non-privileged user hitting the route directly returns 403, not a rendered page).
  • Saved layout references a removed/renamed widget class → page error or silently dropped widget for affected users only, which is easy to miss in QA. Mitigation: treat widget class names as a contract; add a smoke test that renders the dashboard for a seeded user with a persisted layout.
  • Filament upgrade without a matching plugin release → plugin boot failure can take down the whole panel, not just the dashboard. Mitigation: the panel provider registration must be easy to comment out; keep the dashboard on a dedicated panel or behind a config flag so a Filament upgrade can ship with the plugin disabled.
  • Layout persistence collision with multi-tenancy → one tenant's layout visible to another if the key omits tenant ID. Verify before enabling for multi-tenant panels.

Ramp-up

  • For a developer already fluent in Filament, roughly 1–2 days to install, wire the plugin options, and validate the widget contract; another 2–3 days to build 3–5 meaningful widgets.
  • For a developer new to Filament, add 2–3 days for panel-provider, asset-pipeline, and widget-lifecycle concepts.
  • Product/design ramp-up is trivial — the drag-and-drop grid is self-explanatory; the only UX decision is default layouts per role, which we should ship rather than leaving every user with an empty canvas.
  • Net assessment of v1.9: update warranted, low risk. The release is small but materially improves governability (canAccess, shouldRegisterNavigation, navigationLabel), which was the main adoption objection. It does not resolve the open questions around the widget contract, layout persistence, or Filament v4 readiness — those remain gating items for production rollout, not for the upgrade itself.
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.
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console
pnscripts/filament-broadquill-lite
pnscripts/laravel-sentfold-lite
vleap/mx-sdk-laravel-internal
twidpay/utils
htetmyathlaing/scout-elasticsearch-driver
artisan-toolbox/front-awesome
ls/client-assistant
users-au/laravel-client
cgv/localized-resource