oneduo/nova-file-manager
Oneduo Nova File Manager adds a complete file browser to Laravel Nova: upload, preview, rename, move, delete, and organize files and folders across multiple storage disks, with drag-and-drop uploads and a clean, native Nova interface for managing assets and media in your admin panel.
Architecture fit. oneduo/nova-file-manager is a Laravel Nova tool, which means it is not a general-purpose Laravel package — it is coupled to Nova's tool/field registration lifecycle, Nova's Vue frontend runtime, and Nova's authorization conventions. It fits cleanly only if Nova is already the admin surface for the application. If the team runs Filament, a custom Inertia/Vue admin, or a headless API, this package is not a candidate. The underlying abstraction is Laravel's filesystem layer, so from the application's perspective the tool is a UI over disks (local, S3, etc.) rather than a new storage engine — that is the right architectural shape and keeps blast radius contained.
Integration feasibility. Mechanically low friction: Composer install, register the tool in NovaServiceProvider, publish config/assets, point it at one or more configured disks, and wire authorization. The real gating factors are non-obvious: a paid Nova license is a prerequisite (a TCO line item separate from this MIT package), and Nova major versions have historically shipped breaking frontend changes that tools must chase. Compatibility with the specific Nova and PHP/Laravel versions in our stack must be verified before commitment, not assumed.
Technical risk. The dominant risk remains maintenance concentration. This is a small-maintainer package (159 stars); the move from v0.16.0 to v1.0.0 is a positive lifecycle signal — the maintainer is declaring the public API stable, which is exactly the commitment a 0.x package does not make. It is also a caution: under semver, everything up to 1.0.0 was explicitly unstable, so any config keys, disk/path conventions, or Nova field names we adopted during a 0.x pilot may have moved once, definitively, at this boundary. The new release note is a bare link to the v0.16.0...v1.0.0 compare view — no changelog body, no breaking-change list, no migration guide. That is a process gap as much as a documentation gap: we cannot assess upgrade impact from the notes, so the diff has to be read. Going forward the trade is favorable — post-1.0 breaking changes should arrive as a 2.0, which makes our pin-and-track policy cheaper than it was under 0.x.
The second risk is unchanged and unaddressed by this release: security surface. Any file manager is an upload endpoint, a path-resolution engine, and an authorization boundary. Path traversal, extension/MIME validation, and per-tenant or per-role folder isolation need code-level review rather than README-level trust — and a major bump is precisely when authorization code is most likely to have been reworked, so the review should cover the diff, not just the current state. MIT license means no warranty and no vendor recourse.
Key questions. What actually changed between v0.16.0 and v1.0.0 — is this a stability declaration over an unchanged API, or a breaking cleanup bundled with the version bump? Which Nova and Laravel/PHP versions does 1.0.0 support, and what is the project's upgrade policy when Nova ships a major? Does a 1.0.0 upgrade require re-publishing config and assets (vendor:publish --force) and does that overwrite our customizations? Does it support multiple disks and S3 (including presigned/direct upload), or does all traffic proxy through PHP? What authorization hooks exist — Nova policies, gates, per-folder ACLs — and can we isolate tenants? What are the upload size/timeout limits and validation rules? Is metadata stored in the database or derived from the filesystem? Are frontend assets prebuilt, or do we need a Node toolchain? What is test coverage on the upload and authorization paths? If we later replace the tool, are file references portable or does the package own the canonical path schema?
Stack fit. Assumes Laravel (9–11 range to verify), PHP 8.1+, and Nova 4.x/5.x. Runtime dependencies are modest — the main new operational surface is disk configuration and upload limits, not new infrastructure. If we customize the UI, we inherit a Vue build chain; if we consume it as shipped, integration is Composer + config only. Adopt at 1.0.0, not 0.16.x — there is no reason to onboard onto an explicitly unstable line when a stable one exists, and doing so avoids a second migration.
Migration path. If we are replacing Nova's native file field, Spatie Media Library, or another manager, the safe pattern is to treat this tool as a presentation layer and keep our own models as the source of truth for file references. That decouples us from the package's internal schema and makes a future swap a UI change rather than a data migration. Existing files need a path-mapping pass to the target disk, plus backfill of any metadata the tool expects. If we already piloted 0.16.x, treat the 1.0.0 step as a small migration in its own right, not a patch bump.
Compatibility. Gate on an explicit version matrix and pin both the package and Nova in composer.lock at ^1.0. Rehearse Nova major upgrades in staging with the tool installed — that is where breakage will surface first. The 1.0.0 declaration means we should now expect the package's own breaking changes to be rare and signposted; it says nothing about Nova's cadence, which remains the dominant churn source.
Sequencing. (1) Read the v0.16.0...v1.0.0 compare view and classify the diff: API-breaking, security-relevant, or cosmetic — this is a half-day task and it gates everything below. (2) Timeboxed spike on staging against representative disk configs (local + S3, large files, nested folders). (3) Security review of upload handling and authorization code before any production exposure. (4) Configure disks, limits, and policies. (5) Migrate/backfill existing file references. (6) Pilot with one team or one tenant boundary. (7) General rollout with a documented runbook and rollback. The opportunity score is low, which argues for treating this as commodity admin UI — adopt it thin, avoid deep customization, and do not let it become load-bearing architecture.
Maintenance. Pin to ^1.0 or an exact version, assign a named internal owner, and budget an explicit "patch or fork" path given the small maintainer base. Track upstream releases against Nova releases. The 1.0.0 tag improves our position here — API stability means routine upgrades should be lower-risk and our pin can be loosened over time — but it does not substitute for an internal owner, and a maintainer who ships a major with a one-line changelog is a maintainer whose releases we should read before adopting.
Support. Community-only, MIT, no SLA. Escalation is GitHub issues. If the 1.0.0 diff is undocumented, open an issue asking for a changelog entry or migration notes — cheap, and it tells us how responsive the maintainer is. The practical mitigation is a rollback plan (previous pinned version + asset cache) and the ability to fall back to Nova's native file field if the tool breaks during a Nova upgrade.
Scaling. The critical question is whether uploads proxy through PHP. If they do, upload_max_filesize, post_max_size, execution timeouts, and memory become hard ceilings, and large-file or high-volume use will need direct-to-S3 presigned uploads, chunking, or a separate ingestion path. Thumbnail/preview generation is a compute cost worth measuring. Storage growth and CDN egress are real TCO lines that a file manager makes easy to accumulate.
Failure modes. In rough likelihood order: (1) Nova upgrade breaks the tool; (2) misconfigured disk permissions or credentials; (3) authorization misconfiguration exposing files across roles/tenants; (4) upload failures at size/timeout boundaries; (5) orphaned files after deletes with no cleanup job, driving storage creep; (6) asset/registration failures after deploy — now with a specific sub-case for the 1.0.0 step, where stale published assets or an un-republished config can leave the tool half-upgraded and failing opaquely. Modes 1 and 3 are the ones that justify pre-adoption gates; mode 6 is the one most likely to bite on the upgrade itself.
Ramp-up. Developers need working Nova knowledge (and Vue if customizing); ops need a disk/ACL runbook. Realistic ramp for a small team: one sprint for the compare-view review, spike, and security review, one sprint for hardening, migration, and rollout — assuming Nova is already in place. Add a day if we are carrying a 0.16.x pilot across to 1.0.0. If Nova is not already in place, the true cost is the Nova license and platform adoption, not this package, and the decision should be made at that level.
How can I help you explore Laravel packages today?