carlosocarvalho/flysystem-cloudinary
Flysystem adapter that brings Cloudinary storage to Laravel's filesystem abstraction. Use the familiar Storage facade to upload, retrieve, and manage images and files on Cloudinary, combining cloud-based media delivery with Laravel's simple, driver-based file handling in your PHP app.
Storage facade instead of writing and owning vendor-specific client code — a meaningful reduction in surface area your team maintains.Storage-based mental model across local, S3, and Cloudinary disks. That is valuable for developer velocity and for keeping local/test environments reproducible against a cloud-backed production disk.What it does not decide for you: the adapter gives you filesystem semantics, not Cloudinary semantics. Transformation URLs, signed/direct browser uploads, responsive breakpoints, video processing, and asset metadata are typically still vendor-SDK work. Treat this as a storage-layer convenience, not a media platform.
Adopt when:
Storage::disk(...) conventions — the adapter fits without architectural change.Look elsewhere when:
public_id). Budget for a fork or an internal wrapper.Mitigations if you do adopt: pin the version, wrap it in your own thin MediaStorage interface so the dependency is one file deep, and write a contract test suite against real Cloudinary credentials covering upload, overwrite, delete, list/pagination, nested paths, unicode filenames, and URL generation. Decide up front what happens when the package goes stale (fork, or replace with SDK-backed implementation behind your interface).
To executives: We can deliver media features — uploads, asset management, CDN-backed delivery — faster and with less custom code by using Cloudinary through Laravel's standard storage layer. The integration cost is near zero: config plus a small adapter, rather than a bespoke service we'd own and maintain. We stay flexible at the code level, and our roadmap items involving user content and product imagery get unblocked now. The trade-off to acknowledge: it's a small, low-adoption open-source package, so we'll contain it behind an internal interface and treat replacing it as a one-file change.
To engineering: This is a Flysystem v3 adapter for Cloudinary that plugs into Storage::disk(). It handles read/write/delete/list and credentials via config. Caveats: it's Flysystem semantics over a media API, so expect rough edges on listing, asset types, folder behavior, and URL generation, and don't expect transformation helpers — those stay with the Cloudinary SDK. Recommendation: adopt behind an internal MediaStorage contract, pin the version, and validate with a contract test suite against real credentials before it touches production paths.
One-line ask: Approve a short spike (roughly a day) to validate the adapter against our actual upload/list/delete flows; if it holds, we adopt it behind an internal interface and avoid building a Cloudinary client ourselves.
How can I help you explore Laravel packages today?