sociallydev/spaces-api
Laravel integration for DigitalOcean Spaces object storage. Provides a simple, configuration-driven API for uploading, retrieving, and managing files in S3-compatible Spaces buckets, making cloud file storage easy in PHP applications.
Storage::disk('s3') (Flysystem + AWS SDK) pointed at the Spaces endpoint, which is typically a ~10-line config change and zero extra dependencies.Storage facade so the driver choice is reversible. Adopting this package without that abstraction is the anti-pattern; adopting it behind the facade is a low-risk accelerator.Consider it when:
league/flysystem-aws-s3-v3 configuration, and you value that readability over dependency minimalism.Look elsewhere when:
Storage::disk('s3') with a custom endpoint, key, secret, and use_path_style_endpoint covers the common cases with no additional dependency and full first-party support and documentation.PM recommendation: Run a half-day spike comparing this package against the native S3 disk driver. Default to the native driver unless the spike shows a concrete ergonomic win. If you adopt this package, hide it behind Storage and add a one-page migration note to the tech-debt backlog.
To executives: This is a small, MIT-licensed PHP library that connects our app to DigitalOcean Spaces object storage — the cheap, egress-friendly alternative to S3. It is not a strategic bet; it is a speed lever. The business case is margin (Spaces includes egress in its base price) and cycle time (file features ship in days, not weeks). The principal risk is that it is a small, single-maintainer project last updated in late 2023, which is why I'd recommend we use it only behind our existing storage abstraction so we can swap it out without a rewrite.
To engineering: It's a convenience wrapper over S3-compatible storage. Before we adopt it, confirm what it does not do — multipart uploads, presigned URLs, lifecycle rules, versioning — and verify it against our Laravel version. The honest baseline is that Storage::disk('s3') with a Spaces endpoint may already cover 90% of this with first-party support. If we adopt it, it goes behind the Storage facade with a documented exit path; no direct calls to the wrapper from controllers or models.
How can I help you explore Laravel packages today?