Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Support Laravel Package

orchestra/support

Orchestra Support provides foundational helpers for Laravel applications and Orchestra Platform extensions, including base service providers, memory limit utilities, string and array helpers, and testing conveniences that streamline package development.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. orchestra/support is a shared utility layer for Laravel applications — a base service provider, a message collection, an in-memory registry, string/array helpers, traits, and collection extensions. Its intended deployment surface is the Orchestra Platform package ecosystem, not customer-facing application code. In an architecture review, it reads as internal scaffolding: the value is avoided boilerplate and enforced conventions across a package portfolio, not shipped product capability. It has no database footprint, no service-provider-heavy runtime surface, and Composer-only integration, so it slots alongside an existing Laravel app rather than re-architecting it. That is architecturally inexpensive, and it is also the entire basis of the value proposition — outside multi-package Laravel work, most of the benefit evaporates.

Integration feasibility. High, with caveats. Installation is a single Composer require, and in the common case the package is already present transitively — most often via orchestra/testbench, the de facto standard for testing Laravel packages. That means the first integration question is documentary, not technical: are we choosing this dependency or inheriting it? composer why orchestra/support answers that in one command and should precede any capacity allocation. On Laravel 9+ the install is close to drop-in. On Laravel 8 it is not a package decision at all — it is a framework migration wearing a package ticket.

Technical risk. Material and underpriced by the changelog. First, bus factor: no recorded stars, no listed dependents, score 0.3, one effective maintainer, no vendor SLA. For a foundational utility that is a bet on a single niche ecosystem. Second, framework coupling: v7.0.0's only documented change is raising the floor to Laravel 9+, so the package's support ceiling is a line item in the platform roadmap — a stall on the next Laravel major freezes every dependent package simultaneously, highest impact and lowest visibility. Third, undocumented migration surface: a one-line changelog for a major version is a contract reset with no paper trail, so the v6→v7 diff must be read directly for renamed classes, changed signatures, and facade-alias changes. Fourth, namespace collision with Illuminate\Support — two Str/Arr/provider vocabularies in one codebase is a recurring source of confusion. Fifth, and most likely to cause a production incident, is long-lived state: the in-memory registry as a singleton leaks between requests in Octane or queue workers unless reset in terminate() or scoped per request.

Key questions.

  • Are we adopting this deliberately, or is it arriving as a transitive dev dependency via testbench? If nothing calls its API, is the correct decision to remove it rather than sequence an upgrade?
  • Who is the named internal owner watching upstream releases?
  • Is anything on a customer-critical path depending on it, or is it confined to internal tooling and package scaffolding?
  • Is the Laravel 9+ migration already funded and scheduled, or is this ticket about to absorb framework work?
  • What is the fork-or-replace cost, priced before we need it?
  • Do we have a plan for a single-file replacement seam (an internal facade) so a v8 rename or abandonment is a one-file fix?

Integration Approach

Stack fit. Correct fit for: multi-package Laravel portfolios, Orchestra Platform packages and addons, and internal tooling where shared conventions reduce onboarding and review cycles. Wrong fit for: single-package applications, anything on Laravel 8 with no funded migration, and customer-facing critical paths where an unmaintained foundational dependency is an unacceptable concentration of risk. Confirm the PHP/Laravel floor explicitly — 8.0+ for Laravel 9, 8.1 for 10, 8.2 for 11.

