slimani/filament-media-manager
A media manager plugin for Filament v4 and v5 with hierarchical folders, tagging, search and filtering, previews, and configurable multi-disk storage. Built natively for Filament forms, tables, and actions with a smooth, responsive browser UI and per-field or global disk settings.
Architecture fit
media_files, media_attachments, folders, and tags tables, plus an opt-in tenant_id column, and expects your domain tables to take foreign keys pointing at media_files. That means adopting it is a schema decision, not just a composer require.renderRichContent(). That is a reasonable design for signed-URL disks, but it means stored content is only correct when rendered through the plugin's resolver.Integration feasibility
composer require, publish migrations, ->plugin(MediaManagerPlugin::make()), add InteractsWithMediaFiles to models, add MediaPicker / MediaColumn / infolist entries to resources. A competent Filament developer can produce a working demo in a day.media_files, and auditing every resource whose forms/tables touch media.theme.css with both @import and Tailwind @source for the plugin path — a build-pipeline change that will silently produce broken layouts if missed.Technical risk
RichEditor internals (HasRichContent, InteractsWithRichContent) and file-attachment providers.nullOnDelete on media_files FKs means deleting an asset silently blanks a user's avatar/CV with no error surfaced to the operator.Key questions
composer.json.)media_attachments path and avoid foreign keys into a vendor table?media_files, or leave legacy media where it is and dual-render?Stack fit
media_files vs. media), so plan for two systems or a migration — not silent coexistence.Migration path
media_files with an idempotency key and keep the source rows intact for a defined rollback window.media_files on high-value tables until Phase 3 sign-off.nullOnDelete behavior should be reviewed before any FK is treated as authoritative.migrate and keep FK additions in a separate, revertible migration.Compatibility
^4.0|^5.0), Laravel, PHP, and Spatie Media Library versions against our lockfile before the spike, not during.tenantColumn is used — an easy sequencing mistake to make.Sequencing
Maintenance
@source paths are vendor-relative; theme refactors or vendor directory changes can silently strip utility classes.Support
"slimani/filament-media-manager": "x.y.*") with no floating constraints.docs/, changelog, releases, screenshots), which reduces ramp-up and support load for common questions.Scaling
media_files with folder trees: watch recursive folder statistics and tree loading as folder count grows into the thousands; these are the likely first performance cliffs. Load-test with a realistic folder count, not 20 folders.renderRichContent() resolves signed URLs at render time — fine for correctness, potentially expensive on long documents or list views with many rich-text columns. Cache or pre-render if it lands on hot pages.Failure modes
avatar_id/cv_id with no operator-visible error.renderRichContent() will emit dead image URLs on private disks.media naming convention.@import/@source producing a visually broken but functionally "passing" panel.Ramp-up
media_files schema has become load-bearing.How can I help you explore Laravel packages today?