vira/hpropagate
Vira HPropagate is a Laravel package for propagating selected HTTP headers to outgoing requests, helping keep correlation IDs and tracing context consistent across internal service calls. Simple configuration makes request context easier to forward.
What it does. vira/hpropagate propagates inbound HTTP headers onto outbound HTTP calls — the classic correlation-ID / W3C traceparent / X-Request-ID / tenant-token propagation pattern. That capability is genuinely valuable and increasingly expected in service-oriented Laravel applications.
The fundamental problem: framework mismatch. This is a Symfony bundle, not a Laravel package and not a framework-agnostic library. Everything that makes it installable and wired-up — the Bundle subclass, the DI Extension, compiler passes, and event subscribers bound to kernel.request/kernel.response — is Symfony Kernel machinery. Laravel does not ship symfony/framework-bundle and does not dispatch those events. The bundle is therefore inert in a Laravel application; only the underlying propagation logic (if it lives in a separate core package, which the repo naming hpropagate-symfony implies) is portable, and that core still targets the Symfony RequestStack and HttpClient contracts rather than Laravel's Request and Illuminate\Http\Client.
Ecosystem validation is effectively zero. Zero stars, zero dependents, score 0. Neither the Symfony package nor its presumed core has downstream consumers. There is no evidence of production adoption, no third-party audit, no release cadence to infer from, and no bug-report trail to read as a de-facto compatibility matrix. For a component that touches authorization headers and cross-service identity, adopting an unvalidated dependency is a security decision, not a convenience decision.
Technical risk.
Authorization, Cookie, API keys, or internal hostnames to third-party APIs. Any adoption must be allow-list-only, deny-by-default, with an explicit opt-in per outbound client.composer.lock, and resolving them may force unrelated upgrades.Key questions for the maintainer (or for us, if the answer is "nobody to ask," which is itself the answer):
Stack fit: poor as packaged, good as a concept. Laravel already has first-class primitives this bundle would duplicate: Illuminate\Http\Client global middleware, Http::globalRequestMiddleware(), the Context facade for propagating values across jobs and queued listeners, and Request::header() for read access. A hand-rolled implementation is roughly a service provider plus one Guzzle middleware — small, auditable, and testable in an afternoon.
Recommended path: build, don't adopt — unless the core is framework-neutral.
RequestStack, close it out and implement in-house.HeaderPropagator contract in the app layer; implement a Laravel service provider that reads an explicit allow-list from config; register an Http::globalRequestMiddleware() that merges allow-listed headers onto every outgoing PSR-7 request. Add a Context-based fallback for queue jobs. This keeps the pattern in our own codebase with a ~50-line blast radius.app/. Treat it as an implementation detail with a one-file swap point.Compatibility checks before any commit. Inspect composer.json for symfony/framework-bundle and the Symfony version range; run composer why-not against the target Laravel version; verify the package works with the Laravel-pinned symfony/http-foundation and symfony/event-dispatcher. Confirm behaviour under php artisan queue:work and under Octane (request-scoped state must be flushed per request).
Sequencing.
traceparent) or service identity (auth tokens)? They have different risk profiles; tracing is low-risk, identity is high-risk.Maintenance: assume unmaintained. Zero stars and zero dependents are strong signals of a single-maintainer hobby project. There is no observable release cadence, no security disclosure process, and no migration guide. Any adoption must budget for a hard fork maintained in-house, or accept that a future Symfony major bump breaks it with no upstream fix. Do not add it to a composer.json you don't control.
Support. No community, no vendors, no Stack Overflow corpus. Every defect becomes an internal debugging exercise against unfamiliar Symfony internals. Compare with OpenTelemetry PHP or a 50-line internal middleware, both of which we can reason about unaided.
Scaling.
baggage, X-Request-ID, and vendor headers; unbounded propagation grows request size and can trip WAFs or upstream header-size limits on long call chains.Failure modes to instrument for.
Authorization.X-Request-ID chains.file_get_contents instead of the Http facade.Ramp-up. Low for a Laravel engineer to implement and understand the pattern; moderate-to-high to debug the Symfony bundle's wiring if adopted, because the team has no Symfony Kernel familiarity and the failure modes are silent rather than loud. The asymmetric cost — cheap to build, expensive to debug when headers leak — argues strongly for the in-house route.
How can I help you explore Laravel packages today?