artisanpack-ui/icons
An extensibility layer for registering custom SVG icon sets in Laravel, built on blade-ui-kit/blade-icons and integrates with Livewire UI Components. Configure sets via config or events, with no hardcoded icons, minimal memory use, and Font Awesome Pro support.
Feature & design-system decisions
<x-icon-brand-logo /> without code branches. Directly enables multi-brand theming, per-client agency deliverables, and white-label SKUs.Build vs. buy
blade-ui-kit/blade-icons (a config array + a filter hook). A capable engineer could reproduce the core in under a day. So the buy case is not "we can't build this" — it's "we don't want to own an icon registry." Value is in convention, documentation, and the cross-package hook contract.artisanpack-ui ecosystem (hooks, visual editor, livewire-ui-components) and want the shared convention. Build/vendor-inline if you're outside it — you'd otherwise take a dependency on artisanpack-ui/hooks just to get a config loader.Roadmap implications
Use cases where it fits cleanly: Laravel 12/13 SaaS with a brand design system; agencies shipping per-client icon sets from one codebase; package vendors who need their icons available in host apps; teams standardizing on inline SVG over icon webfonts.
Adopt when most of these hold:
blade-ui-kit/blade-icons — this package is additive on top of it, not a replacement.ap.icons.registerIconSets filter is the actual product here.artisanpack-ui family (hooks, visual editor, livewire-ui-components) and the shared hook naming convention has value to you.<x-icon-fa-home class="..." />) with Tailwind-friendly class passthrough, and you want to stop shipping icon webfonts.Look elsewhere — or build it yourself — when any of these hold:
config/blade-icons.php entry is one line. This package adds a dependency to save you that line; not worth it.Icons class, removed helpers, facades, Blade directives, and asset routes; v2.1 swapped tormjens/eventy for artisanpack-ui/hooks with a syntax change; v2.2 renamed the hook and kept only a deprecation alias slated for removal in the next major. That's three breaking-ish moves across three minors/majors in a short window. If you can't absorb that cadence, pin hard or skip.Adoption guardrails if you proceed:
<x-icon-...> and addFilter() calls everywhere, so a swap or a hook rename is a one-file change.addSet() dropping the prefix, which made Factory::add() throw and broke every <x-...> render in the host app — is the exact failure mode to guard against. Silent breakage of every Blade component is a severity-1 incident for a one-line omission.For executives — one paragraph: ArtisanPack UI Icons is a small, MIT-licensed Laravel add-on that lets us register our own SVG icon sets and use them as Blade components, instead of hardcoding an icon library into the app. The business case is design-system portability and licensing hygiene: teams can swap icon libraries by config, ship per-brand icon sets for white-label customers, and legally self-host paid sets like Font Awesome Pro without bundling webfonts into our codebase. Cost is near zero and the integration surface is thin. The offsetting risk is vendor maturity — the package has no meaningful adoption, a single-ecosystem maintainer, and a track record of breaking API changes across recent releases, including one regression that broke all Blade component rendering for affected apps. Recommendation: run a short spike, pin the version, wrap it behind our own abstraction, and do not make it a load-bearing dependency unless we're already committed to the ArtisanPack UI package family.
For engineering — the ask:
blade-icons / owenvoke/blade-fontawesome usage.addFilter('ap.icons.registerIconSets', ...) calls scattered through packages. The hook was renamed once already with the old name on a removal clock.How can I help you explore Laravel packages today?