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

Memory Laravel Package

orchestra/memory

Orchestra Memory gives Laravel apps a lightweight in-memory key-value store for the current request lifecycle. Use its simple put, get, has, and forget API to cache computed values and share state between components without touching persistent storage or external cache drivers.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. Orchestra Memory is a small, conventional Laravel package: a service provider, a facade, and a driver-based repository for namespaced key-value settings (get/set/forget/has) backed by array, cache, or database drivers. From a TPM lens the property that matters most is surface area, and this one is tiny. It occupies the narrow niche between static config files (deploy-coupled, developer-owned) and bespoke settings tables (schema, migrations, and a repository we would have to write and own). That makes it cheap to adopt and — critically for a TPM — cheap to reverse, which is the single most attractive attribute in the dependency.

It follows Laravel conventions rather than inventing them, so it will not reshape our architecture or constrain the design of the features that consume it. It is also not a differentiator: the roadmap value is entirely in not writing ~50–200 lines of settings plumbing and in consolidating three ad-hoc settings implementations behind one abstraction. It is an enabler to be sequenced under a feature, not a feature to be shipped.

Integration feasibility. Low-to-moderate. Integration is a Composer constraint, an optional config publish, and — only if the database driver is used — one migration. No queue workers, no external services, no infrastructure change. The genuine feasibility question is the inverse of what the release notes state: v6.0.0 is a major bump whose only announced changes are Laravel 8 and Laravel Octane support, which conventionally means Laravel 6/7 (and possibly older PHP) were dropped. If any application in the estate sits below Laravel 8, this is not a package upgrade — it is a framework programme, and that programme dominates the estimate by an order of magnitude.

The composer.json constraint is the one artifact that resolves this. A TPM should require it be read and recorded verbatim in the dependency register before any estimate is accepted; do not let the support matrix be inferred from release notes, and do not let it be inferred from a developer's recollection.

Technical risk. Three items should be carried on the risk register, not buried in a ticket:

  1. Undisclosed breaking-change surface. Major version, compatibility-only notes, no referenced upgrade guide. Anything extending package classes, overriding published config, or wrapping the repository is a candidate for silent behavioural change — wrong values returned rather than a stack trace. Silent data errors in a settings layer propagate into feature behaviour and are diagnosed weeks later.
  2. Octane correctness is asserted, not proven. "Added support for Laravel Octane" is a claim about statelessness across long-lived workers. The failure mode is cross-request state bleed — intermittent, environment-sensitive, and potentially a data-exposure incident rather than a clean outage. That makes it a security-adjacent risk requiring targeted verification under sustained concurrency, not a smoke test in staging.
  3. Thin adoption signal. Effectively zero dependents, low composite score, single-maintainer, ecosystem-specific. We will be close to the only consumer. There is no community battle-testing to borrow and no ecosystem pressure keeping adjacent packages compatible. This is a vendor-risk line item, not a blocker — but it converts to a blocker the moment the package becomes load-bearing for multiple teams.

Key questions.

  • What are the exact Laravel and PHP floors and ceilings in composer.json, and is the v5 line end-of-life or merely frozen?
  • What specifically changed to achieve Octane support, and is there a documented statelessness contract for extension authors?
  • Is there an upgrade guide enumerating breaking changes beyond the two headline items?
  • What are the driver semantics — especially the in-memory driver — and how do cache eviction and process lifecycle interact with values we expect to persist?
  • What is the CI test matrix, and is Octane exercised there, under what concurrency?
  • Who is the named internal owner, and what is the review window that triggers the exit plan?

Integration Approach

Stack fit. Strong on Laravel 8, and strongest if Octane (Swoole/RoadRunner) is genuinely on the roadmap — v6 is effectively the minimum viable version in that topology. If the estate is on Laravel 6/7, fit is conditional on completing a framework upgrade first, and the package should be scoped as a follower on that programme, never as its driver. If Octane is not planned, v6.0.0 is housekeeping: record it as a dependency-maintenance item and do not stand up a workstream around it.

