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

Assetic Cache Busting Worker Bundle Laravel Package

jeroenvdheuve/assetic-cache-busting-worker-bundle

Symfony bundle that adds an Assetic worker appending cache-busting query strings to asset URLs, so updated CSS, JS, and images are served fresh without stale browser caches. Integrates with Assetic's worker pipeline for automatic asset versioning.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — poor, and mismatched at the ecosystem level. Unchanged by v1.0.3. Despite the framing as a "Laravel/PHP package," this is a Symfony bundle. It contributes a DependencyInjection extension and a compiler pass that registers Assetic\Factory\Worker\CacheBustingWorker into AsseticBundle's assetic.factory worker chain, so that dumped asset filenames get a content hash appended (file-<hash>.css). Laravel has no bundle registration mechanism, no Assetic factory, and no asset-dump step that this could hook into — Laravel's container service providers are a different contract entirely. Laravel does consume Symfony components, but only at pinned versions beneath the framework; a third-party bundle cannot attach to that layer.

The v1.0.3 release adds an Assetic cached-worker suggestion — guidance for reusing a compiled asset when the same source is pulled in by multiple Twig templates. It is a documentation/configuration-level addition, not a new integration surface: it does not introduce a Laravel service provider, a facade, a manifest reader, or any Composer constraint relief. The only consumer it can possibly help is an Assetic-based Symfony application, which is precisely the target we have already ruled out for a Laravel stack.

Integration feasibility — effectively zero for Laravel. Unchanged. Adoption would require symfony/framework-bundle, symfony/assetic-bundle, and assetic/factory to be resolvable alongside Laravel's own pinned symfony/* constraints. A 2016-era bundle will declare constraints against Symfony 2.8/3.x and PHP 5.5–7.0, which collide with any modern Laravel install (Symfony 6/7, PHP 8.2+). Even in the unlikely event Composer resolves it, there is no runtime seam to register the worker — the feature would be inert.

Technical risk — still high, with one factual correction to make. The v1.0.3 release contradicts the earlier premise that the package has seen no upstream activity since 2016-03-09. That is worth verifying before repeating "archived and dormant" in any decision record: confirm current archive status and release date on the repository, because a fresh tag either means the project was unarchived (which changes the maintenance narrative but not the fit) or that the tag was published against a still-archived repo (which means no support commitment exists behind it). Either way, one doc-level release after roughly a decade is not a maintenance posture. The transitive risk remains the larger exposure: Assetic is a legacy asset pipeline that Symfony itself moved away from (Webpack Encore, then AssetMapper/Vite), so the underlying dependency is equally unmaintained. Supply-chain exposure is small (a service definition, a compiler pass, and now a config suggestion; MIT), but the "abandoned dependency blocks a PHP upgrade" scenario is still the realistic cost.

Key questions before proceeding:

  1. What is the actual problem being solved — content-hash cache busting for a Laravel app, or for an existing Symfony/Assetic app where this bundle is already in the lockfile?
  2. If Laravel: is Vite (Laravel 9+ default) or Mix already the build pipeline? Both ship this capability natively.
  3. If a legacy Symfony app: which Symfony and PHP versions are pinned, and is AsseticBundle still present? (composer why assetic/factory)
  4. Is the requirement a hashed filename specifically, or is a ?v=<hash> query string acceptable? The two behave differently at the CDN layer.
  5. New: has the repository been unarchived, and does v1.0.3 ship executable code or only documentation/config guidance? A docs-only tag does not restore a security response process, and we should not upgrade our maintenance rating on the strength of it.

Verdict: unchanged — reject for any Laravel target. v1.0.3 is a performance-tuning suggestion for a pipeline we should not be running. The correct response to the underlying requirement is a native mechanism, not this package.

Integration Approach

Stack fit. For Laravel, cache busting is a solved, first-party problem:

  • Vite (Laravel 9+): Vite emits content-hashed filenames by default and writes public/build/manifest.json. The @vite Blade directive and Vite::asset() resolve through the manifest. No additional package needed.
  • Laravel Mix (legacy apps): mix.version() produces mix-manifest.json; the mix() helper resolves hashed paths.
  • Non-bundled assets (uploads, generated PDFs, tenant-specific images) that Assetic's worker would have handled: a small helper wrapping md5_file() against a cached manifest, or filemtime() as a cheap ?v= token.

v1.0.3 does not create a new option here. Its cached-worker suggestion addresses duplicate compilation of the same source within an Assetic dump — a build-time inefficiency that Vite and Mix already avoid by design (single entry graph, one build per entry, manifest emitted once).

