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.
The build-vs-buy call on a settings layer. Orchestra Memory is a small, single-purpose key-value store — fluent get/set/forget/has, namespaced stores, and pluggable backends (in-memory, cache, database) — wired into Laravel via a service provider and facade. The decision it informs is narrow but real: do we standardize application settings behind one repository abstraction, or keep letting ad-hoc settings code accumulate across the codebase? Where the product has several settings surfaces — user preferences, tenant configuration, extension/plugin options — consolidating them behind one API is a durable maintenance reduction. Where the requirement is one or two values, config(), the cache facade, and env vars already do the job and the dependency is pure overhead.
Roadmap work it unblocks. The natural consumers are features needing dynamic, persisted, non-deploy configuration: admin-editable settings, per-tenant overrides layered over application defaults, per-extension configuration inside an Orchestra-style CMS, and operational toggles ops can flip without a release. Because the backend is a driver choice rather than a code change, persistence becomes a configuration decision — the same call sites can run on the array driver in tests, cache in staging, and database in production. That is a genuine architectural convenience worth sequencing as an enabler rather than a standalone feature.
Sequencing the Laravel 8 / Octane decisions. v6.0.0 is a compatibility release — Laravel 8 and Octane support, no new capability announced. For a PM that is a scheduling input, not a feature: adopting on a modern baseline is no longer blocked, and the Octane claim means this isn't an automatic carve-out in an Octane migration. Both are "remove a blocker from the critical path" outcomes worth recording on the roadmap even though no user-visible behavior changes.
The adoption signal is the thing to weigh hardest. Effectively zero dependents and a 0.3 composite score. This is a single-maintainer, ecosystem-specific component from the Orchestra Platform family. That doesn't make it bad — the API is small enough to read in an afternoon — but it changes the calculus. You are not buying ecosystem gravity, community battle-testing, or a hiring pool. You are buying a small, legible abstraction and taking the bus-factor risk onto your own books. Defensible for an internal settings layer whose interface is trivial to reimplement; much harder to defend as a load-bearing platform dependency across multiple teams.
Use cases that justify it:
Adopt when all of the following hold:
composer.json constraints directly rather than inferring the support matrix from release notes, because a major bump conventionally drops older framework floors.Look elsewhere — or write the twenty-line version yourself — when:
For executives. This is a small, single-purpose component that standardizes how the application stores and reads its own settings — the difference between one well-defined place for configuration and several inconsistent ones scattered through the codebase. The v6.0.0 release contains no new customer-facing capability; its value is that the package is now current with our framework version and with Laravel Octane, so it does not become a blocker when we modernize. The decision on the table is whether to adopt a low-adoption, single-maintainer dependency as our settings layer. My recommendation is conditional: adopt it where the settings requirement is real and the exit cost is low — the API is small enough to replace internally — and decline it where the need is a single config value or where we require audit trails and validation it does not provide. I would not describe this as a strategic platform commitment.
For engineering. Treat this as a thin repository abstraction over get/put/forget, with service-provider and facade wiring plus pluggable backends. Two things matter before committing. First, read the composer.json constraints directly — v6 is a major bump whose stated changes are only Laravel 8 and Octane support, which conventionally means older framework and possibly older PHP versions were dropped; verify rather than assume, and check whether any published config or extension needs review. Second, the Octane claim is a statement about request-state isolation, not a feature: verify it under sustained concurrency if we intend to run Octane, and audit our own singletons for the same hazard — the package cannot protect us from our own cached state. There is essentially no dependents base, so we own the upgrade path and the debugging: pin the version, record the supported matrix in the dependency register, and keep our usage shallow — the package API plus our own wrapper, never subclassing package internals — so replacement stays cheap. If the requirement is genuinely a few values, prefer the framework's own config and cache primitives and spend the dependency budget elsewhere.
How can I help you explore Laravel packages today?