Migration path. Treat it as framework-coupled, not a package bump, and plan four steps:

  1. Baseline. One page, not tribal knowledge: every application consuming the package with its Laravel version, PHP version, driver in use, and whether it extends or overrides package internals. This table is the input to every later decision and every estimate.
  2. Framework first. Move to Laravel 8 with the package held at its current major; take the application green before touching the dependency.
  3. Package bump, isolated. Upgrade to v6.0.0 as the only change in that release. Given thin release notes, attribution-on-regression is the primary risk control available — protect that isolation in the schedule even when it costs a release slot.
  4. Octane last. Enable or validate Octane only after steps 2 and 3 are stable, and exercise the package's integration points under sustained concurrent load with a settings-read/write parity check across drivers.

If the framework upgrade is large, split steps 2 and 3 into separate workstreams with separate rollback points and separate go/no-go gates. Compressing them for schedule reasons forfeits the only diagnostic lever available.

Compatibility. Run a Composer dry-run resolution against each application's lockfile early. Conflicts surface only at resolution time, and one lagging adjacent package can deadlock the entire Laravel 8 move — a schedule risk that is invisible until it is expensive. Confirm the PHP floor explicitly rather than assuming it tracks Laravel 8's. Separately, audit our own code for the same long-lived-singleton hazards the package claims to have fixed; the package cannot protect us from state we cache ourselves, and Octane will not distinguish between the two when it fails.

Sequencing. Framework → package → Octane, each gated on its own acceptance criteria and rollback point. Define the gates before the work starts — green test suite, no new deprecations, settings read/write parity verified against the prior driver, Octane soak test clean — so each gate is a decision rather than an opinion. Then place the first consumer feature (admin settings panel, per-tenant overrides, or extension configuration) immediately after the package gate, so the abstraction is proven against a real requirement rather than adopted speculatively.

Operational Impact

Maintenance. Upstream is neutral-to-positive but concentrated: a low-adoption, single-maintainer package is one maintainer's attention away from stalling. Record it in the dependency register with pinned version, verified supported matrix, named internal owner, and a defined review window each framework cycle. If no compatible release lands inside that window, that is the pre-agreed trigger to execute the internal-replacement plan — not a debate. Because the interface is a handful of methods, replacement should be measured in days; keep the estimate honest by writing the wrapper boundary now.

Support. There is no vendor, no SLA, and effectively no community. Support is us. Two TPM actions follow: constrain usage to the package's public API behind a thin first-party wrapper (never subclass package internals, never bind call sites directly to the facade), so debugging and replacement stay inside our own code; and budget support capacity for the settings layer explicitly, however small, rather than assuming it is free because the dependency is free.

Scaling. Technically the package does not constrain scale — the cache driver inherits whatever backend we already run, and the database driver is a simple key-value table. The scaling concern is organizational: every additional team that adopts the facade directly converts a cheap-to-replace internal utility into a load-bearing platform dependency, which is precisely the commitment the adoption signal does not support. Gate broad adoption on a second consumer, and route access through the wrapper so the blast radius stays bounded.

Failure modes. Enumerate them and map each to a detection:

  • Cross-request state bleed under Octane — intermittent, environment-sensitive, potential data exposure. Detect with a concurrency soak test before enablement, not after.
  • Silent behavioural change from the major bump — wrong values, no exceptions. Detect with read/write parity assertions in the release gate.
  • Persistence confusion — values written to the array driver silently vanishing, or cache eviction discarding settings we assumed were durable. Detect by documenting driver semantics per environment and asserting persistence expectations in tests.
  • Upstream abandonment — no patch path on the next framework cycle. Detect via the review window and dependency-register cadence.
  • Dependency deadlock at resolution time — blocks the framework programme. Detect with the early Composer dry-run.

Ramp-up. Low, with one caveat. A developer reads the whole repository in an afternoon, and the API is four methods; onboarding cost is negligible and there is no training surface to build. The caveat is conceptual rather than syntactic: engineers must internalize that this is a settings store with driver-dependent durability, not a cache and not a config replacement. Publish a one-page usage standard covering the wrapper boundary, driver choice per environment, what may and may not be stored (no secrets, no per-request scratch data), and the Octane-safe pattern. That page is the ramp-up artifact; the code will teach itself, and the standard is what prevents the scattered-settings problem from reappearing behind a new facade.

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.
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
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