greenhat-services/magpie-laravel
A Laravel package that brings Magpie into your PHP application with a clean service provider, publishable configuration, and familiar Laravel conventions. It keeps integration light, so you can configure the service and start using it quickly in any Laravel project.
Architecture fit. The package is a Laravel library that talks to an external HTTP service and depends on guzzlehttp/guzzle directly rather than through Laravel's Http facade. That is the single most important architectural signal in this release: supporting two majors of Guzzle means the package owns its own transport configuration, retry/timeout semantics, and exception mapping, all of which sit outside the framework's testing affordances (Http::fake(), Http::preventStrayRequests(), retry macros, event hooks). For a host application this is acceptable but it is a coupling we inherit — the package's HTTP behaviour is not governed by our app's global HTTP client config.
Integration feasibility. High, and this is the release's purpose. Before v0.1.1 the constraint (^7.8.2) made the package un-installable in any application already resolved to Guzzle 8, forcing either a downgrade of a shared transitive dependency or an unresolvable graph. The widened constraint (^7.8.2|^8.0) removes a hard Composer conflict without requiring application code changes. Expected effort to adopt: near zero, assuming the package's own Guzzle usage is version-agnostic.
Technical risk.
^7.8.2 floor and ^8.0 floor). That is the right shape but does not prove intermediate 7.x minors, lowest-dependency resolution, or real-network behaviour.Key questions.
^8.0 pre-emptive? If pre-emptive, we may resolve onto an unstable major.Illuminate\Support\Facades\Http? The latter materially lowers risk.--prefer-lowest and the full PHP/Laravel support matrix, or only the two Guzzle endpoints?Stack fit. Straightforward Laravel fit — package discovery, config publish, and a service-provider-bound client are the expected shape. The incompatibility being fixed was purely dependency-graph, not runtime. No adapter layer is required, though wrapping the package behind our own thin interface is cheap insurance at 0.x.
Migration path. Two cases:
composer require should now resolve cleanly. This is the intended unlock.There are no code-level migration steps implied by the notes. Validate at runtime rather than trusting the constraint bump.
Compatibility. Confirm the package's PHP, Laravel, and Guzzle constraint intersections against our matrix before merging. Because we now span two Guzzle majors, also confirm our other Guzzle-dependent packages do not narrow the constraint back to 7 — a single ^7.0 elsewhere re-creates the original conflict. composer why-not guzzlehttp/guzzle 8.0 is the fast check.
Sequencing.
composer.json and CHANGELOG to confirm the change is constraint-only and see what Guzzle 8 actually is.composer.lock diff is limited to the intended packages.^0.1.1 (not ^0.1) given pre-1.0 churn, and add a Renovate/Dependabot watch on Guzzle majors.Maintenance. Low ongoing cost for us, non-trivial for the maintainer: dual-major Guzzle support means two code paths to keep green until Guzzle 7 is dropped. Expect a future release to drop ^7.8.2; that will be the meaningful breaking change to plan around, and at 0.x it may arrive as a patch-level bump. Pin precisely and read changelogs.
Support. Support surface expands slightly — first-line triage now has to ask "which Guzzle major?" when diagnosing transport issues. Document the resolved version in our runbook and include it in bug reports.
Scaling. Unchanged by this release; HTTP client throughput, connection reuse, and concurrency characteristics are governed by whichever Guzzle major resolves in each environment. Note that dev, CI, and production could resolve to different Guzzle majors if lockfiles are not shared — that is a real source of "works locally" incidents. Enforce a single committed lockfile per environment and avoid composer update in deploy pipelines.
Failure modes.
^8.0 if 8.x is not yet GA-tagged.Ramp-up. Minimal. The change is invisible to product code; a competent Laravel engineer needs under an hour to validate the resolution, read the package's HTTP layer, and wire a smoke test. The only genuine learning curve is the package's error model, which is worth reading once because it will show up in incident triage.
How can I help you explore Laravel packages today?