Migration path. Two rules govern sequencing. First, framework first, package second: never push the package ahead of the framework, and never combine them in one PR. Lockfile-only framework upgrade behind normal CI, then a lockfile-only package bump behind normal CI — so a regression is unambiguously attributable. Second, resolve conflicts empirically: when a repo refuses the bump, run composer why-not orchestra/support ^7.0 rather than reasoning from the changelog; the usual cause is the transitive intersection of illuminate/* ranges in apps that pin framework components individually. On Laravel 8, pin 6.x and carry a dated remediation ticket.

Compatibility. Three compatibility controls to land on adoption day. Namespace hygiene: alias Orchestra\Support\Str as OStr at the top of any file that also imports Illuminate\Support\Str, and never let one class speak both vocabularies — a file importing both is doing two jobs. Alias registration: if the package's facades are used, confirm the alias is registered in the package provider or the FQCN is imported; an alias that passes in a Testbench test and fails in production is almost always a provider loaded only in the dev environment. Dev-dependency confinement: where composer why shows the package arrives only via testbench, pin it in require-dev and keep it off the production autoload path — removing a foundational dependency nobody calls is a net risk reduction and costs ten minutes.

Sequencing.

  1. Classify — run composer why and composer show in every candidate repo; split the estate into "chosen" and "inherited transitively." Inherited-and-uncalled repos get a removal ticket, not an upgrade ticket.
  2. Time-boxed spike — one afternoon in a throwaway package under orchestra/testbench, exercising the provider base, the message collection, and the registry. Cheap to decide, cheap to undo; approve as a spike, not a multi-sprint commitment.
  3. Internal wrapper — before wider adoption, build a thin Acme\Support\* facade over everything actually called, so call sites never reference the vendor class and v8 renames or abandonment become a one-file fix.
  4. Portfolio standardization — adopt one convention per repo: every package provider extends an internal base that extends theirs, so a future major surfaces in one place.
  5. Framework bump, then package bump — as two PRs, in that order, with config:clear, route:clear, and package:discover in the deploy checklist.

Operational Impact

Maintenance. Low runtime maintenance, high ownership maintenance. The package itself requires almost nothing operationally — no schema, no queue, no infra. What it requires is a named internal owner who watches upstream releases; unowned dependencies become debt silently. The standing hazard is the framework ceiling: because this is foundational, a stall on the next Laravel major freezes every dependent package at once, and that event has the highest impact and the lowest visibility of anything in this assessment. Track the package's Laravel support ceiling as a named roadmap line item, not as a surprise.

Support. Effectively self-support. There is no meaningful documentation site, the v7 changelog is one line, and public adoption signals are nil — no stars recorded, no dependents, score 0. The first twenty minutes of any investigation should be ls -R vendor/orchestra/support/src rather than reading docs, orienting around the four families of files: base provider(s), message collection, in-memory registry, and Str/Arr helpers and traits. Verify the exact base-class name and boot() semantics in source before relying on them — the hooks are the entire value proposition, so read them rather than guessing.

Scaling. Runtime cost is negligible; the scaling risk is process lifetime, not throughput. The in-memory registry is per-process by design. In Octane or a queue worker serving multiple requests, a singleton registry is precisely the kind of long-lived state that leaks between requests — reset it in a terminate() handler or scope it per request. Adopt a key-namespacing discipline (billing.gateway, tenant.id); an unnamespaced shared registry across many packages produces collisions at the worst possible moment.

Failure modes. In rough order of likelihood:

  • Registry state leak in Octane/queue workers — the single most probable production incident from this package.
  • Cached manifest masking a provider or alias change — mitigated by putting config:clear && route:clear && package:discover in the deploy checklist whenever a provider change lands.
  • Alias registered only in the dev environment — usually testbench pulling the package in as require-dev, so tests pass and production fails.
  • Composer range conflict on a framework bump — diagnosed with composer why-not, not with the changelog.
  • Silent breakage on the next major — renamed classes, changed signatures, facade-alias changes, none of them in the release notes.
  • Upstream abandonment or framework stall — the tail risk that justifies the wrapper and the pre-priced fork-or-replace option.

Ramp-up. Roughly half a day to first productive use: one hour to orient in vendor/ source, one afternoon to prove the provider base and message collection in a scratch package under orchestra/testbench, and one hour to build the internal wrapper. The wrapper is the highest-leverage hour spent — it caps downstream ramp-up (call sites reference Acme\Support\*, not the vendor class), creates a free seam for tests, and converts a future v8 rename or abandonment from an estate-wide grep into a single-file change. Extension discipline matters for ramp-up too: subclass the provider base and traits, never patch vendor/; extend the message collection by composition rather than by overriding undocumented internals; and prefer Illuminate\Support for generic work, reaching for Orchestra helpers only where they encode a convention you can articulate in one sentence.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle
adachsoft/api-version-bundle
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager