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

Laravel Attachments Laravel Package

aniftyco/laravel-attachments

Attach files to any Eloquent model in Laravel with a clean, expressive API. laravel-attachments stores attachments polymorphically with file metadata, so any model can own images, documents, or other files on any storage disk—no boilerplate or custom migrations required.

View on GitHub
Deep Wiki
Context7

Product Decisions This Supports

  • Feature scoping and time-to-market. If a roadmap item is essentially "let users upload a file against a record" (KYC documents, expense receipts, support-ticket screenshots, profile avatars, signed contracts), this package collapses what is normally a 1–2 sprint slice of bespoke code into a declarative model-level configuration. That is a direct schedule win on a recurring, low-differentiation feature.
  • Build vs. buy on file lifecycle management. Most teams hand-roll an upload trait, and the bugs that follow are predictable: orphaned files on update, missing cleanup on delete, inconsistent validation rules, path handling drift between controllers. The package's actual value proposition is not uploads — it is automatic validation and cleanup tied to the model lifecycle. That is a solved problem we should not be paying engineers to re-solve.
  • Roadmap sequencing. Adopting this defers (or removes) the need to build an internal media/asset service for the next few quarters. It buys runway: we can revisit a proper media layer when a feature genuinely requires transformations, multi-file collections, or cross-model asset reuse.
  • Infrastructure fit. It rides on Laravel's filesystem abstraction, so local/S3-compatible storage remains a config decision rather than a code decision — no new vendor, no new storage contract, no new data store to operate.
  • Risk posture on dependency selection. Stars (13) and the composite score (~17) are a clear signal this is a small, low-adoption package. That should shape the decision less as "don't use it" and more as "use it behind a thin internal boundary and budget for ownership." MIT licensing means the fork-and-own fallback is genuinely available, which materially lowers the downside.

When to Consider This Package

Adopt when:

  • The feature needs one file per field on a small, stable set of models — the exact shape this package models.
  • Requirements are store, validate, serve, delete. No image conversions, no responsive variants, no PDF rendering, no video transcoding.
  • The team is already on a modern Laravel version with standard filesystem disks and no existing media library.
  • Engineering capacity is the constraint and the deliverable is customer-visible rather than infrastructural.
  • We are willing to pin the version, wrap usage in our own trait/service, and accept maintenance ownership if upstream goes quiet.

Look elsewhere when:

  • We need multiple ordered files per field, collections, tags, or conversions/thumbs — reach for spatie/laravel-medialibrary (orders of magnitude more adoption, image manipulation built in, larger hiring pool of engineers who know it).
  • Files are a first-class domain entity needing auditability, version history, access control, or reuse across records. A model-field binding will fight you here.
  • Automatic cleanup-on-update/delete is risky for us: shared files, soft deletes, retention/legal-hold requirements, or references from other tables. Silent deletion is a feature until it is an incident.
  • We need vendor support, an SLA, or a security-response commitment.
  • Storage/egress cost modelling matters at scale and we need CDN-level transformation.

Before committing, run a 1–2 day spike to verify: exact cleanup semantics on update and soft delete; multi-tenant and disk-isolation behaviour; validation rule extensibility (MIME, size, dimension limits); URL generation and signed/temporary URL support for private files; behaviour on bulk/failed operations; and the actual state of the issue tracker and commit cadence.

How to Pitch It (Stakeholders)

To executives: This is a small, focused, MIT-licensed Laravel package that handles file attachments on our database records — upload, validation, and automatic deletion. It removes roughly a sprint of undifferentiated engineering work per upload-related feature and eliminates a well-known class of bugs around orphaned and stale files. Cost is near zero; the risk is dependency maturity — it has a very small user base — so we mitigate by wrapping it behind our own interface, pinning the version, and treating the option to maintain a fork as a real fallback rather than a hypothetical.

To engineering: It gives us declarative, model-level attachment handling with validation and lifecycle cleanup instead of another hand-rolled upload trait — fewer bespoke code paths, consistent behaviour across models, no new infrastructure since it uses the standard filesystem layer. The trade-offs are explicit: it is field-bound, not a media library — no conversions, no multi-file collections, no cross-record asset reuse — and with 13 stars we own the integration risk. Proposal: adopt behind a thin internal abstraction so swapping to a fuller media library later is an afternoon, not a migration. We will spend a short spike confirming deletion semantics, private-file URL handling, and validation extensibility before we commit.

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.
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console
pnscripts/filament-broadquill-lite
pnscripts/laravel-sentfold-lite
vleap/mx-sdk-laravel-internal
twidpay/utils
htetmyathlaing/scout-elasticsearch-driver
artisan-toolbox/front-awesome
ls/client-assistant
users-au/laravel-client
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core