Migration path. There is nothing to migrate to this package. The migration is away from Assetic-style workers toward manifest-driven asset resolution:

  1. Inventory current cache-busting behaviour (hash-in-filename vs query string, which asset classes are covered).
  2. Confirm whether any CDN or edge layer strips query strings — if so, hash-in-filename is mandatory and Vite/Mix already satisfy it.
  3. Profile your asset dump before considering the v1.0.3 cached-worker suggestion. If a single JavaScript file is genuinely being compiled several times across Twig templates, the correct fix in a modern stack is to stop including it from multiple templates and let the bundler deduplicate — the caching workaround treats a symptom that the native pipeline does not have.
  4. Replace any custom Assetic worker with the framework-native equivalent; delete the dependency rather than porting it.

Compatibility. If a legacy Symfony application genuinely still runs on Assetic, this bundle is only viable inside the narrow band of Symfony 2.8/3.x-era constraints. Validate with composer why-not jeroenvdheuve/assetic-cache-busting-worker-bundle and a --dry-run update before touching the lockfile. Given the bundle is tiny and carries no support commitment, vendor/fork the two or three files rather than depend on the Packagist entry — it removes the abandoned-package flag from audit tooling and lets you patch PHP-version compatibility yourself. If you do fork, fork at v1.0.3 so the cached-worker guidance is captured; note that the suggestion is configuration, so it costs you nothing to adopt or ignore later.

Sequencing. (1) Decide pipeline target — Vite or Mix — before any asset work. (2) Prototype native hashing on one asset class and verify the manifest is committed to the deploy artifact. (3) Parity-test against the old behaviour across browser cache, CDN, and opcache layers. (4) Only if step 1 lands on "legacy Symfony + Assetic," fork and vendor this bundle as a tactical stopgap, with an explicit ticket to remove Assetic entirely — and only then evaluate whether duplicate compilation is actually costing you build minutes.

Operational Impact

Maintenance. Revised, narrowly: the package is no longer accurately described as having zero upstream activity, but a single documentation-level tag does not constitute maintenance. You still inherit any fork outright, and there is no evidence of issue triage, dependency bumps, or PHP 8.x compatibility work. The mitigating factor remains size: a DI extension, a compiler pass, and a service definition. A competent Symfony developer can reproduce the behaviour in a day, which caps the fork cost but also raises the question of why you would fork at all.

Support. No community, no triage process, no security advisories, no maintainer response path that we can evidence. A release published without a support commitment is not the same as a supported release. Dependency-upgrade failures will surface in Composer as hard blocks rather than graceful deprecations, meaning a routine PHP or Symfony bump becomes an unplanned project. This remains the dominant operational cost.

Scaling. No runtime scaling concern — the worker executes at asset-dump time, not per request. v1.0.3 is explicitly a build-throughput change: it targets the case where one asset is compiled repeatedly because it appears in multiple Twig templates. Treat that as a CI-minutes optimisation with a narrow blast radius, not an architectural improvement, and measure before adopting — the same duplicated-include pattern that motivates it is usually a template-hygiene problem. The scaling-relevant architectural detail is unchanged: hash-in-filename (what this worker does) is CDN-friendly because it permits immutable, long-max-age edge caching, whereas query-string busting forces cache revalidation. That is the one genuinely correct instinct in the package, and it is already the default in Vite and available via mix.version().

Failure modes. Watch for:

  • Stale assets after deploy — manifest not regenerated or not shipped in the artifact; users pinned to old HTML receive 404s once old hashed files are pruned.
  • Manifest drift — build and runtime disagreeing on hashed names, typically from CI caching public/build.
  • Composer deadlock — the abandoned package's constraints blocking a security patch elsewhere; the failure is loud but arrives at the worst moment.
  • PHP version incompatibility — 2016-era syntax and type handling against PHP 8.x.
  • Silent inertness — in a Laravel context the bundle installs but never executes, producing "cache busting is broken" incidents that look like configuration bugs.
  • New — stale hash from the cached worker — if you adopt the v1.0.3 suggestion, verify what the cache key is. A cache keyed on the asset's logical path rather than its content or its resolved configuration can hand back a hash from a previous build, which is a cache-busting mechanism that fails to bust cache. This is a subtle, user-visible failure and it is introduced by the only change in this release.

Ramp-up. Near-zero for the native path — any Laravel developer already knows mix()/@vite. For Assetic, effectively negative: new hires will not know it, the documentation is a decade old plus one release note, and knowledge concentrates in whichever engineer originally set it up. That is a single-point-of-failure on the build pipeline.

Bottom line for a TPM: v1.0.3 changes nothing about the fit — it is a build-time suggestion for a Symfony/Assetic pipeline, published against a package with one star-tier following and no support commitment. Confirm the current archive status so the decision record is accurate, but do not introduce this package. Fund a half-day spike on the native Vite/Mix manifest path instead; if a legacy Symfony app is the real context, treat a vendored fork at v1.0.3 as a dated tactical patch with a scheduled exit from Assetic.

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