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

Files Laravel Package

fsi/files

FSI Files is a Laravel/PHP package for managing file uploads and storage. It provides a clean way to organize uploaded files, handle common file operations, and integrate file management into your application with minimal setup.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. The 3.0.3 changelog resolves the single most important open question from the prior assessment, and not in the direction assumed. A release that widens doctrine/dbal to ^4.0 and prepares for doctrine/orm ^4.0 tells us the package's persistence core is Doctrine, not Eloquent. That reframes everything: this is not a Laravel attachment helper layered over the Storage facade, it is a Doctrine-mapped file/attachment domain layer with (at most) a Laravel integration bridge, consistent with the FSi Open Symfony/Doctrine lineage. The earlier note that "FSi Open's Symfony work is a separate lineage and does not transfer" should be treated as withdrawn pending source verification. If our target service is Eloquent-first, the architectural commitment is now materially higher than assessed: we would be importing a second ORM's mapping conventions, entity lifecycle, and migration tooling alongside Eloquent, or maintaining a bespoke bridge. The "library vs framework" question is still unanswered, but the odds have shifted toward framework. Opportunity score remains the honest signal at ~36.

Integration feasibility. Mechanically still cheap to install; conceptually more expensive than assessed. The new constraints are the issue: doctrine/dbal ^4.0 is a permissive widening, and DBAL 4 removed a large surface of APIs that DBAL 3 code relies on (result-statement handling, schema APIs, type inference). A package that claims ^3 || ^4 is asserting compatibility across two materially different query layers — that assertion is only credible if CI actually exercises both. Similarly, "prepare for doctrine/orm ^4.0" is forward-looking, not shipped: it hints at a future major with removals. For us, the practical question is whether our PHP/Laravel version pairing can even coexist with DBAL 4 (symfony/console, cache, and migration-tooling constraints often bite first). Feasibility drops sharply for an Eloquent codebase and stays moderate for a Doctrine/Symfony service.

Technical risk. Unchanged in kind, marginally improved in one dimension and worsened in another. Improved: this is a real patch release with a named external contributor (@chives, PR #104), which is the first evidence of a contributor base beyond a single author — a small positive for bus factor and for the claim that the project takes dependency hygiene seriously. Worsened: a dependency-bound widening is exactly the class of change that passes review without test-coverage proof, and it silently expands the supported-version matrix we would inherit. Provenance risk (zero stars, zero dependents, no visible production usage, unknown licence, unknown CI) is untouched by this release — 3.0.3 answers none of the previously listed unknowns except "is anyone home?" Security surface is unchanged and still the dominant concern for a file-handling package: path traversal, MIME spoofing, SSRF on remote fetch, unbounded disk consumption, tenant-boundary leaks. Persistence lock-in risk is now higher, not lower, because the persisted schema is Doctrine-authored.

Key questions. Revised and prioritised: Does the package ship Doctrine entities as the primary model, and is there a supported Eloquent path at all — or only a bridge? Does CI test DBAL 3 and 4, or is ^4.0 an untested allowance? Which Doctrine ORM major is the tested baseline, and does the ORM 4 preparation imply an imminent 4.0 of this package? What is the release cadence behind 3.0.2 → 3.0.3, and who has merge rights? Licence, CI status, coverage, static-analysis level, open security advisories — all still open. Are migrations publishable, reversible, and ORM-agnostic? Does it tolerate multi-tenant key prefixes? Does it do anything spatie/laravel-medialibrary does not, for a Laravel shop?

Integration Approach

Stack fit. This is the decision point and it has moved. Assume Doctrine-first, Laravel-optional until proven otherwise. If the target service is Eloquent, treat fit as poor and stop early — dual-ORM coexistence is a permanent tax. If the target is a Symfony/Doctrine service, the picture inverts and this release is mildly reassuring: the maintainers are tracking upstream majors rather than pinning to a frozen past.

Migration path. Unchanged in shape, with a sharper seam. Our own FileService / FileRepository interface, a thin adapter, domain code unaware. Given the Doctrine core, the adapter must also own the entity-to-DTO translation so no Doctrine types leak into our domain. Budget three days rather than two. For existing files: inventory storage layout, idempotent backfill keyed by checksum, dual-read window with verification, cut over, decommission.

Compatibility. Pin an exact version — 3.0.3, not ^3.0. Then pin DBAL and ORM explicitly rather than letting the widened constraints float; the whole point of a ^3 || ^4 bound is that it will happily resolve to an untested combination on a future composer update. Verify: PHP version matrix, database support for the migration/entity set, storage drivers, whether post-processing is synchronous or queue-driven, and no config-key collisions from the service provider.

Sequencing. (1) Half-day source read, now specifically targeted at the Doctrine/Eloquent split, CI config, and whether DBAL 4 appears in the test matrix. (2) One-day spike behind the adapter exercising upload, download, delete, soft-delete, and a tenant-isolation case. (3) Two-week internal pilot on a low-risk feature with synthetic load. (4) Gate review against written exit criteria — coverage threshold, maintainer response time, security sign-off, licence clearance, and an ORM-major upgrade rehearsal (can we move DBAL 4 → ORM 4 without touching our code?). (5) Production rollout behind a flag with a rollback plan. Do not begin with customer-facing or regulated assets.

Operational Impact

Maintenance. Assume we own it, with one modest change: there is at least one active outside contributor, so "de facto sole maintainer" is now "small contributor pool whose throughput is unknown." Still budget for vendoring or a soft fork. The 3.0.3 pattern — widen a dependency bound, declare preparation for the next major — is a maintenance style, and it transfers risk downstream to consumers who must validate the combinations. Subscribe to releases; expect the ORM 4 track to produce a major of this package that we will have to schedule.

Support. No commercial support assumed. Escalation remains a GitHub issue to a small agency. Ask directly whether private security reports are accepted and what the turnaround is; the 3.0.3 release gives no evidence either way. Absent an answer, treat as unsupported code we are adopting.

Scaling. Unchanged: storage scales at the object store; the package's surface is metadata rows, N+1 hydration onto collections, and synchronous uploads occupying PHP workers. Doctrine adds its own consideration — identity map and unit-of-work behaviour under bulk attachment writes, and hydration cost on large collections. Verify streaming upload support and request-timeout behaviour before pointing it at large files.

Failure modes. The primary one still stands: no transactional boundary between object storage and the database, so a committed row with a failed PUT leaves a dangling reference and the reverse leaves an orphaned object. Design compensating cleanup jobs and a reconciliation report before the pilot. New in this release: dependency-resolution drift, where a routine composer update resolves DBAL 4 behind a package whose DBAL 4 path is untested — this surfaces as runtime query failures, not install errors, and is mitigated only by exact pinning. Others unchanged: disk exhaustion, MIME validation gaps, tenant-boundary bugs, upgrade-time migration drift.

Ramp-up. Unchanged for a competent developer, with a caveat: the learning surface is now Doctrine idioms rather than Laravel ones, so a Laravel-only team should double the estimate — a week to first productive commit, two to operate confidently. The real cost remains the surrounding scaffolding: reconciliation, monitoring, retention policy, backup and restore drills.

Recommendation. Prior recommendation tightens rather than relaxes. Adopt only as a contained, adapter-wrapped component, and only for a Doctrine-based target service; for an Eloquent-first Laravel service, 3.0.3 is sufficient evidence to decline rather than spike. Where fit holds, the default TPM posture remains spike, do not adopt until the key questions — especially the DBAL 4 test-coverage claim and the ORM 4 timeline — are answered in writing.

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.
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
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