juststeveking/sdk-tools
Tools for building SDKs in Laravel and PHP. juststeveking/sdk-tools provides utilities and conventions to scaffold, structure, and maintain API client packages, cutting boilerplate so you can ship clean, consistent SDKs faster.
What it is, in product terms: juststeveking/sdk-tools is a lightweight, framework-agnostic PHP toolkit that provides base classes and contracts for hand-rolling an SDK around a third-party API — a central Sdk object, Resource classes that group related endpoints, a connector abstraction over an HTTP client, and optional response caching. It is a scaffold and reference architecture, not a supported platform dependency: 19 stars, 0 dependents, last release July 2023, one maintainer, MIT license. That framing should govern every decision it informs.
Decisions it genuinely helps a PM make:
What it does not support: any decision requiring a long-lived, supported dependency, or any customer-facing commitment where an unanswered support ticket is a churn event. Treat it as a pattern library and spike enabler, not an architectural commitment.
Consider it when:
src/ tree is often the cheapest correct outcome; a PM should be comfortable with "extract the ideas, take no dependency" as a valid decision.Look elsewhere when:
Http::fake() interception. Every adopting team manually binds a PSR-18 client and learns to inject a mock transport in tests. That is recurring per-team cost, not one-time setup.Rule of thumb: appropriate for a time-boxed spike behind a feature flag, with a decision date and a named owner. Not appropriate as a production dependency without an approved fork-and-own plan, a pinned commit (not a version range), and an ADR covering exit strategy.
For executives: This is not a product bet — it is a cheap way to de-risk one. If first-party SDKs are on the roadmap, this lets us prototype in days instead of weeks and return with a credible build estimate and a real artifact, at near-zero cost (MIT, no procurement, no vendor relationship, no lock-in). To be explicit: I am not recommending we adopt it as a dependency. It is a one-maintainer project, last released mid-2023, with no downstream users. The ask is a time-boxed spike — days, not a sprint — after which we either fork the useful parts under our own namespace or build on something supported. The deliverable is a sizing number and a decision, not a merge to main.
For engineering: Use it as a reference architecture and throwaway scaffold. Do not add it to composer.json in anything customer-facing. If we pursue the SDK, plan to vendor or fork the useful parts and own maintenance, with a pre-scoped fork ready before an incident, not improvised during one. Isolate it behind an internal adapter (SdkClient/Transporter) so package-specific abstractions never leak into public SDK contracts and we retain a swap path to Laravel's HTTP client, Saloon, or a fork. Normalize errors and configuration at that boundary — ambiguous throw-vs-return semantics on 4xx/5xx must not become part of our public contract. Note the integration shape: it expects an injected PSR-18 client, so there is no service provider, no vendor:publish, and no Http::fake() — testing means binding a mock PSR-18 client, which is a small but real training dependency. Before adoption, gate on a compatibility checklist: composer.json constraints against our PHP baseline, PSR-18 conformance (not a bespoke transport interface), default Accept/Content-Type behavior, and whether request/response classes are final (composition) or open (subclassing). Benchmark against Saloon, the Laravel HTTP client, and OpenAPI codegen — that comparison, not the prototype alone, is the decision input.
Bottom line: low cost to try, real cost to own. Fund one spike, name one owner, produce one ADR, and make one deliberate decision — fork-and-own or extract the patterns and walk away. Do not adopt by default.
How can I help you explore Laravel packages today?