zeroem/curl-bundle
zeroem/curl-bundle is a Symfony bundle that wraps cURL in a simple, configurable HTTP client service. Make GET, POST, and custom requests with headers, options, and error handling, then inject the client anywhere via Symfony's service container.
HttpKernel implementation that dispatches a Symfony Request over cURL, and a facade over PHP's ext-curl including curl_multi_*. The decision it informs is whether to standardize outbound calls on a thin, self-owned wrapper versus pulling in Guzzle/Symfony HttpClient or writing bespoke cURL code per service.HttpKernel-over-cURL trick lets a remote service be invoked as if it were a local subrequest ($kernel->handle($request)), which supports decisions about internal API composition, edge aggregation, and whether remote calls should share the controller/middleware lifecycle of local routes.curl_multi support is the real product lever: dashboards, search aggregation, BFF/API-gateway endpoints, and batch enrichment jobs where wall-clock latency is dominated by N sequential round-trips. This is a concrete argument for parallel fetch over a queue-and-poll design at low-to-moderate request volumes.HttpKernel). It offers no Laravel service provider or facade, so it should not enter a Laravel build-vs-buy comparison at all.Consider it when:
ext-curl semantics (handles, options, curl_multi loops) and will write its own tests around the facade.Look elsewhere when:
symfony/http-client (native concurrency via HttpClientInterface, AsyncResponse, retry, and PSR-18 compliance) or Guzzle's Pool/promises.curl_multi facade gives you.Adoption gate (recommended): require a spike proving it runs on your target Symfony version, a written owner, and a migration path to Symfony HttpClient within two quarters. If any of those is missing, decline.
For executives: This is a small, MIT-licensed utility that does two things — it lets one Symfony app call another as though it were a local request, and it exposes PHP's built-in parallel HTTP capability so pages that need many remote calls can fetch them at once instead of one after another. It is not a strategic dependency: 13 stars, zero known downstream projects, one author, no Laravel support, and no visible maintenance cadence. Recommendation: do not adopt for new development. Fund the equivalent behavior on Symfony's first-party HTTP client, which is roughly one to two engineer-days of work and carries none of the bus-factor risk. Keep this package only where it is already in production, with a named owner and a scheduled migration.
For engineering: The curl_multi facade is the only genuinely useful piece; the HttpKernel-over-cURL trick is clever but couples remote calls to local request semantics and is easy to reimplement with HttpClient + RequestStack. Cost of replacement is low precisely because the abstraction surface is small — which is also why keeping it is not worth defending. Standardize on symfony/http-client (or Guzzle where already present), and if you want the subrequest ergonomic, build a thin adapter on top rather than inheriting an unmaintained bundle.
For product/roadmap owners: Treat any feature that "needs" this as needing parallel outbound I/O — that requirement is real and worth scheduling. The package itself is an implementation detail; do not let a 13-star dependency become a roadmap constraint or an excuse to defer the platform-standard migration.
How can I help you explore Laravel packages today?