orchestra/extension
Orchestra Extension adds modular extension support to Laravel, letting you package features as self-contained modules with manifests, service providers, and activation controls. Manage, activate, and migrate extensions through a central API for cleaner, modular applications.
orchestra/extension or not" — it's "do we build our own discovery, activation-state, migration-ordering, and boot-order registry, or do we adopt someone else's?" Evaluating it produces a concrete baseline to price that build against, even if the answer is "neither, use native package discovery plus a table we own."extension:detect → activate → migrate → publish. That capability is what makes a modular monolith a defensible alternative to premature microservices. The PM takeaway is whether we need lifecycle runtime control or merely code organization; only the former justifies this dependency.Consider it when:
orchestra/foundation, and the question shifts from "adopt?" to "pin and own deliberately?" — a materially cheaper decision. Verify with composer require orchestra/extension --dry-run before designing anything; constraint failures cost an hour and settle the matter.orchestra.json and deterministic boot ordering. If we would otherwise write that orchestration ourselves, this is a legitimate reference implementation to price against.Look elsewhere when:
nwidart/laravel-modules for scaffolding, Laravel's native package discovery for registration, and a small application-owned activation table cover most of the value with a maintainable footprint.activated() per tenant means binding a custom Factory implementation early. Late retrofits after extensions are written against global state are painful.Note the escape hatch worth recording in the decision record: native package discovery plus an enabled_extensions table we control, with per-package migrate --force in the deploy script, gets roughly 80% of the value with a clear ownership story.
For executives — the one-paragraph version. We evaluated orchestra/extension, a lifecycle component for building toggleable modules on Laravel. It solves a real product capability — shipping features that can be discovered, enabled, migrated, and disabled at runtime without a redeploy — which is the foundation for tiered SKUs, on-prem module licensing, and any future partner ecosystem. But it is not a safe strategic dependency as-is: minimal adoption signals, a single maintainer, and a Laravel 8-era ceiling mean adopting it means owning it. Recommendation: do not adopt as a dependency. Do use it as the reference spec for a small, application-owned equivalent, and decide the feature-gating and ownership questions now rather than next quarter.
For engineering — what we're asking for. A one-day spike, not a quarter. Verify the Composer dry-run resolves; if it fails on PHP or illuminate/* constraints, stop. Otherwise stand up a single throwaway extension (extensions/acme/hello/ with composer.json, orchestra.json, and one logging service provider) and run detect → activate → migrate → publish. If the log line appears, we've proved detection, activation, provider registration, and migration orchestration. If it doesn't, we've bought certainty cheaply. Either way the output is a spec, not a merge.
The honest trade-off to state plainly. We are choosing a smaller owned surface over a larger borrowed one. That costs us a build and ongoing headcount; it buys deterministic ownership, a modern framework baseline, and no ambiguity about who fixes a broken activation at 2am. Three risks we must design around regardless of path: "active but not autoloaded" (check autoload before the manager), cache staleness after deploy (make invalidation an explicit release-checklist item), and silent partial activation (chain activate → migrate → publish → verify in one ExtensionManager call and fail loudly).
What we are explicitly not buying. A security boundary, a versioned host→extension contract, or a plugin marketplace. If any roadmap item assumes third-party code runs safely inside this model, that is separate, unscoped work.
How can I help you explore Laravel packages today?