codeat3/blade-elusive-icons
Laravel Blade components for Elusive Icons that let you drop scalable SVG icons into your views with simple, familiar Blade syntax. No manual SVG copying or asset wrangling—just clean, reusable icon tags styled with CSS.
Architecture fit. From a delivery standpoint this is a presentation-layer convenience, not a platform component. It registers the Elusive Icons set with blade-ui-kit/blade-icons through an auto-discovered service provider and exposes each glyph as an <x-elusive-*> Blade component. There is no database, queue, HTTP surface, asset pipeline, or build step, which means it carries almost no architectural weight: it does not constrain the domain model, deploy topology, or front-end toolchain. The planning-relevant framing is that this is a cosmetic primitive with a small blast radius — adoptable, scopable, and removable without a migration project. That matters when sequencing it against real platform work.
Integration feasibility. High and cheap. composer require codeat3/blade-elusive-icons plus template usage; no design-system workstream required, config publishing optional. Release 1.6.0 contains exactly one change — widening the illuminate/support constraint to permit Laravel 13 — with no new features, no API changes, and no deprecations. That makes it an unusually clean dependency decision: the cost of trying it is hours, and the cost of backing out is equally low. For a TPM, the value is that this can be decided at the team level rather than escalated to an architecture review.
Technical risk. Low as a UI dependency, but with four items a TPM should put on the risk register rather than leave implicit to engineering:
codeat3/blade-*icons packages. Acceptable for a decorative dependency; not acceptable if icons ever become an accessibility, brand, or contractual requirement.codeat3/blade-*icons sets can produce duplicate prefixes that shadow each other silently — a defect that presents as wrong icons rather than an error, and therefore survives code review.Key questions (the ones that change a go/no-go or a roadmap date):
illuminate/support below ^13.0? That second case is far more common.title/aria-hidden semantics and QA sits with our templates, not the vendor.Stack fit. Native for any Laravel 9+ application rendered with Blade. It is the path of least resistance for admin dashboards, internal tools, CRUD screens, settings pages, navigation, and status indicators — the Blade-heavy surfaces where icons improve scanability and perceived polish. It is not a fit if the product needs a different visual language, JS-driven tree-shaking, non-Laravel rendering, or a design system with an actively expanding glyph set. Those are product calls, and making them first is what stops engineering from burning a sprint on the wrong library.
Migration path. From 1.5.0 to 1.6.0 there is no application code change — a Composer constraint bump only. For a team already blocked on Laravel 13, this release is the value: it removes a hard blocker at zero engineering cost, and it should be reported to stakeholders in exactly those terms. For teams on Laravel 11/12 it should not be framed as an upgrade at all; it rides along with the next routine dependency refresh. If Elusive Icons are already in use, no action beyond the version bump. If they are not, adoption is a small, reversible scope decision — ideally trialled in a single surface (an internal admin area) rather than declared a design-system standard on day one.
Compatibility. Validate two axes simultaneously: our PHP floor and our Laravel target. Because the constraint is permissive rather than tested-and-pinned, pin the package explicitly and let the lock file record the exact resolution. Check whether orchestra/testbench-based dev dependencies need a matching bump, and whether any sibling icon package imposes a conflicting constraint. Note that 1.6.0 ships ahead of general Laravel 13 adoption — the release is a signal of maintainer responsiveness, not proof of ecosystem maturity, and should be characterized that way in any status update.
Sequencing:
currentColor inheritance, sizing convention — in a contained area such as an internal admin page, behind the existing release process.<x-icon name="..." />) so call sites decouple from vendor component names. This is the cheapest hedge against a future library swap and should be a team standard, not a per-developer choice.php artisan icons:cache after composer install --no-dev, alongside view:cache) with the corresponding icons:clear for local development and version bumps.Maintenance. Near-zero steady-state burden and fully reversible. No migration, no schema, no runtime service. Upgrades are Composer-level and have historically been constraint bumps rather than behavioral changes — 1.6.0 is the clearest example. The real maintenance obligation is governance, not engineering: keeping the pinned version explicit, keeping the <x-icon> wrapper as the sole call-site convention, and keeping the icon cache step in the deploy script. All three are process items a TPM can own via definition-of-done rather than tickets.
Support. Community-supported by a single maintainer with no SLA and no observable production adoption (0 stars, 0 dependents). That is acceptable precisely because the failure mode is cosmetic — a missing icon degrades polish, not function. Escalation path in practice is the wrapper component: swap the underlying library without touching call sites. This should be documented explicitly so an on-call engineer is not the first person to discover it. Avoid any support expectation that treats icon availability as a guaranteed contract.
Scaling. Two dimensions, only one of which matters here.
Failure modes (worth naming in the risk register with likely detection signal):
icons:clear. Mitigation: clear locally, cache in deploy.title. Mitigation: written policy plus QA checklist, owned by product/design rather than left to individual developers.Ramp-up. Effectively zero for any developer already fluent in Blade. The syntax is a single component tag, attributes pass through natively, and colour follows currentColor so existing Tailwind text-* utilities apply without new conventions. Realistic onboarding is under an hour, best delivered as one documented pattern in the internal style guide ("use <x-icon name="..." />, pass title only when the icon carries meaning") rather than training. The ramp-up risk is not the package — it is the absence of that one paragraph, which is what allows the drift described above.
How can I help you explore Laravel packages today?