fazy/assetic-config-bundle
Symfony bundle that adds configuration support for Assetic, making it easier to define and manage asset pipelines, filters, and compiled assets. It simplifies wiring Assetic settings through bundle configuration.
Architecture fit — Poor / fundamental mismatch. Despite appearing in a package search, fazy/assetic-config-bundle is a Symfony 2 bundle, not a Laravel package. It registers an Assetic filter that rewrites placeholders inside compiled assets using Symfony DI container parameters during the asset dump step. Laravel has no Assetic layer at all: its asset pipeline has moved Elixir → Laravel Mix → Vite, all of which are Node-driven at build time. There is no DI container parameter bag exposed to assets, and Laravel's config() is a PHP runtime concern, not a build-time one. Adopting this package would require standing up a parallel Symfony-flavoured compile step alongside the Laravel build — a second asset pipeline with its own cache, manifest, and failure surface. That is architectural debt purchased for a feature we can implement natively in under a week.
Integration feasibility — Low. Composer-level installation is unlikely to succeed cleanly. The bundle targets Symfony 2.x (symfony/framework-bundle, symfony/assetic-bundle), which pins transitive versions of symfony/console, symfony/process, symfony/yaml, and symfony/event-dispatcher that conflict with the constraints of any supported Laravel release (Laravel 10/11 require Symfony 6/7 components). Assetic itself is abandoned and removed from the Symfony ecosystem years ago. A realistic attempt ends in one of three places: dependency conflict, a --ignore-platform-reqs install that breaks other components, or an isolated Composer project invoked as a shell-out build step.
Technical risk — High, concentrated in three areas.
%parameter_name% surviving into production assets — visible, ugly, and a soft information disclosure about internal naming conventions.Key questions for the requester
Recommendation: Do not adopt. Treat the repository as a pattern reference only — the pattern (build-time placeholder substitution driven by an environment-specific parameter map) is sound and easy to reimplement.
Stack fit — Does not fit; substitute the pattern. The requirement decomposes into two Laravel-native designs, and the choice depends on whether values must be resolved at build time or at request time.
VITE_* / MIX_* environment variables, and use a small Vite plugin (or PostCSS plugin) to replace __CONFIG__ tokens during npm run build. This preserves the original's semantics — one artifact per environment — while staying inside the pipeline the team already runs. Cost: one artifact per environment, so CI must build per target.<meta name="app-config" content='...'>, or a /config.js route that renders window.__APP_CONFIG__ from config(). This gives environment parity across a single immutable build, which is a better fit for containerized deploys and removes the "which artifact went to prod?" question entirely.Default recommendation is runtime substitution, with build-time substitution reserved for values that must be inlined for performance or CSP reasons.
Migration path. There is no migration — there is a replacement. Sequence:
config.js endpoint (or Vite plugin) with an explicit allowlist, not a denylist, of keys.Compatibility. If a genuine need exists to run the original for a legacy Symfony 2 service, isolate it completely: separate Composer project, separate CI job, output consumed as static files. Never let its dependency tree into the Laravel composer.json. Budget for a pinned PHP version in that job, since the surrounding code will not survive an upgrade.
Sequencing. The inventory in step 1 is a hard gate. If it reveals that the only values in scope are one or two public identifiers (API base URL, analytics key), the correct answer is a hardcoded map or an env var read directly in the front end, and the entire exercise collapses to a few hours. Confirm scope before scheduling engineering time — the most likely outcome of this evaluation is that the requirement is smaller than the package's presence implied.
Maintenance. Adopting the package transfers ownership with no upstream. Every future PHP or Laravel upgrade becomes a manual compatibility review of dead code. The substitute implementation is roughly 100–200 lines of our own, fully understood, with no third-party surface — strictly less maintenance than the "free" dependency.
Support. None available. Zero stars and zero dependents means no community knowledge base, no Stack Overflow corpus, no one who has hit our failure modes. Internal debugging is the only option, and the original author's intent must be inferred from source.
Scaling. Asset compilation is a static build-time concern, so runtime scaling is unaffected either way. The operational cost shows up in CI: a second pipeline means doubled build minutes, two cache invalidation models, and two manifests to reconcile against deploys. Runtime substitution avoids the split entirely and is the better answer for horizontally scaled, immutable deployments.
Failure modes to instrument for.
%key% or __CONFIG__ in served assets. Detect with a post-build or post-deploy grep gate; alert on any match.php artisan or npm run build, so it can be skipped unnoticed and ship stale assets. Any retained legacy step must be gated in CI, not run manually.Ramp-up. Near-zero transferable knowledge on the team for Symfony 2 bundle conventions and Assetic filter internals; expect several days of source reading before anyone can confidently modify behaviour. By contrast, a Vite plugin or Blade config partial is readable by any current team member on day one. The substitute wins decisively on onboarding cost.
Bottom line for planning: estimate 1–2 days to formally confirm non-viability if a spike is demanded, 3–5 days to implement and test the Laravel-native replacement, and 3–4 weeks plus permanent ownership burden for the legacy-integration path. Only the middle option is recommended.
How can I help you explore Laravel packages today?