tempest/kv-store
A lightweight key-value storage abstraction for Tempest PHP applications, offering a simple, consistent API for storing, retrieving, and managing persisted values while keeping storage code clean and framework-friendly.
Framing correction. Despite the prompt's "Laravel/PHP package" label, tempest/kv-store is not a Laravel package. It belongs to the Tempest framework ecosystem (tempestphp), a separate PHP framework with its own container, discovery, and configuration conventions. Laravel overlap exists only at the PHP/Composer level. Any evaluation must start from that mismatch, because it determines whether the package is a drop-in utility or an ecosystem commitment.
Architecture fit. The component is a key-value store abstraction with pluggable drivers (file-backed, in-memory, and typically Redis/array variants). Architecturally, this occupies the same slot as Illuminate\Cache / PSR-16 in a Laravel codebase. For a Laravel team, the functional overlap is near-total: Laravel already ships Redis, Memcached, database, DynamoDB, file, and array stores with TTL, tags, locks, and atomic increments. The differentiation would only matter if we wanted a framework-agnostic KV contract decoupled from Laravel's container — and that is not our stated need. Verdict: low architectural fit unless we are explicitly exploring Tempest.
Integration feasibility. Composer-installable, MIT-licensed, and published as a read-only sub-split, which means the split exists precisely to allow standalone installation outside the monolith. That is a positive signal for feasibility. The real friction is transitive: Tempest components commonly depend on tempest/support, tempest/core, and PSR-11 container contracts, and recent Tempest releases track PHP 8.4+. Installing it into a Laravel 10/11 app on PHP 8.2–8.3 will likely produce constraint conflicts or force a PHP upgrade. Expect to spend a half-day just proving the dependency graph resolves, before writing a line of integration code.
Technical risk. High, and mostly non-technical in nature:
tempest/framework monorepo. We cannot fork-and-patch cleanly within our own review process, and our internal contribution workflow would need to target an upstream we do not control.Key questions to resolve before any commitment:
tempest/kv-store install and function without tempest/framework present, or does it require the Tempest container for driver resolution?psr/container and psr/simple-cache?Stack fit. Poor-to-marginal for our current Laravel estate. If the goal is a KV store inside Laravel, Illuminate\Cache or symfony/cache are the correct answers — both are mature, both support PSR-16, both have Redis and file drivers with documented semantics. tempest/kv-store only becomes rational if the strategic intent is to evaluate Tempest itself, in which case this component is one leaf of a much larger decision and should be assessed as part of a framework spike, not in isolation.
Migration path. There is no realistic migration path into this package from Laravel, because there is nothing to migrate away from that Laravel's cache does not already do. The reverse — migrating off tempest/kv-store — is trivial by design (thin interface, swappable driver), which is the one genuine architectural virtue here. Treat it as low lock-in.
Compatibility. Two hard gates: PHP version floor and container/PSR constraints. Resolve both with a throwaway composer require --dry-run in a branch before allocating any engineering time. If the dependency graph drags in tempest/framework, the package is effectively all-or-nothing and the decision escalates to "adopt Tempest," not "adopt a KV store."
Sequencing. If we proceed at all:
Illuminate\Cache as the control.Do not sequence this into a critical path. It belongs in a sandbox with an explicit expiry date.
Maintenance. The read-only split model means the repo is a build artifact, not a collaboration surface. Upgrades arrive as version bumps driven by Tempest's monorepo releases; we cannot cherry-pick a fix without going upstream. We must pin an exact version and treat every bump as a change requiring regression testing. Budget ongoing cost for tracking a fast-moving pre-1.0-adjacent framework.
Support. No vendor, no SLA, no commercial backing evident from the package metadata. Support is community channels (GitHub Discussions / Discord) with a small maintainer pool. For an internal platform team, this is acceptable for a sandbox spike and unacceptable for a production dependency without a named internal owner who can read the driver source.
Scaling. Entirely driver-dependent, and the drivers must be verified rather than assumed. A file-backed store will not survive horizontal scaling — shared-filesystem semantics, lock contention, and per-node cache divergence will surface first under load. A Redis driver would scale, but at that point we are using Redis through an unfamiliar, unproven client wrapper when Laravel's Redis integration is already hardened. Note that the file driver's failure characteristics under concurrent writers are the single most likely production surprise.
Failure modes to design for:
Ramp-up. Non-trivial and under-budgeted. Tempest conventions (attribute-driven discovery, its container, its config layering) are unfamiliar to a Laravel team, so even a small integration requires reading framework documentation we do not otherwise use. Estimate 2–3 days of learning before the first meaningful line of integration code — for a component whose function Laravel already provides. That ratio is the core argument against adoption.
TPM recommendation. Do not integrate into any production Laravel service. Fund a bounded 1-week spike only if a Tempest framework evaluation is separately on the roadmap; otherwise close this out and route the underlying requirement to Illuminate\Cache or symfony/cache. The package is technically clean and MIT-licensed, but zero adoption, a read-only collaboration model, and near-total functional redundancy with our existing stack make the risk-adjusted value negative.
How can I help you explore Laravel packages today?