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

Service Annotation Bundle Laravel Package

sergey-milegov/service-annotation-bundle

A Symfony bundle for annotation-driven service registration: mark classes as services and configure tags or arguments without YAML/XML, keeping dependency injection setup concise and close to your code.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

What this appears to be. The -bundle suffix and the author's other work point to a Symfony-style bundle: attribute/annotation scanning over a source tree, a compiler-pass or equivalent build step, and registration into a DI container. That is a materially different contract from a Laravel package, which is expected to ship a ServiceProvider, optionally a facade, publishable config, and Laravel-native discovery semantics.

Architecture fit. Poor as a drop-in. Laravel's container resolves concretes and bindings lazily and has no native attribute-driven registration pipeline; a Symfony bundle's extension/compiler-pass model has no first-class equivalent. To use this in a Laravel codebase a TPM would be sponsoring an adapter layer — a custom ServiceProvider that invokes the scanner and replays its output into $this->app->bind()/singleton() calls — plus a cache-invalidation story for the scan artifact. That adapter is the actual integration, and it would be owned by us, not the maintainer.

Integration feasibility. Technically feasible in a day or two of spike work for a narrow use case (attribute-based auto-binding of a bounded service directory). Commercially, the case is weak: the capability is small, the package is not the only way to get it (explicit bindings, a short internal scanner, or a more established container-attribute package), and the adoption signals are effectively zero.

Technical risk — high, concentrated in provenance. Two stars and zero dependents means no external production usage to learn from, no issue backlog to read as a risk register, and no community pressure on correctness. A single-maintainer bus-factor of one, MIT-licensed, with a "last release" timestamp that reads as anomalous relative to the repository's visibility, warrants verification before anything else — a future-dated or synthetic release metadata field is a supply-chain and process-maturity question, not a footnote. Beyond that: reflection/attribute scanning is performance-sensitive at bootstrap in PHP, so caching behavior and cache-key correctness (file mtimes, opcache interaction, deploy-time warmup) are the two places this class of package most often breaks in production. Expect no test matrix, no CI badge, no static analysis baseline, and no documented PHP/Laravel version support envelope.

Key questions to put to the maintainer or resolve in the spike.

  1. Which framework is the primary target — Symfony, Laravel, or framework-agnostic? Is there a ServiceProvider, or must we write one?
  2. What is the scan's runtime cost on a realistic app/ tree, and is the result cacheable across deploys and warmable in CI?
  3. Does it honor Laravel's contextual binding, interfaces-to-implementations, and deferred providers, or does it flatten everything to singletons?
  4. What is the actual release process behind the 2026-07-21 date, and is there a tag/signed-commit trail?
  5. Test coverage, supported PHP range, and whether the reflection path respects declare(strict_types=1) and enum/readonly modifiers.
  6. Who is the maintainer's successor if they stop? (Effectively: are we prepared to fork on day one?)

Recommendation. Do not adopt as a runtime dependency. Treat it as a reference implementation only. If the underlying capability is genuinely needed, budget for an internal ~200-line scanner under our own tests rather than inheriting an unowned single-maintainer dependency, or revisit only if the package acquires a Laravel-native provider, CI, and >50 dependents.

Integration Approach

Stack fit. Assume a conventional Laravel 10/11/12 monolith or modular monolith on PHP 8.1+. The package's natural output — a map of class names to constructor dependencies — is expressible as Laravel bindings, so there is a semantic bridge. The friction is entirely in lifecycle: when the scan runs, where the result is stored, and how it is invalidated. In a Laravel app the correct home for a warmed scan artifact is bootstrap/cache/, produced by a deploy-time artisan command and validated by a hash of the scanned paths, with a conservative fallback to runtime scanning when the cache is cold.

Migration path. Greenfield-only, and even then gated. Sequence: (1) isolated spike branch, no shared code touched; (2) adapter ServiceProvider wrapping the scanner behind a first-party interface (ServiceRegistrar), so the package is swappable; (3) apply to one leaf module with no framework coupling; (4) measure bootstrap delta and container-resolution correctness under the full test suite; (5) decide. There is no brownfield migration path here — do not attempt to retrofit it over an existing AppServiceProvider graph, because the failure mode (silent shadowing of explicit bindings) is hard to detect and expensive to unwind.

Compatibility. Unverified against any Laravel major. The bundle-naming convention implies Symfony contracts (Symfony\Component\DependencyInjection\*) that Laravel does not ship; if those are hard requirements, transitive dependency weight and version-conflict surface against illuminate/* become a real constraint rather than a hypothetical. Pin an exact version, commit the lockfile, and vendor-audit before the spike merges anywhere.

Sequencing. Cache/warmup design must precede any adoption, not follow it — a scanner without a deploy-time artifact step is a per-request performance regression. Second, land the abstraction boundary before the dependency, so removal is a one-file change. Third, define the rollback: feature-flagged provider registration, off by default, with explicit bindings as the documented fallback for every class the scanner touches.

Operational Impact

Maintenance. Effectively unmaintained by any external signal — 2 stars, 0 dependents, no user base generating issues. Assume we own the code from the moment it enters the lockfile. Budget ongoing cost as "internal fork with upstream rebases we will probably stop doing after two quarters," not "dependency we track."

Support. No vendor, no SLA, no community forum. Escalation path is the maintainer's GitHub presence, which is a single point of failure. For a production system this means the on-call runbook must document the fallback (revert the provider, restore explicit bindings) rather than an upstream fix.

Scaling. Two distinct concerns. Application scale: bootstrap-time scanning is O(files × attributes) per cold start; under PHP-FPM with opcache this is amortized, but under per-request containers or high-churn horizontal autoscaling it becomes a cold-start tax on every instance. Team scale: an attribute-driven registration model hides the container graph from readers and from IDE "find usages," which raises the cost of debugging for engineers who did not write the scanner. That is a real, non-obvious tax on a growing team.

Failure modes to plan for. (a) Silent binding shadowing — an attributed class overriding an explicit binding; mitigate with a startup assertion that logs every auto-registration. (b) Stale cache after deploy — mitigated by content-hash keying plus a CI step that fails on cache drift. (c) Reflection errors on new PHP syntax (enums, readonly, intersection types) surfacing as fatal boot errors rather than degraded behavior — mitigate by keeping the scan behind a try/catch that falls back to explicit bindings. (d) Abandonment — mitigated by the fork-and-own assumption above. (e) Transitive Symfony contract conflicts with illuminate/* — mitigated by dependency pinning and a CI resolution check.

Ramp-up. Low for a spike (hours), moderate-to-high for safe production use (days), because the learning investment is not in the package's API — it is in the cache lifecycle, the binding-shadowing semantics, and the adapter we write ourselves. For a two-star dependency that duplicates a capability achievable in a few hundred lines of tested in-house code, that ramp-up is not repaid. The opportunity cost dominates the adoption math; the low composite score is consistent with that read.

Bottom line for a TPM. Not an adoption candidate. Log it as an evaluated-and-declined item with the reasons above, keep the spike branch as a reference, and if the attribute-registration capability becomes a real requirement, scope it as a small internal build with a named owner and a test budget.

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.
abbasudo/artisan-route
mirvan/ippanel
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource
noith/settings
kda/laravel-package