jbouzekri/phumbor-bundle
Symfony bundle integrating the Phumbor PHP client for Thumbor. Configure your Thumbor server and security key, then generate signed image URLs and use Twig helpers to resize, crop, and optimize images in templates. Simplifies wiring Phumbor services into Symfony apps for dynamic thumbnails.
Architecture fit: poor-to-moderate as packaged, moderate as a pattern reference. jbouzekri/phumbor-bundle is a Symfony bundle, not a Laravel package. Its entire value-add is Symfony-specific: a DependencyInjection extension that maps YAML config (jbouzekri_phumbor.server, secret, etc.) into a configured Thumbor\Url\BuilderFactory service, plus bundle registration in AppKernel/bundles.php. Laravel has no bundle loader, no DI extension compiler pass, and no YAML config tree — none of that wiring executes. The actual image-URL signing/building logic lives in 99designs/phumbor, which is framework-agnostic and works fine in Laravel. So the honest architectural read is unchanged by 4.0.0: this package is a thin (~a few hundred LOC) adapter we would not install; the underlying client is what we would consume.
Integration feasibility: high, if we skip the bundle. A Laravel integration is roughly:
composer require 99designs/phumbor (not the bundle).Thumbor\Url\BuilderFactory from config('services.thumbor.*') with THUMBOR_SERVER / THUMBOR_SECRET env vars.ThumborService wrapper for testability.
Estimated effort: hours, not days. This is a "build the 30-line adapter ourselves" decision, not a migration project. Release 4.0.0 does not change this calculus — it changes neither the LOC we would write nor the client API we depend on.Technical risk: acceptable but concentrated — and 4.0.0 sharpens two of the risks.
.env conventions, no fake/mock helper.Key questions for the maintainer/team:
99designs/phumbor version, or is this purely a Symfony/PHP constraint change? We need to know which client version we'd be aligning to.Stack fit. Laravel 10/11+ on PHP 8.2+ and Thumbor as an external image service: good fit for the client, no fit for the bundle. Release 4.0.0 widens the gap rather than narrowing it — a Symfony 8-aligned bundle is now further from a Laravel-shaped install than the 3.x line was. If the stack is Symfony, this release is genuinely relevant: 4.0.0 is the upgrade target, and the assessment shifts to "adopt with a version pin and a Symfony-8 migration ticket." Since the stated target is Laravel, plan on the direct-client path.
Migration path.
jbouzekri/phumbor-bundle to composer.json — and specifically do not be tempted by 4.0.0's "Symfony 8 support," which is the least useful thing this package could offer a Laravel app. It buys nothing and adds a Symfony-kernel-shaped dependency with 0 dependents behind it.99designs/phumbor directly. Confirm the version 4.0.0 aligns with, so we don't diverge from the only thing the bundle actually validates.config/thumbor.php (or extend config/services.php) with server, port, secret, security_key, and a driver/timeout if we wrap HTTP.App\Providers\ThumborServiceProvider:
$this->app->singleton(BuilderFactory::class, fn () => new BuilderFactory($server, $secret, $httpClient?));ThumborUrlBuilder behind a Thumbor facade for ergonomics.Compatibility. Verify the pinned 99designs/phumbor major against our PHP constraint and against any existing symfony/* transitive versions (Laravel pulls symfony/http-foundation, symfony/console, etc.). Because we skip the bundle, we avoid its symfony/dependency-injection + symfony/config constraints entirely — this is the single biggest compatibility win of the recommended path, and 4.0.0 makes it a bigger win by raising the Symfony floor further.
Sequencing.
Maintenance. Low ongoing cost on the recommended path: 99designs/phumbor is a small, stable client and we own ~30 lines of glue. On the bundle path, maintenance cost is dominated by Symfony major-version churn in a package with one maintainer and no dependents. Release 4.0.0 is a live demonstration of that cost: an entire major version, breaking by definition, whose content is "keep up with Symfony." Every Symfony upgrade becomes a "will this be tagged in time?" question, and the answer is not underwritten by anyone — this time the answer was yes, with a single external contributor doing the work.
Support. No commercial support, no vendor SLA, 26 stars. Internal support means one of our engineers reads the source — feasible because the source is tiny, but it should be an explicit staffing assumption, not an accident. Budget for a fork-and-vendor contingency: if the maintainer disappears or lags a Symfony/PHP release, we patch locally. The MIT license makes that legally trivial. 4.0.0 is mild positive evidence against imminent abandonment, but it is one data point from one contributor, not a sustainability guarantee.
Scaling. This package is not in the request hot path for image serving — Thumbor/CDN handles that. It is in the hot path for URL generation, which is pure CPU string/HMAC work and scales linearly with application workers; no connection pooling, no external calls, no bottleneck. The bottleneck to watch is Thumbor itself (resize throughput, cache hit rate) and CDN config, not this code, and 4.0.0 changes nothing here. If we wrap the client with an HTTP layer for uploads, add timeouts and circuit-breaking there.
Failure modes.
symfony/* set and the container fails to boot (bundle path only). 4.0.0 raises this risk materially: the 3.x line is now the "unsupported versions" side of the cleanup, so any environment still on it is silently off the maintained branch. Pin versions and keep updates in a canary environment.composer outdated review.Ramp-up. Very fast. A mid-level Laravel engineer can read 99designs/phumbor and the bundle in under an hour; the concepts are just URL templating plus HMAC signing. The real ramp-up cost is Thumbor domain knowledge (filter syntax, resize semantics, security key model), which is identical regardless of which PHP entry point we choose — so there is no learning-efficiency argument for the bundle. If anything, 4.0.0 adds a small piece of negative ramp-up: anyone joining the Symfony track now has to learn what changed between Symfony majors on a package with no changelog beyond one line.
Recommendation. Unchanged. Do not adopt jbouzekri/phumbor-bundle in a Laravel codebase. Adopt 99designs/phumbor with a small internal service provider and facade. Revisit only if the org standardizes on Symfony, in which case take 4.0.0 (not 3.x, which is now unsupported) with a hard version pin, a documented maintainer-risk note, and a fork contingency.
How can I help you explore Laravel packages today?