codedor/filament-media-library
Filament Media Library gives your admin panels a full media manager: upload, browse, search, and organize files, then attach them to your models via Spatie Media Library. Includes a reusable picker, image conversions, and a clean, native Filament UI.
Architecture fit. wotzebra/filament-media-library is a Filament panel plugin that layers a media-grid UI and attachment management over Laravel (almost certainly over Spatie's laravel-medialibrary). v4.7.0 adds one config-driven extensibility point (configurable attachment model) and one UI layer improvement (responsive grid, titles, thumbnail fallback). The configurable model aligns well with teams using a domain-model-per-aggregate approach or multi-tenant model scoping, since it lets the app subclass the package's base attachment model without forking. The grid changes are presentation-only and sit within Filament's asset/table rendering, so they do not alter the data model.
Integration feasibility. Low effort: composer require and plugin registration in the panel provider. The model override is expected to be a config key resolved at container/bootstrap time, requiring no schema change if the subclass reuses the package's default table. The grid is pure UI — no migration. The main feasibility gate is Filament major-version compatibility, not these two PRs.
Technical risk. Low, but non-zero on PR #88. Swapping the model class is the only change that can cause boot-time failure (class-not-found, container binding mismatch) or silent data divergence if a subclass changes table, casts, fillable, or relationship definitions. Policies and observers that target the base class may not apply to the subclass unless registered explicitly. PR #89 is cosmetic but can break app-level CSS overrides and visual snapshot tests.
Key questions.
Stack fit. Only relevant to Laravel + Filament stacks. Existing Spatie Media Library adopters get the most value, since this is a UI/config layer on top of that storage model. Non-Filament Laravel apps should not adopt it.
Migration path. From v4.6.1 → v4.7.0 is a semver-minor bump; expect composer update to suffice with no DB migration. If adopting the configurable model, publish/refresh the package config and point it at a subclass that explicitly mirrors the base model's $table, $fillable, $casts, and media relationships. Treat that as an opt-in change, not a default.
Compatibility. Verify the composer constraint against our Filament and PHP versions before merging. Confirm the subclass stays Liskov-compatible with the base (method signatures, relationship names) so package internals and our policies/observers keep working.
Sequencing. (1) Branch and composer update; (2) run the existing test suite and a media CRUD smoke test; (3) publish/update config and, if needed, wire the custom model behind a feature flag; (4) visual QA of the grid at all breakpoints in staging, checking app CSS overrides; (5) roll out grid first (low risk), model configuration second (higher blast radius).
Maintenance. Ongoing maintenance is low; the main recurring cost is tracking Filament major bumps, not this package's minor releases. The new config knob must be documented in the runbook so future engineers know the attachment model is swappable and where it is set.
Support. Community package with a single active maintainer (@jyrkidn authored both PRs). Single-maintainer risk is real for a core admin dependency — pin the version, and be prepared to vendor-fork if upstream stalls. Both changes are small and reviewable, which helps.
Scaling. The grid improvements reduce broken-image and layout incidents at scale (real breakpoints, thumbnail fallback). Watch for N+1 queries if card titles resolve attachment relations per tile, and ensure Spatie conversions are queued rather than synchronous on large libraries. The configurable model enables tenant-scoped attachments, which helps isolate large multi-tenant media sets.
Failure modes.
Ramp-up. Low for developers already comfortable with Filament (roughly half a day to integrate and validate); the model-layer customization is where most of the learning and review time will go.
How can I help you explore Laravel packages today?