tfd/statamic-cloudinary
Connects Statamic to Cloudinary so images and assets are stored, managed, and delivered through Cloudinary's CDN. Configure the asset driver and serve optimized, responsive media from your Statamic site with minimal setup.
{{ cloudinary:field }} threw ArgumentCountError and 500'd both when credentials were absent (every tag render) and when a referenced asset was missing or renamed. v1.5.1 fixes both call sites in Tags\Cloudinary::wildcard() and is the first release with any test coverage of that class. Net effect: graceful degradation is still the right de-risking argument, but it is now a verified-this-release property rather than a long-standing one — pin >= 1.5.1 and cover the fallback with a test you own.<x-cloudinary-image /> or the tag) before committing.Consider it when all of the following hold:
^5.73.11 is still declared, but see the version-confidence caveat below before assuming it works.)Look elsewhere or plan to fork/vendor it when:
require-dev had pinned orchestra/testbench ^9, which is uninstallable due to security advisories, meaning no test runner was installable at all prior to this release. If you are on Statamic 5, add a spike plus your own smoke tests before committing.srcset generation, blurhash/LQIP placeholders) — those are yours to build.Recommended adoption posture: vendor or fork the package into your codebase at v1.5.1 or later, pin the version, add the missing Laravel/Statamic 5 test run to your CI if you rely on that range, and wrap usage so fallback behavior is covered by a test you own — the v1.5.0 regression is a concrete demonstration of why.
For executives (one paragraph): This is a small, MIT-licensed open-source connector that lets our Statamic CMS serve images through Cloudinary instead of our own servers. It's narrow in scope — it builds Cloudinary URLs and handles the fallback when Cloudinary isn't available — so the strategic decision is really whether we invest in Cloudinary, not in this package. The upside is faster pages and offloaded image processing; the cost is Cloudinary's subscription plus the engineering time to migrate existing media, which this package does not automate. The main caveat is maturity: it has very low adoption (7 stars, no downstream dependents), and the most recent release fixed a bug where the safety fallback failed outright — which is now fixed and, for the first time, tested. We should plan to own the code rather than rely on a community. Recommended next step is a time-boxed pilot on a single high-traffic template to measure page-speed gains and confirm our Statamic/Laravel version combination.
For engineering: Four files to review — CloudinaryConverter (all parameter translation, centralized by design), Tags\Cloudinary (Statamic tag plus Glide fallback), Components\Image (Blade wrapper), and ServiceProvider (config merge and publish to config/statamic/cloudinary.php). Conventions are documented in AGENTS.md, and there's a Pest suite with AddonTestCase. What changed in v1.5.1: the ArgumentCountError in Tags\Cloudinary::wildcard() is fixed at both fallback sites, Tags\Cloudinary now has its first tests, and the dev toolchain is repaired — require-dev previously pinned orchestra/testbench ^9 (Laravel 11), uninstallable because those releases are blocked by security advisories, so nothing could run the suite. It now runs on Laravel 12. Consequences to plan around: pin >= 1.5.1 (v1.5.0 500s on every {{ cloudinary:field }} without credentials, and on any missing/renamed asset with credentials), treat the declared Statamic ^5 range as untested and add a version matrix to CI, and test the fallback path explicitly — it is the feature that makes a phased rollout safe, and it just shipped broken. Also note composer lint mutates files rather than dry-running. Plan to vendor the package rather than depend on the release line.
How can I help you explore Laravel packages today?