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

Annotation Cache Bundle Laravel Package

emag-tech-labs/annotation-cache-bundle

Symfony bundle that adds annotation or PHP 8 attribute based caching to service method responses. It scans services, generates proxy classes, and stores results in any PSR-6 cache implementation such as Redis, Memcache, or a simple array.

View on GitHub
Deep Wiki
Context7

Product Decisions This Supports

  • Framework fit decision (read this first): despite the framing of this assessment, this is a Symfony bundle, not a Laravel package. It hooks into Symfony's DI container, compiler passes, and service proxies. So the first decision it informs is a routing decision: is the target codebase Symfony? If yes, it can be evaluated as a candidate. If the target is Laravel, this package is essentially not applicable and the real decision is between native Cache::remember()/Cache::flexible() and an explicit cache decorator layer.
  • Build vs. buy for a declarative caching layer. The core capability — "put an attribute on a read-only service method and get memoization against a PSR-6 backend" — is a cross-cutting concern with a well-understood shape. The buy case is that proxy generation, key derivation, and argument handling are fiddly to get right; the build case is that a hand-rolled decorator or a small wrapper around Cache::remember costs roughly a day and is fully transparent. This package lets you make that trade-off explicitly instead of letting every team reinvent it.
  • Standardizing the caching primitive. Because it requires a PSR-6 implementation, adopting it is a de facto architectural decision to standardize on PSR-6 (Symfony Cache contracts / cache.app pools) rather than ad-hoc file or in-memory caches. That is often a bigger and more durable win than the annotation syntax itself.
  • Performance roadmap scoping. It is a candidate lever for a "reduce p95 latency / cut repeat computation" initiative, specifically for read-heavy, idempotent service methods: reference-data lookups, expensive serialization/aggregation, and repeated third-party API fan-out.
  • Developer-experience / API-surface decision. It sets a precedent about whether application developers may declare caching semantics declaratively in service code, or whether caching must stay an explicit, reviewable, infrastructure-layer concern. That precedent is worth a deliberate decision, not a default.
  • Maintenance-risk acceptance decision. 19 stars, 0 dependents, last release March 2023, and a Travis-era CI badge are themselves the product signal. The realistic decision this package supports is "acceptable for a bounded internal spike" rather than "acceptable as a shared platform dependency."

When to Consider This Package

Consider it when all of these hold:

  • The codebase is Symfony (5.x/6.x era, container-based services, attribute or annotation support already in use).
  • You already run a PSR-6 cache backend (Redis/Memcached/Array) and want to reuse it.
  • You have a repetitive, high-volume pattern of read-only service methods with cheaply serializable return values and cache keys that derive cleanly from method arguments.
  • Caching is additive performance work, not a correctness requirement — a miss or a stale entry degrades latency, not data integrity.
  • You can accept the operational trade-offs of proxy subclasses: services must not be final, internal calls bypass the proxy (self-invocation will not be cached), and cached values must be serializable.
  • You have appetite for a time-boxed spike plus a documented exit plan, and someone on the team owns vendoring/forking if upstream goes quiet.

Look elsewhere when:

  • The target is Laravel. Use Cache::remember/Cache::flexible inside a thin repository or decorator layer, or a response-cache package. Do not attempt to bridge a Symfony DI bundle into Laravel's container; the integration cost will exceed the value.
  • You need invalidation, not just memoization. There is no tag-based invalidation story here that a PM should stake a roadmap on. If business events must evict cache entries (price changes, permission changes, catalog updates), you need explicit key management — which is exactly what explicit caching gives you for free.
  • Observability is a requirement. Proxy-generated calls make hit/miss ratios, key cardinality, and latency attribution hard to instrument. If you need dashboards on cache effectiveness, prefer explicit cache calls that are trivially wrapped with metrics.
  • Static analysis and debuggability matter. Proxy classes confuse IDEs, step-debuggers, and PHPStan/Psalm; stack traces become indirect. Teams with strict typing or high on-call burden should weigh this heavily.
  • You need active maintenance. Unmaintained since 2023 with no dependents means no community safety net, no PHP 8.3/8.4 compatibility guarantees, and no security response path. Treat any production adoption as a fork-and-own commitment, budgeted accordingly.
  • You want cache warming, async precomputation, or stampede protection. Out of scope; solve those at the infrastructure layer.

How to Pitch It (Stakeholders)

For executives (one paragraph): This is a small, free, open-source utility that lets Symfony engineers add caching to a service method with a single annotation instead of hand-writing cache code in every place it is needed. The upside is modest and real: less boilerplate, fewer bespoke caching bugs, and faster delivery on performance work. The downside is maturity — the project is essentially a single company's internal tool published publicly, with no downstream users and no release since early 2023. My recommendation is to treat it as an evaluation candidate, not a platform dependency: run a one-week spike against a real hot path, measure the gain, and if it pays off, adopt it as a small internal fork we own and can maintain. If the target application is Laravel rather than Symfony, skip it entirely and use the framework's built-in cache — it does the same job with zero added dependency risk.

For engineering leads: The mechanism is a compiler-pass-driven proxy generator (via ocramius/proxy-manager) that subclasses services and intercepts annotated methods, delegating to a PSR-6 pool. What that buys you is declarative memoization with key derivation handled for you. What it costs you is transparency: final services and self-invocation silently bypass the cache, cached return values must be serializable, and debugging gets one indirection deeper. Please size the spike against the three things that actually decide this: (1) does it behave correctly on your real service graph, including internal calls; (2) can you instrument it well enough to know it's working in production; (3) what is the exit cost if we drop it — should be mechanical (delete attributes, add explicit cache calls), and I want that confirmed before we commit. Assume we own maintenance: pin the version, vendor or fork, and add a compatibility check to the PHP upgrade checklist.

Framing to avoid: don't present this as "adopt a caching framework." It is a convenience layer of narrow scope. The strategic decision worth escalating is "do we standardize service-layer caching on PSR-6 pools, and do we express it declaratively or explicitly?" — this package is one possible answer to that question, and a reasonably cheap one to test.

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.
mehedimi/laravel-amp-mail
happones/laravel-vue-i18n-generator
jwerd/inertia-table
siberfx/flysystem-wasabi
hollyit/token-replace
ippanelcom/laravel-sdk
adachsoft/changelog-linter
adachsoft/collection
payerurl/telegrambot-crypto-payment-instant-payout
dskripchenko/laravel-hybrid-search
riorizkyrainey/lara-ced
mehedimi/static-vel
zharp/zharp
nonsapiens/bigquery-model-sync
lgu-bayambang-ict-office/lgu-laravel-development-standards
andydefer/laravel-support
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel