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

Flysystem Cloudinary Laravel Package

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.

Deep Wiki
Context7

Product Decisions This Supports

  • Build vs. buy for media plumbing. The core decision this package informs is whether to hand-roll a Cloudinary integration or adopt a thin adapter. It lets you ship upload/read/delete/list flows through the Storage facade instead of writing and owning vendor-specific client code — a meaningful reduction in surface area your team maintains.
  • Feature roadmap scoping for media-heavy work. If your roadmap includes user-generated content, product/catalog imagery, CMS media libraries, avatar handling, or multi-tenant asset isolation, this package is a low-cost way to validate those features before committing to a heavier DAM or custom service.
  • Storage abstraction strategy. It supports the decision to keep a single 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.
  • Delivery strategy. Cloudinary brings CDN delivery and on-the-fly transformations; using a Flysystem adapter means product can promise fast image delivery without building an image pipeline — but only if you scope transformation behavior outside the adapter (see caveats below).
  • Migration sequencing. Because the adapter speaks Flysystem v3, you can introduce Cloudinary behind existing storage code paths incrementally, disk by disk, rather than as a big-bang rewrite. That de-risks a migration and lets you decide per-bucket/per-feature.
  • Vendor concentration risk decisions. Choosing this package is also a decision about how much you standardize on Cloudinary. It lowers code lock-in but not data lock-in — assets live in Cloudinary's namespace, and derived/transformed assets are not portable.

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.

When to Consider This Package

Adopt when:

  • You are already on Cloudinary, or have committed to it, and want the integration to be a few lines of config rather than a bespoke service class.
  • Your media needs are predominantly simple CRUD: store, retrieve, delete, list. You can live without first-class transformation helpers in your storage layer.
  • Your codebase is Laravel with Flysystem v3 and already uses Storage::disk(...) conventions — the adapter fits without architectural change.
  • You want environment parity (local disk in dev, Cloudinary in staging/prod) and are willing to accept that behavior differs at the edges.
  • You want to time-box a spike: a small dependency is cheaper to evaluate than an internal build.

Look elsewhere when:

  • You need transformations as a first-class API. Rich, typed access to Cloudinary's transformation, responsive, and video capabilities is better served by Cloudinary's official PHP SDK or a dedicated Laravel Cloudinary package, or by wrapping the SDK behind your own interface.
  • You need direct/signed browser uploads and upload presets. That is a Cloudinary upload-API concern, largely outside Flysystem's model.
  • Adoption signal matters. 22 stars is low. This is likely a single-maintainer package with limited community testing across edge cases (folder mode, asset types, pagination, overwrite semantics, special characters in public_id). Budget for a fork or an internal wrapper.
  • Your access patterns are high-volume or latency-sensitive. Listing and metadata enumeration against a media API can be slow and paginated; if you need fast, cheap directory walks, object storage is the better substrate.
  • You need enterprise support, SLAs, or audit evidence. Vendor support flows to Cloudinary, not to this adapter.
  • Deep portability is a requirement. Flysystem's promise is swappable backends, but Cloudinary's asset model is not fungible with S3/GCS. The abstraction buys you code portability, not data portability — don't oversell it internally.

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).

How to Pitch It (Stakeholders)

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.

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.
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib