softavis/flysystem-cloudflare-bundle
A Symfony bundle that integrates Flysystem with Cloudflare R2 object storage, making it easy to configure R2 as a filesystem for uploads, downloads, and file management through familiar Flysystem APIs.
Storage facade, which is what makes the R2 decision (usually driven by egress pricing, not features) cheap to reverse. That reversibility, not the package itself, is the PM-relevant fact.Storage::disk() calls.Caveat for this release: 0.1.2 ships with no release notes — the changelog is a bare diff link. That is a process signal, not a feature signal. Treat version number, repo activity, test coverage, license, and open issues as the real evidence, and confirm scope yourself — the -bundle naming suggests Symfony, so verify it actually targets the Laravel/Flysystem integration you need.
Consider it when:
Storage facade, and have decided (or are seriously evaluating) Cloudflare R2.Storage::disk('r2')->put(...) to work without custom SDK code.Look elsewhere when:
league/flysystem-aws-s3-v3 pointed at an R2 endpoint is the best-supported option and needs no third-party adapter. This package must justify itself on convenience alone.-bundle suffix signals Symfony, which would make the wrapper dead weight in Laravel (the reusable asset would be the adapter class only).To executives (one paragraph): We're evaluating a small open-source adapter that lets our Laravel app store files on Cloudflare R2 instead of S3. The business case isn't the package — it's R2's egress pricing, which removes the bandwidth charges that grow with usage. The package is low-risk if we isolate it: it's a thin layer over an abstraction we already use, so replacing it is measured in hours. Recommendation: a timeboxed one-day spike and a pinned version, not a commitment.
To engineering (the ask):
0.1.2, never a caret range at 0.x), and exercise upload/read/delete/visibility/signed URLs against a real R2 bucket.Bottom line: worth a spike, not worth a dependency you can't remove. Fund it as a cost-optimization experiment with a one-day cap; the decision that matters is R2, and this package is a replaceable part of executing it.
How can I help you explore Laravel packages today?