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

Nova File Upload Field Laravel Package

genealabs/nova-file-upload-field

A Laravel Nova field that adds a flexible file upload input to your resources, with support for multiple files, storage disks, and customizable validation. Drop it into any Nova resource to replace the default file field.

View on GitHub
Deep Wiki
Context7

Product Decisions This Supports

  • Build vs. buy for admin upload UX. The decision this package actually informs is narrow: when do we stop relying on Nova's native File/Image fields and pay for something better? For most teams the answer is "not yet." This package earns attention only where a written requirement is genuinely unmet — private-disk storage rather than Nova's historically hardcoded public disk and nova/ prefix, a custom storage path, storing the original filename alongside the object key, multi-file upload on a single attribute, or per-field validation rules and authorization. Everything else it offers — drag-and-drop, previews, any-file-type support, drop-in field API — is close to parity with what Nova already ships. Scope the requirement before scoping the package.
  • Roadmap positioning for internal tooling. Admin-panel file handling is low-differentiation work. That a 53-star MIT field exists at all is a mild signal that Nova's native uploader has real configuration and UX gaps — useful context when sizing an "admin usability" or "ops tooling" epic, but not grounds to pull that work forward on its own. The honest roadmap posture is a backlog line item describing a known shortfall, not a strategic initiative.
  • Upgrade-risk line item. The package is archived, last released 2024-05-11 (0.6.0 added Laravel 11 compatibility), with 0 dependents. For any product already using it, that is a concrete blocker in Nova 5 / Laravel 12 upgrade planning and belongs in the risk register with a replacement estimate attached. The important detail for planning is the failure mode: a stale compiled Vue component typically breaks silently in the browser — a blank or non-reactive field an operator discovers — rather than failing loudly at build or boot. Budget diagnosis time, not just migration time.
  • Dependency-policy precedent. Adopting this sets a precedent for carrying unmaintained dependencies in the admin tier. The real PM decision is less about this field and more about whether "archived but MIT" is an acceptable category in our dependency policy at all. Making that call explicitly once saves the same debate on the next package that shows up — and file upload is a category where we will keep showing up.
  • Reference implementation, not a product bet. If the decision is to build in-house, the repo is a small, readable, MIT-licensed example of the Nova field API and the upload-handling pattern — cheaper to study than to depend on. Treat it as design input to an engineering estimate, not as a component to ship.
  • Not market validation. With 53 stars, zero dependents, and an archived repo, adoption data should not be read as evidence of customer demand for a media-management direction. The high opportunity score (4.57) against a low composite score (0.3875) says the capability is in demand while this implementation is not healthy — an argument for building or forking the capability, not for taking on this artifact unmodified.

When to Consider This Package

Consider it only when all of the following hold:

  • You are on an older Nova/Laravel line where the native File/Image fields provably do not meet a written requirement — most credibly private-disk storage with a DB-held object key, since native Nova historically assumed the public disk and nova/ prefix.
  • The admin panel is internal, low-traffic, and non-critical — uploads are not tied to compliance, PII handling, regulated records, or revenue paths.
  • The team is willing to fork and vendor it: a named owner, a pinned version via VCS or path repository, CI, and a written replacement plan — because upstream is archived and nobody will patch it.
  • The alternative (an in-house field, roughly 2–5 engineering days plus tests against the Nova field API) costs more than the carrying risk of an unmaintained dependency.
  • A timeboxed spike has confirmed it installs and works on your exact Nova/Laravel/PHP versions. There is no validated compatibility matrix and no community evidence to lean on, including no verified Nova 5 support.

Look elsewhere — or use Nova's native fields — when:

  • You are on a currently supported Nova release and the built-in fields cover the case. They inherit Nova's own support and compatibility guarantees for free.
  • You need long-term maintenance, security patching, or an escalation path. Archived status is disqualifying for anything customer-facing or regulated; file upload is one of the highest-risk endpoints in any application — MIME sniffing, extension allowlists, size caps, path handling, and storage ACLs all become your responsibility the moment upstream stops.
  • You need S3 presigned direct-to-storage uploads, signed URLs, virus scanning, image transformations, accessibility, or i18n. A 53-star archived field should not be trusted to deliver any of these, and server-proxied uploads will hit post_max_size, upload_max_filesize, and reverse-proxy body limits as volume grows.
  • Your dependency policy requires active maintenance, recent releases, or meaningful downstream adoption. Zero dependents means zero community safety net and no ecosystem pressure to fix defects.
  • Your requirement is a media/DAM pipeline — variants, conversions, rich metadata — rather than a single stored file. That is the wrong tool category entirely; a maintained media library is the better fit.

How to Pitch It (Stakeholders)

Executives: A small, free, MIT-licensed add-on that improves file uploads inside our Laravel Nova admin panel. It is internal tooling, not part of the customer-facing product, so there is no license cost and no direct revenue exposure. The catch is lifecycle: the project is archived, has no maintainer, and has essentially no adoption (53 stars, zero dependents), so it creates future migration cost and a hard dependency on a specific Nova version. Recommendation: do not adopt it for new work — Nova's built-in upload fields are adequate for the majority of cases. If it is already in use, budget a short replacement effort and avoid upgrading Nova until it is removed.

Engineering: It is a Nova custom field — a PHP Field subclass plus a compiled Vue component registered through Nova's asset pipeline — wrapping a FilePond-based uploader with configurable disk, path, accepted types, size limits, previews, and optional original-name storage. The genuine capability gap it fills is private-disk uploads, where native Nova historically assumed the public disk. Functionality is modest and reproducible in-house in a few days against Nova's field API and existing frontend upload components, which removes the archived-dependency risk entirely. Treat the repo as a reference implementation rather than a dependency. Note the setup landmine: it depends on the private laravel/nova package, so resolution only works where the Nova repository is already configured — a ticket problem, not a code problem. If adopted as a stopgap: fork it, pin the exact version, record an owner, write a runbook covering disk configuration and upload limits, and open a ticket to replace it before the next Nova major. Wrap it behind a thin internal field or trait so the eventual swap is a one-file change, and add feature tests around upload, validation rejection, and deletion cleanup — orphaned files are a real cost at volume, so confirm whether prunable() actually covers them.

Bottom line: Low cost, low adoption, no support. Default to native Nova fields; adopt this only as a short-lived, explicitly owned stopgap in a legacy internal admin where private-disk storage is a hard requirement — and plan its removal at the same time you approve it.

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.
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator
equipc/laravel-email-database-log
adedsec/nova-translated-labels