orchestra/contracts
Orchestra Contracts provides the shared interfaces and abstractions that underpin the Orchestra Platform for Laravel. It keeps packages loosely coupled and consistent, making Orchestra-based applications easier to build, extend, and maintain.
orchestra/contracts is an interfaces-only package — extension discovery, application access, shared memory, authorization bridging, notifier and widget abstractions — with zero runtime behavior, no service provider, no config, no routes. The decision it actually informs is whether we standardize our Laravel admin/extension layer on the Orchestra Platform. It does not support a feature or roadmap decision on its own.Orchestra\Contracts\* rather than concrete orchestra/foundation classes. This lets us responsibly make the roadmap claim "our admin layer is swappable," conditional on that discipline being enforced in code review.Recommendation: Hold / do not adopt as a new dependency unless an Orchestra commitment already exists. Its value is derivative of that platform decision, not independent of it. If we do adopt, pin deliberately, name an owner for the upgrade cadence, and decide the vendored-fork fallback in advance.
Adopt only when all of the following hold:
composer why-not orchestra/contracts check against our target Laravel version passes. That single command answers go/no-go faster than any README; make it a CI pre-merge check to catch illuminate range collisions early.Look elsewhere when:
Illuminate\Contracts\* and PSR interfaces cover the general cases; spatie/laravel-package-tools covers package scaffolding with far broader community support and needs no justification.illuminate types (Illuminate\Contracts\Foundation\Application, Illuminate\Support\Collection), so moving to a non-Laravel container is a rewrite, not a swap. A hand-written narrow interface set is a cleaner boundary if framework-agnostic ports are the goal.Planned mitigations if adopted: pin via a shared internal package or Composer platform constraint so one upstream major bump doesn't fan out into N coordinated upgrades; add a conformance test asserting our adapters implements the interfaces so signature drift fails in CI rather than as a fatal type error at boot; and write the fork procedure into the runbook before we need it.
To executives: This is a small, free, MIT-licensed glue package — a set of interface definitions from the Orchestra Platform, a Laravel admin/extension framework. It adds no features and no runtime code; it exists so components can talk to each other without hard dependencies. It costs essentially nothing to use and delivers nothing on its own. External adoption is effectively zero, meaning one maintainer is the whole support model. The decision actually on the table is not this package: it is whether we standardize on Orchestra as our Laravel admin layer. If we do, this comes along for free; if we don't, we should skip it and use Laravel's native contracts. Runtime risk is nil; the risk is strategic — upgrade timing we don't control, which we address by pinning versions and pre-approving a cheap fork fallback.
To engineering: Treat it as an architectural boundary, not a capability. It is interfaces-only, safe to depend on narrowly, and trivially reversible to install — but pin it, expect to own the upgrade cadence across Laravel majors, and keep it off any critical path given the single-maintainer, zero-dependent profile. If we adopt Orchestra, code against these contracts rather than the concrete classes so the exit path is real; resolve implementations from the container rather than naming concrete Orchestra classes. If we don't, Illuminate\Contracts plus PSR is the lower-risk default.
Three things to plan around: upgrade gating (a Laravel major ships while the matching branch lags — mitigate with a pre-decided vendored fork), semantic drift (an interface signature change surfaces as a fatal type error in our implementing classes at boot — mitigate with our own conformance test asserting the interfaces we implement), and dependency conflicts (illuminate range collisions — mitigate with composer why-not as a CI pre-merge check). Sequence the work as: dependency audit (hours) → confirm Orchestra commitment → pin with a named owner → conformance test → fork procedure documented. Allocate an afternoon of ramp-up for anyone fluent in Laravel contracts and container binding; the hidden cost is understanding Orchestra's extension, memory, and widget semantics, which requires reading the implementation packages, not this repo.
How can I help you explore Laravel packages today?