gdinko/speedy
Laravel package for integrating the Speedy courier API. It simplifies shipping rate calculations, shipment creation, label generation, parcel tracking, and courier office or pickup management, helping PHP applications connect to Speedy services with less boilerplate.
Architecture fit. gdinko/speedy is a thin Laravel service-provider/facade wrapper over the Speedy (Bulgarian courier) REST API. Architecturally it slots in as an outbound integration adapter: configuration for credentials/endpoints via published config, a facade for label creation, rate calculation, tracking, and reference-data lookups (cities, offices, services). It is not a domain model — it will not own shipment state, pricing rules, or order lifecycle. That is the right shape for a wrapper, but it means the surrounding application must remain the system of record and must not let the vendor SDK's types leak into core domain code.
Integration feasibility. Composer install, config publish, credentials from the Speedy customer portal, and a sandbox/test endpoint is a sub-day spike for a Laravel developer. The blocker is not effort, it is coverage verification: with 21 stars and a low composite score (0.405), the package's surface area must be measured against the endpoints the business actually needs (calculation, shipping/label, print, tracking, pickup requests, cancellation, COD). Anything missing means either a fork or a fallback to a hand-rolled Guzzle client on the same endpoints.
Technical risk.
Key questions.
illuminate/* and PHP constraints, and does it work on our target Laravel version?Stack fit. Native Laravel fit: service provider, facade, config file, Composer autoload. It assumes standard Laravel conventions and will not conflict with queue workers, schedulers, or an existing HTTP client stack. If the application is not Laravel, this package is the wrong dependency — port the endpoints, not the wrapper.
Migration path. Do not call the facade from controllers or jobs directly. Introduce an application-owned ShippingGateway interface, implement it with this package behind a feature flag, and keep a second implementation (direct HTTP client or a competing wrapper) as a swap target. This is the single most important decision: it converts "vendor abandonment" from a rewrite into a one-class change, and it gives you a seam to add idempotency, retries, logging, and metric capture the wrapper will not provide.
Compatibility. Pin the exact version and commit the lockfile. Verify PHP and Illuminate constraints before the spike, not after. Confirm config caching works (no closures in the config file) and that the facade resolves in a queued context. Check that the package does not ship global helpers or conflicting singletons.
Sequencing.
Maintenance. Budget for ownership. Realistically this becomes "we maintain a fork" within 12–24 months. Assign a named owner, track upstream commits, and keep the fork diff small by confining local patches to the adapter layer. A quarterly check of upstream activity and Speedy API changelog is the minimum viable cadence.
Support. Community-only, no SLA, no vendor escalation for the wrapper itself (Speedy support covers the API, not the package). Internal runbook must document: how to rotate credentials, how to enable verbose HTTP logging, how to reproduce a failed label call in the sandbox, and who to escalate to when Speedy changes something.
Scaling. Throughput is bounded by Speedy's API, not by the package. The operational levers are all application-side: queue label creation rather than doing it synchronously in the checkout path, apply exponential backoff on 429/5xx, cache reference data (cities/offices) with a long TTL and a scheduled refresh, and cache auth tokens. Label creation must be idempotent on our side — a timeout does not mean the shipment was not created.
Failure modes.
Ramp-up. Low for a Laravel developer to get a sandbox call working; moderate to production-grade because the hard part is courier domain knowledge (service codes, COD, weight/dimension rules, label formats, return flows) and Speedy's regional specifics, not the PHP. Plan for one developer-week to a competent integration with tests and the adapter seam, plus review time from whoever owns shipping operations.
How can I help you explore Laravel packages today?