ruwork/object-store
A lightweight object storage abstraction for Laravel and PHP applications. Store, retrieve, and manage objects through a clean, consistent API with pluggable storage backends. Integrates with Laravel's container and configuration, keeping persistence logic decoupled from your domain code.
Storage/Flysystem, or buy a managed service (S3, Cloudflare R2, GCS). The package is a data point on the “build” side of that trade-off, not a recommendation to build.Consider it only in these narrow situations:
Do not adopt it as a production dependency. Concretely:
Storage facade + league/flysystem (with league/flysystem-aws-s3-v3 or equivalent adapters) is the maintained, battle-tested answer. For media workflows, spatie/laravel-medialibrary covers conversions, collections, and responsive images. For raw S3 isolation, AWS SDK v3 behind your own adapter.To executives: This package is unmaintained and has no user base, so we will not be taking it on as a dependency — that would mean owning a dead library that touches our customer data. The useful takeaway is the architectural pattern: keep file and object storage behind an interface so we can switch cloud providers without a rewrite. That protects our negotiating position with cloud vendors and makes future media features cheaper to ship. Recommendation: adopt the pattern, use Laravel’s supported storage stack, and reject the package.
To engineering: Treat this as design input only. Read the interface, note where it’s clean (single storage contract, driver-style backends) and where it’s thin (no visible tests, no versioning, archived). If the team wants the abstraction, implement it as a thin adapter over Illuminate\Support\Facades\Storage/Flysystem so the concrete S3/GCS/local driver stays replaceable and testable with an in-memory fake. If we have an existing service already importing this package, put it behind a first-party interface in one sprint, pin the dependency with a composer.json security note, and schedule the swap — do not refactor business logic around an artifact nobody maintains.
Bottom line: the package is a rejected build-vs-buy input, not a candidate. Budget the decision, not the dependency.
How can I help you explore Laravel packages today?