codeat3/blade-ikonate
Use Ikonate's customizable SVG icons directly in Laravel Blade views. This package provides simple Blade components for embedding icons with minimal markup, keeping templates clean and icon usage consistent across your app.
resources/svg yourself. Both cost roughly an afternoon. The wrapper saves that afternoon; it does not entitle you to a design-system conversation.svg/ directory into your own registered set with zero template edits if you wrap it properly). That combination is what makes this a team-level decision that doesn't need architecture review.currentColor.<svg> elements, someone has to decide decorative (aria-hidden) vs. meaningful (role="img" + aria-label) — and the right place for that decision is a wrapper component you own, not 400 call sites.Adopt when:
blade-ui-kit/blade-icons being in the dependency tree. The wrapper is thin; the base package carries nearly all the coupling.<x-ui.icon> component so no template names the vendor package, and (2) add a CI test that renders every icon name referenced in views, catching typos and upstream renames before production.~1.7.0), run php artisan icons:cache in the correct deploy order, and write down the vendoring contingency.Look elsewhere — or vendor the SVGs directly — when:
blade-icons with no third-party in the path.wire:model.live on an icon-heavy table re-renders the whole set per keystroke. The mitigations (icons:cache, a <symbol>/<use> sprite partial) are things you build, not features the package ships. Budget them.SvgNotFound at render time. Keep this off any flow where a missing glyph stops someone from paying you.Sequencing note for the PM: land the wrapper component and the CI icon test before the second feature adopts the package. Retrofitting either is a template sweep; the wrapper especially is what converts a dependency risk into a one-file change.
For executives — one paragraph: We can add a consistent, customizable icon set to our Blade-rendered screens in a single afternoon, at zero license cost, with no new build tooling, no JavaScript payload, and no runtime dependency at render time. The decision is small and reversible: if the underlying package ever goes stale, we keep the icons (MIT-licensed SVGs) and drop the wrapper without touching a single template — provided we take the one precaution of routing all icons through our own component. It accelerates the unglamorous surfaces — admin, settings, internal tools — where polish is expected but differentiation isn't.
For engineering — the honest version: This is a thin, single-maintainer wrapper over blade-ui-kit/blade-icons that vendors the Ikonate SVG set and exposes it as <x-ikonate-*> components. Treat the svg/ directory in vendor/ as the contract, not the README — icon names come from upstream and can change between versions. Three non-negotiables: (1) every call site goes through an in-house <x-ui.icon> wrapper, so a fork is a config change rather than a find-and-replace; (2) a CI test renders every referenced icon name, because SvgNotFound throws at render time and a typo on a rarely-hit error page ships to production otherwise; (3) pin to ~1.7.0 and place php artisan icons:cache immediately after composer install --no-dev in the deploy script — before config publish, next to view:cache. Known sharp edges: Tailwind Preflight's svg { display: block } breaks inline alignment until you add inline-block align-text-bottom or use flex parents; verify whether stroke-width is set on the root or per-path before design promises variable weight; there are no solid/duotone variants and faking one with fill looks bad; and inline SVG inflates HTML on dense tables — measure before rewriting. Do not use these in email or PDF output.
The ask: Approve adoption for internal and chrome-level surfaces only, conditional on the wrapper component and CI icon test landing in the same PR. Named owner for the vendoring contingency, documented in the repo, before the second feature depends on it.
How can I help you explore Laravel packages today?