saloonphp/laravel-plugin
Official Laravel integration for Saloon, the PHP HTTP client. Wire API integrations into Laravel with service provider and facade support, Laravel HTTP client sending, configuration, events, and testing helpers, making it easy to build and test robust API clients in your app.
Architecture fit: saloonphp/laravel-plugin is a thin Laravel integration layer around saloonphp/saloon, not a standalone HTTP client. It contributes service-provider registration, a facade, configuration publishing, Artisan generators (saloon:connector, saloon:request, saloon:response, saloon:plugin, saloon:auth, saloon:list), Laravel-oriented testing helpers, and optional observability middleware for Telescope, Pulse, and Nightwatch. Architecturally, this fits Laravel applications that want contract-driven API integrations, dependency injection, centralized configuration, queue-friendly request execution, and standardized testing. The plugin’s runtime surface is small, so lock-in is moderate rather than severe; the real dependency is Saloon’s connector/request model rather than this package.
For a TPM, the value proposition is developer throughput and consistency: fewer bespoke Guzzle wrappers, faster onboarding to third-party APIs, and observability hooks that make external calls visible. It is most compelling for teams with several B2B/SaaS integrations, payment gateways, or internal service clients. It is less compelling for a single trivial HTTP call or for teams unwilling to adopt Saloon’s abstractions.
Integration feasibility: Low technical effort to trial. Composer installation, Laravel package auto-discovery, optional config publishing, and generated class stubs make a one-day spike realistic. Existing Laravel conventions are preserved, and integration code can live under app/Integrations or a configured path. Testing support via Saloon fakes/global mock client is a meaningful productivity gain.
The adoption signal is the main concern. Seventy-nine stars and reported zero dependents suggest limited external validation, even if “dependents” undercounts private usage. The package is described as official for Saloon, which helps, but it is not a first-party Laravel package and does not carry Laravel’s support SLA. Release metadata also warrants scrutiny: the listed latest release date is in the future relative to normal release cadence, and the release history spans major versions v1 through v5 with Saloon v3, v4, and v5 migrations. That is a lot of major-version churn for a small integration layer.
Technical risk: The primary risks are dependency-chain volatility and upgrade coupling. The plugin’s compatibility is tied to both Laravel and Saloon majors; release notes show Laravel 10, 11, 12, and 13 compatibility work, PHP 8.5 support, and migrations from Saloon v3 to later majors. A Laravel or Saloon upgrade can therefore force a plugin upgrade, and vice versa. The observability middleware adds useful production visibility but also expands the failure surface: release notes reference Telescope response parsing fixes, HAL+JSON handling, duplicate Nightwatch middleware registration, sensitive-data handling, and integration-path fixes. These are normal maintenance issues, but they matter for teams expecting “install and forget.”
Generated code is another governance risk. Artisan generators improve consistency, but without review standards they can produce inconsistent auth, retry, pagination, and error-handling patterns across teams. The plugin should be treated as a scaffold and observability adapter, not as a substitute for API integration design review.
Key questions:
Stack fit: Best fit is a Laravel 10+ application using Composer, service container, configuration, queues, and PHPUnit/Pest. The plugin should sit alongside existing Laravel HTTP infrastructure, not replace application-level domain services. Use it to standardize outbound API clients, authentication, retries, pagination, and test fakes. Keep business logic in application services; connectors and requests should remain transport contracts.
Migration path: Start with an inventory of raw Guzzle, Laravel Http facade, and ad-hoc SDK calls. Rank integrations by risk and change frequency. Pilot on one low-risk, read-only integration such as a status or catalog API. Create a connector and request classes using the plugin generators, cover them with contract tests and recorded fixtures, then run the new path behind a feature flag or in shadow mode against the existing client. Compare responses and error behavior before cutover. After the pilot, codify templates, naming, auth, retry, timeout, and logging standards before migrating higher-risk payment or customer-data integrations. Do not attempt a broad “big bang” replacement.
Compatibility: Pin the plugin, Saloon core, Laravel, and PHP versions explicitly. Build a CI matrix for the supported Laravel/PHP combinations and for the Saloon major in use. Verify the plugin major against the application’s framework version rather than assuming the latest release is appropriate. Treat the v3-to-v4-to-v5 history as evidence that major upgrades require planned work. Avoid adopting a new plugin major until its Saloon and Laravel support matrix is confirmed and a rollback path exists.
Sequencing:
TPM recommendation: Conditional go for a bounded pilot. The plugin is technically feasible and aligned with Laravel, but the low adoption signal and major-version churn argue against making it an unscoped platform standard on day one. Approve it where Saloon’s model already fits and a fallback to plain Saloon or raw HTTP is documented.
Maintenance: Ongoing maintenance is mostly dependency management rather than plugin code maintenance. Expect periodic Composer updates, Laravel/PHP compatibility checks, and Saloon major migrations. Assign an owner and budget a small recurring upgrade allocation. Subscribe to releases and run composer audit and automated tests in CI. Pin minor versions for production and upgrade deliberately. Because the package is MIT-licensed and community-supported, there is no commercial SLA; support depends on GitHub responsiveness and the maintainers’ capacity.
Support: Internal support must cover connector design, auth/token rotation, retry policy, observability configuration, and secret redaction. The plugin’s Artisan commands and Laravel Boost/skill documentation reduce ramp-up, but they do not replace an internal standard. Establish a lightweight platform team or guild that owns templates, review, and upgrades. Avoid letting every product team invent its own Saloon conventions.
Scaling: Runtime scaling is primarily a function of Saloon, Guzzle/cURL, the upstream API, and application worker capacity, not this plugin. Scale outbound integrations through queued jobs, connection reuse, timeouts, bounded retries with backoff and jitter, rate limiting, and circuit breakers. Telescope and Pulse integration should be sampled or restricted in production to control storage and performance overhead. Nightwatch middleware should be verified for duplicate registration. For high-volume integrations, test connection pooling and worker concurrency explicitly.
Failure modes: Watch for upstream API contract changes, expired or misconfigured credentials, retry storms, missing timeouts, response parsing failures, and misconfigured integration paths. Release history shows past issues around integration paths outside app/, Telescope parsing of JSON content types, duplicate Nightwatch middleware, and auth stub correctness; these indicate the areas to cover with regression tests. Sensitive-data leakage through observability middleware is a material operational risk. Major-version upgrades can break service-provider assumptions, generated stubs, or middleware behavior. Low upstream adoption increases the risk of slower fixes for edge cases.
Ramp-up: A Laravel developer should become productive in one to two days using the generators and Saloon documentation, but fluency in Saloon’s connector/request/auth/middleware/testing model may take one to two weeks of real integration work. Provide a runbook covering connector creation, secrets, retries, timeouts, observability, testing with fakes, and upgrade procedures. Pair developers on the first production integration and require code review for generated classes. Measure pilot success by reduced boilerplate, test coverage of outbound calls, fewer integration defects, and time-to-first-working-request; use those results to decide whether to expand adoption.
How can I help you explore Laravel packages today?