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

Assets Version Bundle Laravel Package

grizzlylab/assets-version-bundle

GrizzlyLab AssetsVersionBundle adds automatic versioning to your Symfony asset URLs, appending a configurable version or hash query string so browsers fetch updated files after each deploy. It helps prevent stale CSS, JavaScript, and image caching with minimal configuration.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit: There is no architecture fit for a Laravel target. grizzlylab/assets-version-bundle is a Symfony 2/3 bundle, despite being filed here as a Laravel/PHP package. It wires itself in through a Symfony Bundle class, a DI extension, YAML/XML service definitions, and a console command — none of which Laravel's service container or package discovery will ever invoke. composer require will install something, but nothing boots. The functional intent (bump a version token on deploy so asset URLs change and caches bust) is already solved natively in Laravel via Vite's content-hashed manifest consumed through @vite, and previously via Mix's mix.version(). From a TPM's perspective the correct framing is not "does this package fit our stack" but "is the underlying pattern worth replicating in-house," and the answer to that is a qualified maybe, but we already have better.

Integration feasibility: Low and economically irrational. Making the bundle useful in Laravel would require pulling Symfony console/DI/config components into the app, registering the bundle outside a kernel, and writing custom bootstrapping to trigger its command — more code, more surface area, and more ongoing upkeep than simply reimplementing the behavior. The core logic is a command that writes a version string into a config file, comfortably under ~100 LOC. A native port is a half-day task; a Symfony-component shim is a multi-day task with a permanent maintenance tail. As a TPM, the integration cost estimate alone should close this as an adoption candidate.

Technical risk: High and concentrated. Lifecycle: Symfony 2.x and 3.x are end-of-life (3.4 since Nov 2021), so the package targets a dead runtime; composer.json constraints will likely pin PHP to 5.x/7.0–7.x and conflict with the PHP 8.2+ baseline of Laravel 10/11. Adoption signal: 0 stars, 0 dependents, opportunity score 21.66, overall score 0.06 — there is no production usage to validate behavior, no issue history to mine for failure modes, no forks, no community. Supply chain: single maintainer, MIT (fine), no evidence of a security response process, and a build-path tool is exactly where you least want an unvetted dependency. License: not a concern; risk lives entirely in the other three areas.

Key questions:

  1. Do we have any surviving Symfony 2/3 applications in the portfolio, or is this purely a mis-tagged Laravel candidate?
  2. Is there a concrete gap in our current asset pipeline — legacy Blade apps not yet on Vite, or a CDN contract that requires a single global version token rather than per-file hashes — that this pattern would fill?
  3. If a global version token is genuinely required, can we satisfy it with a deploy-time APP_ASSET_VERSION env var or CI-generated build number instead of a package?
  4. Who owns the risk if we take a dependency with zero downstream users, and what would it take to rip it out later if it's abandoned?
  5. Are there any inherited or acquired Symfony estates we need to document a support stance toward, independent of this Laravel evaluation?

Integration Approach

Stack fit: Mismatched by design. Laravel's asset story is Vite (manifest-based content hashing, immutable filenames) — version busting is a build artifact, not a runtime config mutation. This package's model is the opposite: mutate a version parameter and let templates append ?v=…. That model is strictly inferior for cache efficiency (one token invalidates every asset on every deploy) and it introduces mutable state into the repo or config cache. There is no scenario in a modern Laravel app where the package's mechanism beats @vite. The TPM-facing takeaway: recommend "no adoption," and record the package in the evaluation log as a reference implementation, not a dependency candidate.

Migration path: Do not migrate toward the package. If the underlying need is real, migrate away from global version tokens toward content-hashed assets. Concretely: (1) confirm Vite/Mix is in use and @vite/mix() is wired into all layouts; (2) replace any legacy Blade views still hardcoding ?v= with asset() + manifest lookups; (3) where a global token remains mandated by a third-party CDN contract, cache-warming scripts, or a mobile webview pinning requirement, emit it from CI as an env var and read it via config('app.asset_version') — no package required. If any Symfony 2/3 estate does exist, that is a framework upgrade program, not a bundle decision, and the bundle should not be adopted as a stopgap.

