jordanpartridge/conduit-interfaces
Shared PHP interfaces and contracts for the Conduit package ecosystem, providing common abstractions that let Laravel components interoperate without tight coupling. Install via Composer to depend on stable contracts instead of concrete implementations.
Architecture fit
conduit-interfaces is a contracts-only package: it ships interface definitions with no service providers, configuration, migrations, routes, or runtime dependencies beyond illuminate/console and laravel-zero/framework. That makes it architecturally "free" to adopt — it adds a compile-time/type-level contract surface without touching the application bootstrapping path. For a Laravel Zero CLI codebase, this is the right shape for enabling dependency inversion: domain/command classes depend on interfaces, and concrete implementations (in-app or in sibling packages) can be swapped per project. The trade-off is that the package delivers leverage only if the team standardises on it across projects; in a single-application context it is largely ceremony.
Integration feasibility
Straightforward. composer require jordanpartridge/conduit-interfaces:^1.1 in a Laravel Zero application; no publish step, no provider registration, no environment variables. The v1.1.0 change is a pure constraint widening (laravel-zero/framework and illuminate/console to ^11.0|^12.0), which is correctly classified as a minor release under semver — no API surface described as changed. The practical integration work is Composer resolution, not code: root composer.json constraints on illuminate/* must be compatible, and transitive Laravel Zero bumps should be applied with -W to avoid partial resolution.
Technical risk Low technical risk, moderate supply-chain risk. The release is additive — the only failure mode it introduces is a solver conflict, which is loud and immediate rather than silent. The real risk profile is vendor maturity: a 1.x package, single maintainer, and a changelog that explicitly names the author's own downstream project ("THE SHIT") as the driver for the release. That is a strong signal the package's roadmap tracks internal consumption rather than external user demand — fine for compatibility, weaker for long-term API stability guarantees. PHP 8.2+ floor is acceptable if the host fleet is already on 8.2/8.3.
Key questions
^11.0 and ^12.0 matrices, or is the constraint widened without a corresponding test matrix?Stack fit Well-matched to a Laravel Zero + PHP 8.2+ CLI estate. The package imposes no framework version of its own beyond what the host already requires, so it fits both the current 11.x fleet and any 12.x migration in flight. It is not applicable to full Laravel HTTP applications unless the interfaces are intentionally framework-agnostic — verify that before assuming reuse across web and CLI surfaces.
Migration path
Additive adoption, no cutover. Sequence: (1) upgrade the package to ^1.1; (2) in each consuming CLI, ensure the root constraint allows laravel-zero/framework ^12.0 and illuminate/console ^12.0; (3) run composer update jordanpartridge/conduit-interfaces laravel-zero/framework illuminate/* -W and inspect the lock diff; (4) adopt interfaces incrementally per command/module rather than in one sweep. No data migration, no backfill, no downtime — this is a dependency-graph change only.
Compatibility
| Dimension | Status |
|---|---|
| Laravel Zero 11.x | Supported |
| Laravel Zero 12.x | Newly supported in 1.1.0 |
| PHP 8.2+ | Supported |
| Laravel 12 (web) | Not stated — verify |
| Breaking changes | None indicated |
The one compatibility caveat worth flagging: supporting two framework majors in a single release line means the package must remain behaviour-identical across both. Any future interface that leaks an 11-only or 12-only signature will immediately break the dual-support promise.
Sequencing
Treat v1.1.0 as an enabler for the Laravel Zero 12 upgrade rather than a driver of it. Recommended order: bump conduit-interfaces first (harmless on 11.x), then migrate hosts to Laravel Zero 12, then tighten root constraints to ^12.0 once every consumer is across. Pin ^1.1 — do not float to * — so the next minor is an explicit, reviewable pull.
Maintenance Near-zero ongoing maintenance: no config to drift, no scheduled tasks, no runtime state. The only recurring task is tracking upstream constraint support as Laravel Zero ships new majors — the same chore this release performed. Budget a small recurring "is this package still current?" check rather than continuous ownership.
Support Support burden is developer-facing, not operations-facing. Expect questions of the form "which implementation do I bind?" rather than "why is this failing in production." Because the maintainer appears to be a single individual consuming his own output, external support responsiveness is unproven; treat upstream issue resolution as best-effort and be prepared to fork — which, for an interfaces-only package, is a genuinely low-cost contingency.
Scaling Scales trivially in the runtime sense — no per-request or per-invocation cost. Scaling concern is organisational: the value grows with the number of projects sharing the contracts, but so does the coordination cost of any future breaking change. If adoption spreads beyond a handful of CLIs, establish a convention that interface changes land as a major with a documented deprecation window.
Failure modes
illuminate/* constraints.Ramp-up Minutes. A developer needs to read the interface list and understand where bindings live; there is no new tooling, no CLI command, no operational runbook. The only onboarding investment is the architectural convention itself — documenting which interfaces exist and which implementations are canonical per project.
Verdict: Adopt ^1.1 where the team is already committed to interface-driven composition in Laravel Zero. The release is a clean, backwards-compatible enabler for Laravel Zero 12 and carries no meaningful operational risk; the residual concerns are vendor maturity and whether the abstraction earns its keep in a single-project context, not technical soundness.
How can I help you explore Laravel packages today?