codeat3/blade-zondicons
Blade Zondicons brings the Zondicons icon set to Laravel Blade as simple, self-contained components. Drop icons into any view with a single tag, style them with classes, and skip copying SVG markup by hand.
Feature delivery speed on Laravel Blade surfaces. This package turns the Zondicons SVG set into ready-to-use Blade components (<x-zondicon-home class="w-5 h-5" />), so dashboards, admin panels, settings screens, CRUD views, empty states, and internal tools ship without hand-managed SVG files or a bespoke icon pipeline. It is a sprint-capacity lever, not a differentiator — measure it in days of design/engineering effort saved per surface, not in user-facing novelty.
Build vs. buy vs. borrow. The realistic alternatives are (a) hand-maintaining SVG assets in the repo, (b) adopting blade-ui-kit/blade-icons with a broader multi-set strategy, or (c) pulling in a JavaScript icon library. This package is the borrow option: near-zero build cost, near-zero switching cost, because it is presentation-only and namespaced. That low coupling is the point — it is a low-regret, trivially reversible decision that does not need a design-system committee to approve.
Roadmap and platform-upgrade planning. Release 1.7.0 is a compatibility-only release (Laravel 13 support, PR #239): no new icons, no config keys, no API changes, no deprecations. The product decision it unblocks is keeping the Laravel 13 upgrade path open — without the widened constraint, Composer refuses to install alongside illuminate/* ^13.0, turning a routine framework bump into a forced icon-layer migration. Slot it into the upgrade plan as a dependency bump, not a workstream.
Icon strategy — declare up front that Zondicons is a frozen set. The set is effectively static upstream and the package will not gain artwork. That is a strength for a stable, opinionated visual language and a liability if design or product expects to request new glyphs. Make the call now: "our icon vocabulary is fixed unless we add a second set." Surfacing that constraint before adoption is far cheaper than discovering it mid-quarter. (Note also a documentation discrepancy worth resolving before anyone writes a number into a spec: the description advertises "220+ icons" while reference material cites ~290 glyphs — confirm from the tagged package.)
Multi-set consolidation as a single decision. Apps commonly land on two or three codeat3 icon packages (Heroicons, Eva Icons, Zondicons). They share the blade-icons runtime, so one naming convention, one <x-icon> wrapper, and one deploy-time cache command cover all of them. Decide "which icon sets do we standardize on" once, not per package.
Deployment and performance hygiene. php artisan icons:cache pre-registers icons into a manifest and is the single biggest win on icon-dense pages (tables, nav lists, paginated cards). A small, one-time platform ask that pays off on every icon-bearing surface.
Dependency risk management. 48 stars, 0 dependents, community-maintained. The correct posture is tactical: pin the version, scope a Dependabot/Renovate rule to it so Laravel-major compatibility releases surface automatically, and verify licence and constraint metadata from the tagged composer.json rather than from changelog prose.
Explicitly out of scope: custom brand icons, icon uploads, sprite governance, SVG optimization pipelines, multi-family search over one registry, enterprise support or SLAs. If any of those land on the roadmap, this package is background context, not the answer.
Adopt when:
aria-* passthrough), good for Tailwind sizing (class="w-5 h-5").blade-ui-kit/blade-icons — this package is additive to that runtime, not a competing mechanism.Look elsewhere when:
blade-icons with several sets — or an in-house registry — fits better than a single frozen set.<use> references may eventually be warranted. Not a blocker at typical scale, but out of scope here.Verification gates before committing (hours, not weeks):
illuminate/support constraints from the tagged composer.json in CI, not from the one-line changelog; check the runtime PHP meets the Laravel 13 floor.<x-zondicon-*> components, and confirm the config supports prefixing if collisions exist.class, width/height, aria-*) and a11y behaviour.For executives — one paragraph, low-stakes framing: This is a small, MIT-licensed Laravel package that gives our product a consistent, professional icon set with minimal engineering effort — no custom SVG work, no JavaScript dependency, no design-system build-out. The 1.7.0 release is a compatibility-only update adding Laravel 13 support: a low-risk maintenance event that keeps our framework upgrade path open. It is a tactical UI dependency, not a strategic platform bet, and should be treated like any community package — pinned, monitored, and replaceable in under a day. There is no licensing cost and no operational surface: no config to sync, no scheduled tasks, no external service. I am not asking for a budget line or a roadmap slot, only permission to spend roughly a day of engineering adopting it on internal surfaces, plus a small recurring dependency-hygiene cost.
For engineering — practical and specific:
blade-zondicons exposes the Zondicons set as <x-zondicon-*> Blade components via blade-ui-kit/blade-icons. Composer install plus auto-discovery yields working components with no config publishing and no service-provider registration. 1.7.0 widens constraints for Laravel 13 (PR #239) with no breaking changes, no deprecations, no migration steps; the 1.6.0 → 1.7.0 delta is additive, so there is no pressure to move frameworks to consume it. Recommended adoption shape: (1) verify constraints from the tagged composer.json in CI; (2) land the bump alone and boot-smoke-test view compilation; (3) wrap usage in a single <x-icon> component so sizing and colour changes are not a repo-wide find-and-replace, and use @svg()/svg() for DB-driven names — with validation on any user-influenced name; (4) add php artisan icons:clear && php artisan icons:cache to the deploy script; (5) roll out to one internal surface before customer-facing views, with a visual diff in the PR; (6) scope a Dependabot/Renovate rule to this package. Failure modes worth noting in the PR: component name collision (surfaces at view compile), constraint mismatch after a framework upgrade (provider fails to register — caught by the boot smoke test), and silent icon removal on a future release, which renders empty rather than erroring — mitigate with a visual regression check on icon-bearing views. Budget under an hour of ramp-up; the real effort is design-system alignment (sizing conventions, stroke widths, a11y labelling), which is a frontend/design pairing, not platform work. No operational runbook is warranted beyond the dependency-update note.
For product — what to do with it and what to expect:
Use this to ship consistent UI faster on dashboards, admin panels, and internal tools. Raw <x-zondicon-*> calls scattered across views make every sizing or colour change a repository-wide edit, so route them through one wrapper component from day one — that is a design-system decision, not an engineering detail. Set expectations early with design that Zondicons is a fixed content set: new icon requests will require a different library or hand-authored SVGs, and that conversation is much cheaper now than mid-quarter. It is a tactical UI dependency, not a differentiator — revisit only if we need custom brand icons, multi-set icon management, or stricter support and licensing guarantees. If we standardize on multiple icon sets later, consolidate that decision once and keep the same naming and wrapper convention across all of them.
How can I help you explore Laravel packages today?