orchestra/installer
A reusable installer foundation for Orchestra Platform extensions, handling install, uninstall, and update routines so packages can wire up migrations, configuration, and resources consistently within Laravel applications.
Architecture fit. orchestra/installer is not a library you integrate — it's a global Composer binary that scaffolds an Orchestra Platform application. Architecturally it sits outside our production topology entirely: it is a one-shot bootstrapper whose output (a Laravel app with admin UI, auth/ACL, schema, and extension registration already provisioned) is what actually enters our architecture. That distinction drives every downstream conclusion. Fit is therefore conditional on one thing: whether Orchestra Platform itself is a candidate for our admin/back-office layer. If the answer is no, this package has zero architectural relevance. If the answer is "we should evaluate it," the installer is the correct on-ramp, because the alternative is reproducing the AuthorizationCreated and SchemaCreated provisioning by hand — and those two v5.2.0 events prove the installer owns real setup logic, not just a composer create-project wrapper.
Integration feasibility. Straightforward mechanically and low-blast-radius if scoped as developer tooling. Requirements are PHP, Composer, a reachable database, and a PATH entry for the global bin directory. Everything after orchestra install is a normal Laravel app: Artisan, Composer, and the team's existing test tooling all work unchanged. The feasibility constraint is not technical difficulty but process discipline — keeping the binary out of composer.json, generating once, and committing the result.
Technical risk. Concentrated in four areas, in order of severity:
src/Console/ and src/Installation/, or filing an issue and waiting.Key questions to resolve before committing engineering time:
composer.json stay clean of the installer, and what exactly does each provisioning step create (tables, roles, permissions) that we'd have to reproduce?orchestra install viable non-interactively? No --no-interaction mode is documented, which likely forecloses CI-native regeneration and forces the commit-the-scaffold pattern.Stack fit. Native fit only if we are already a PHP/Laravel/Composer shop — which we are — and only for the admin/back-office use case. It introduces no new runtime paradigm, no new language, and no new CI toolchain. For an API-first or headless product this is a non-fit by construction; laravel/installer is the correct choice for a plain Laravel app.
Migration path. There is no migration — there is a decision gate followed by a scaffold. The sequence is: spike in a disposable environment, generate a reference app, evaluate the resulting admin UX/extension model against building our own or buying commercial, then either adopt a committed scaffold as an internal golden path or walk away with a documented runbook. Crucially, the artifact under evaluation is the generated application, not the installer.
Compatibility. Governed entirely by the four-way version matrix. Pin orchestra/installer:^5.2 explicitly — composer global require grabs latest by default, which is how teams get the silent skeleton drift described above. Record the exact installer, PHP, Laravel, and Orchestra Platform versions in the generated project's README at scaffold time, not retrospectively. The extension surface is exactly two events (AuthorizationCreated, SchemaCreated) with no config file, no plugin system, and no pluggable providers — plan customization around those two hooks or plan to post-process the app.
Sequencing.
orchestra install into a throwaway directory and read the console transcript step by step — that transcript is the best available documentation of what the tool does to a machine.git init + initial commit, and record the version matrix.AuthorizationCreated / SchemaCreated listeners in an internal template or install-time service provider — scaffold customization, never runtime behavior.composer create-project steps plus a reproduction of the authorization and schema provisioning. This is the highest-value deliverable regardless of the adopt/reject outcome.Anti-pattern to forbid explicitly: regenerating the scaffold in CI. It couples the build to a low-adoption global binary and to upstream skeleton drift.
Maintenance. Near-zero if used as intended (generate once, commit, never re-run) and near-total if used as a build step. The real maintenance burden is the fallback skeleton: once we depend on the generated app, we own a hand-maintained equivalent for the day the installer breaks. Budget that as an ongoing cost, not a spike artifact. The installer itself has no maintenance obligation we can influence — no release cadence is evidenced.
Support. Effectively none externally. Zero dependents means no community answers and no third-party patches; internal support means reading src/Console/ and the Orchestra Platform docs, because the installer has no standalone documentation — its behavior is documented as the platform's installation chapter. Escalation path is a GitHub issue with an unknown response time. Treat any commitment to this package as a commitment to self-support, and staff the spike accordingly. Commercial support, security review, and published cadence are all absent.
Scaling. Not a meaningful axis for the installer — it runs once per project, not per request. Scaling concerns belong to the generated Orchestra Platform app and should be evaluated there. The one scaling-adjacent property that matters: if we standardize a golden path, every new project inherits the pinned matrix, so a stale template propagates stale versions across the org at once. Central ownership of the template version is the mitigation.
Failure modes. Well understood and uniformly manual:
.env files and orphaned databases, start over. Half-completed installs leave cleanup work by hand.--force overwrite: no dry-run; the installer wants an empty target. Never point it at anything we care about.orchestra/installer appears in the generated composer.json, something went wrong — audit it post-scaffold every time.Ramp-up. Low for anyone with Laravel habits, and the mental model to teach is narrow: orchestra install ≠ composer create-project, because it also runs provisioning. The genuinely hard part isn't the tool, it's the two traps — assuming vanilla Laravel scaffolding is equivalent, and assuming a headless path exists. Onboarding cost is one containerized spike plus reading the console transcript. The durable onboarding asset is the fallback runbook, which is what keeps new-project setup working after this tool goes stale.
How can I help you explore Laravel packages today?