Compatibility: Unusable as-is on PHP 8.x due to Symfony 2/3 constraints. Forcing installation with --ignore-platform-reqs would leave dead code in vendor/ and a false sense of capability — a classic trap that costs a debugging session per deploy. Any PHP port must be rewritten against Laravel 10/11 contracts (console command, config(), Storage/Filesystem) and shipped as an internal, tested, ~100-line utility.

Sequencing:

  1. Inventory whether any Symfony 2/3 services remain in the portfolio; if so, scope that as a separate framework-upgrade initiative.
  2. Audit the current asset pipeline for global-token dependencies (CDN contracts, cache-warming scripts, legacy layouts).
  3. If a gap exists, implement the env-var-based token in the next deploy cycle as a first-party helper — roughly one day including tests.
  4. Close the evaluation ticket and record the package as a reference pattern.

Total elapsed: days, not sprints. This is a triage exercise, not a migration.

Operational Impact

Maintenance: Adopting it means maintaining a package no one else maintains. With zero dependents there is no upstream community to absorb PHP or Symfony drift, no patch cadence, and no deprecation path. Combined with an EOL target framework, the maintenance-cost curve only goes up. The counterfactual — an internal ~100-line command or an env var — has a flat, near-zero cost and is fully within our control. For a TPM, that asymmetry is the headline: the package trades a tiny upfront saving for an unbounded future liability.

Support: No vendor, no SLA, no security advisory channel, no issue history worth mining. If the command misbehaves during a release, the only escalation path is reading the source ourselves. For a tool on the build-and-deploy path, that is an unacceptable support posture relative to a trivial alternative we can own end-to-end.

Scaling: The package's mechanism is the scaling problem. A single global version token means every release invalidates 100% of cached assets across all users and PoPs simultaneously — a thundering-herd cache miss on the CDN and origin at each deploy, with impact proportional to traffic volume. Content-hashed filenames (Vite) invalidate only the files that actually changed, which is both safer under load and friendlier to long-term caching headers (Cache-Control: immutable). At any meaningful scale, the package's approach actively degrades performance versus the Laravel default. Roadmap-relevant: the same global token is occasionally useful as a release identifier for CDN purge coordination or canary/staged rollouts — copy that concept into our own stack if a need emerges.

Failure modes:

  • Config mutation drift: the command writes a version into a config file; concurrent or parallel deploys can race, and dirty working trees break CI reproducibility.
  • Config cache staleness: in a Symfony context a written parameter requires cache warmup to take effect; a missed warmup silently serves stale assets.
  • Half-applied deploys: token bumped but assets not yet uploaded (or vice versa) yields 404s or stale JS/CSS in production — user-visible, hard to trace, typically surfaces as phantom client bugs.
  • PHP/Composer conflicts: platform-req failures blocking composer install in CI; or, if bypassed, silent runtime errors when the bundle's classes are autoloaded under PHP 8.
  • Abandonment: repo archived or deleted, leaving an unpinned reference and a broken build on the next clean install.

Ramp-up: Near-zero learning cost (tiny codebase, obvious intent), which is precisely the trap. The effort saved upfront is dwarfed by the archaeology required later when a deploy fails and the only documentation is the source of an unmaintained fork. The team's hour is better spent reading Vite's manifest documentation.

Recommendation for decision-makers: Do not adopt; treat as a documented reference pattern and close the evaluation. If a global release-token need is subsequently proven, sponsor a one-day spike on a first-party helper (config value + deploy step + Blade directive) — not an integration ticket for this bundle. No cost, no risk, no further time spent.

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.
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator
equipc/laravel-email-database-log
adedsec/nova-translated-labels
wazza/laravel-db-encryption
hokny/laravel-generator
vonsogt/backup
jengo/queues
jeremykenedy/laravel-observability
coleus/frame
thtg88/journalism
filagora/filagora-ai-forums