infinety-es/nova-filemanager
Infinety Nova File Manager brings a full-featured file browser to Laravel Nova. Manage files across multiple disks: upload, rename, move, delete, create folders, and preview images. Add FileManager fields to resources for easy media handling in Nova's admin panel.
Build vs. buy for admin file management. The decision that matters here is small and real: do we spend engineering days constructing a bespoke Nova file browser, or do we install a package that already gives editors upload, folder creation, rename, move, copy, delete, search, multi-select, and image preview? For a non-differentiating internal capability, the buy side of that ledger is clearly cheaper—if the Nova compatibility gate is passed.
Scoping a narrow, reversible content-operations roadmap item. This supports a contained commitment like "editors can manage blog/marketing images and PDFs from the admin panel." It explicitly does not support a strategic digital asset management initiative, a customer-facing document portal, or a library with retention/compliance requirements. If those appear on the roadmap, treat them as a separate initiative with a separate decision; don't let this package become the accidental foundation of one.
Reuse over rebuild for embedded asset pickers. Because the tool exposes nova-vendor/filemanager endpoints, it can back a CKEditor/TinyMCE file-browser button or an iframe dialog for legacy CMS content. Asset selection is a recurring editor workflow, and reusing this backend is a cheap product win—provided the route names are confirmed against the installed version, since they have moved between releases.
A version-gate decision that belongs to product, not just engineering. The last tagged release is 2.8.3 (2020-08-21) and targets the Nova 2/3 asset pipeline. On Nova 4/5 the tool may mount yet render a blank panel. "Which Nova version are we on, and will we fund manual asset publication or a frontend fork?" is a genuine roadmap/ownership question with a real (roughly one-day) cost attached.
Risk posture for a low-adoption dependency. 218 stars, zero listed dependents, and a single patch release in 2020 mean observable production adoption is unproven. Adopt as a time-boxed pilot or a fork candidate with a named owner—never as a default strategic component.
Multi-tenancy is a product boundary, not a config detail. Per-user and per-tenant scoping is not built in. In a multi-tenant product, the default behaviour exposes every tenant's files to every tenant. Scoping must be designed and implemented before the first customer is onboarded, not retrofitted.
Security decisions worth making explicitly. Extension allow-lists are the only upload guard, and the media disk must not be web-executable. A .php upload into a served directory is a remote shell. This shapes both the architecture and the review checklist.
Backup policy as an operational commitment. There is no trash and no versioning; deletion is permanent and immediate. Adopting the tool implies committing to a nightly backup of the media disk and a scheduled cleanup of abandoned temp uploads, on day one.
Consider it when:
storage/app/public/media), making path traversal a non-issue by construction rather than by validation.canSee() gating plus a policy provides the real authorization boundary, and someone has reviewed extension allow-lists and the web-executability of the disk.2.8.3, not a caret range) and the team accepts that upgrades are migrations.Look elsewhere when:
rename() behaviour on non-local drivers need explicit testing.Before adoption, get written answers to: which Nova, Laravel, and PHP versions are tested; which disks are in scope (local only, or S3-compatible/SFTP); who owns the fork if the package stalls; and what the fallback plan is on Nova 4+ if asset registration fails.
To executives: This is a small, reversible convenience purchase, not a platform bet. It embeds a file browser in our existing admin panel so content editors can upload and organise images and documents without us building that UI. It costs effectively nothing under MIT and saves days of internal tooling work on a capability that doesn't differentiate us. The trade-off is honest: the package has been quiet since 2020, so we're adopting it as a time-boxed pilot with a named internal owner, pinned to an exact version, and a nightly backup in place of the undelete feature the tool lacks. If it breaks, we fall back to a small custom tool—the sunk cost is days, not quarters.
To engineering: You get a Finder-style tool over any Laravel filesystem disk, plus REST endpoints at nova-vendor/filemanager that we can reuse for a CMS picker. Three things to prove on day one in a scratch environment: does the tool render on our Nova version, do uploads actually land, do thumbnails resolve. If any of those fail on Nova 4+, you're in fork-and-rebuild-the-frontend territory—budget a day and tell us before it's wired into anything. Point it at a dedicated disk rooted at the media folder, so path traversal is prevented by the filesystem driver rather than by our validation. Add canSee() for the UI and a policy for real enforcement. Lock down extension allow-lists and confirm the media disk isn't web-executable. Expect some sharp edges: config caching will make you think it's broken when it isn't, a missing storage:link explains most "uploads succeed but images 404" reports, and large-upload failures are usually one of the three separate size limits (PHP, Nginx, WAF) surfacing as a generic 500 rather than a friendly error. Store paths through a Media model, not raw strings on content tables, or a rename will silently break someone's article. We're pinning 2.8.3 and treating any bump as a migration.
How can I help you explore Laravel packages today?