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

Laravel Httplug Laravel Package

php-http/laravel-httplug

Laravel integration for HTTPlug that wires PSR-7/PSR-18 HTTP clients into the service container, provides package configuration and convenient Laravel access, and lets apps use interchangeable HTTPlug adapters for outbound HTTP requests.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. php-http/laravel-httplug is a thin Laravel service provider wrapping HTTPlug — the PHP-HTTP abstraction layer that predates PSR-18. Its entire value proposition is container registration: it binds Http\Client\HttpClient, Http\Client\HttpAsyncClient, the message/URI/stream factories, and an optionally-configured PluginClient so that application code can type-hint an interface rather than instantiate Guzzle directly. That is a legitimate architectural pattern (dependency inversion on the HTTP boundary), but it is a small amount of glue, and it is glue that Laravel has since absorbed natively via the Illuminate\Support\Facades\Http client and that the wider ecosystem has standardized on via psr/http-client + php-http/discovery. For any greenfield or actively-upgraded codebase, this package is an abstraction over a deprecated abstraction.

Integration feasibility. Low. The last release is 2016-08-03, which places it in the Laravel 5.1–5.4 era: it predates package auto-discovery (Laravel 5.5, Nov 2017), so it requires manual providers/aliases registration, and its illuminate/support constraints and PHP floor will conflict with Laravel 9+ / Symfony 6+ dependency graphs. Expect Composer to resolve-fail rather than merely warn. The underlying php-http/httplug package is flagged abandoned upstream and points at psr/http-client, which means the transitive dependency carries the same risk as the wrapper.

Technical risk. High and asymmetric — the upside is a convenience binding, the downside is an unpatched code path in your outbound network layer.

  • Bus factor / abandonment: 12 stars, no releases in ~9 years, no maintainer response path, no security advisory coverage.
  • Runtime compatibility: PHP 8.x deprecations and stricter typing are untested against this code; Guzzle adapter selection via HTTPlug's discovery semantics is fragile if the container is not fully booted.
  • Correctness surface: plugin ordering, retry semantics, and promise rejection handling are all implicit here and invisible to a reviewer who doesn't already know HTTPlug.
  • Opportunity cost: the package's score (1.47 overall, 1.14 opportunity) reflects that the marginal capability it offers is now commodity.

Key questions to answer before any decision.

  1. Which Laravel and PHP versions are actually in scope — is there any 5.x estate still in production, or is this purely forward-looking?
  2. Does the codebase already depend on php-http/* or HTTPlug plugin types (Http\Client\Common\Plugin) anywhere, or would this be a net-new introduction?
  3. Is async/promise-based fan-out a real requirement, or is synchronous throughput sufficient? (If the latter, Laravel's Http facade removes the entire need.)
  4. Are there hard contractual or compliance constraints (pinned vendor, audited dependency list) that forbid adopting an abandoned package?
  5. What is the cost of not doing this — i.e. does the team have a stated interface-first HTTP convention this package would satisfy?

Assessment: do not adopt. Treat this as a migration-out candidate, not an integration candidate.

Integration Approach

Stack fit. Genuine fit exists only for a Laravel 5.1–5.4 application that is already built around HTTPlug clients and plugins. Everything newer — Laravel 7+ with the Http facade, Laravel 9/10/11, PHP 8.1+ — should be considered out of scope by construction.

Migration path (the recommended action for existing adopters). Move the boundary, not the call sites:

  1. Introduce an internal interface (e.g. App\Http\ClientContract) with the 2–4 methods your domain actually uses. This is the real deliverable; the vendor package was only ever a container binding.
  2. Bind it to a PSR-18 implementation — psr/http-client with a maintained adapter, or Symfony's Psr18Client, or Laravel's Http facade under a thin adapter.
  3. Replace HTTPlug Plugin usage with Guzzle middleware or Laravel's Http::withMiddleware. Note there is no drop-in Plugin↔PSR-18 equivalent; retry/logging/circuit-breaker behavior must be re-implemented and re-tested, which is the single largest unit of work in this migration.
  4. Remove the service provider, the published config, and the php-http/* requires; confirm the abandoned flag disappears from composer why.

Compatibility gates. Manual provider registration (auto-discovery does not apply); Illuminate\Contracts\Foundation\Application binding signatures; config publishing semantics; and — critically — exception mapping, since HTTPlug throws Http\Client\Exception where PSR-18 throws Psr\Http\Client\ClientExceptionInterface. Any catch block on the HTTPlug type is a silent behavioral regression waiting to happen.

Sequencing. Dependency inventory and call-site census first (estimate S–M for a small app, M–L if plugin chains exist) → freeze the version and pin it → land the internal interface → swap implementations behind the interface → delete the package. Do this as a background workstream; it does not warrant a dedicated epic unless the HTTP plugin chain is load-bearing.

Operational Impact

Maintenance. Effectively zero upstream maintenance. You inherit the codebase. Expect composer audit/SCA tooling to surface the abandoned flag, and expect to justify it in any security review — or vendor a fork, which converts a dependency into owned code with no community to lean on.

Support. No viable support channel. Twelve stars implies effectively no install base, so Stack Overflow and issue-tracker archaeology will not help your engineers; every incident becomes first-principles debugging of a decade-old integration.

Scaling. The package itself is not a throughput bottleneck — the underlying client (Guzzle et al.) handles connection pooling and TLS. The one genuine capability worth preserving is HTTPlug's async/promise client, which is useful for high-fan-out aggregation. If you rely on that, migrate it deliberately to Guzzle promises or a concurrent-request pool rather than losing it in the swap.

Failure modes to monitor during transition.

  • Container binding drift — an unbound interface silently resolving to a default client, producing divergent timeout/proxy/TLS behavior between services.
  • Retry amplification — plugin-level retries composed with client-level retries causing multiplicative request storms; retries on non-idempotent verbs.
  • Promise hygiene — unhandled rejections swallowed outside the request lifecycle, producing no error signal at all.
  • Exception-type mismatch — the migration failure mode most likely to reach production, because it manifests as uncaught types rather than wrong results.
  • Certificate and timeout defaults changing as the underlying adapter changes.

Ramp-up. Non-trivial relative to the payoff. HTTPlug asks engineers to learn a three-part mental model (client / message factory / promise) that Laravel developers no longer encounter, and the package publishes no documentation of its own. Budget onboarding time for anyone touching the HTTP layer, and treat the internal-interface refactor as the actual knowledge-transfer artifact — it is what makes the team portable off this dependency later.

Bottom line for the portfolio: 1.47/5 with a 1.14 opportunity score is the correct read. The capability is real but commoditized; the package is a 2016 shim for a deprecated spec with no maintenance path. Recommend no new adoption, and a scoped, low-priority migration for any existing usage.

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.
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
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle