Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Blade Iconic Icons Laravel Package

codeat3/blade-iconic-icons

Blade Iconic Icons brings the Iconic icon set to Laravel as ready-to-use Blade components. Drop SVG icons into your templates with simple tags, customize size and color through attributes, and keep your markup clean without extra JavaScript or asset pipelines.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. This is a presentation-layer-only dependency: a Composer package that registers a set of SVG files with blade-ui-kit/blade-icons and exposes them as <x-iconic-* /> Blade components. It introduces no persistence, no service provider hooks beyond icon-set registration, no routes, no config surface that touches runtime behavior, and no domain coupling. For a Laravel monolith or a Blade/Livewire app, that is the cheapest possible class of dependency to add and the cheapest to remove — the removal exercise is a composer remove, a copy of resources/svg into resource_path(), and one BladeIcons::registerSet(...) line. Architecturally, the fit is excellent if the app is Blade-rendered. It is a non-starter for API-only services, and it is redundant in a JS-framework-driven frontend (Inertia/React/Vue) where an npm icon pipeline already exists and would create visual drift against a second, PHP-side source of truth.

The real architectural question is not "this package vs. nothing" but "this package vs. blade-ui-kit/blade-icons plus our own vendored SVG directory." The delta is roughly an hour of setup. The wrapper's value is that the icon set is already curated, named, and registered; the wrapper's cost is that it hard-codes a design commitment (Iconic Icons, pinned to upstream v1.2.1) that the product may not have made deliberately.

Integration feasibility. Low effort, high reversibility. Install is a single composer require; Laravel package auto-discovery registers the provider; the happy path requires no publish step. Usage is three interchangeable entry points from the underlying Blade Icons layer (component, @svg directive, svg() helper), and the recommended implementation is a single project-local <x-ui.icon> wrapper that owns sizing, accessibility attributes, and a missing-icon fallback. That wrapper is where all the actual engineering judgment lives — the package contributes almost none of it. Realistic estimate: under a day to integrate and harden in an existing Blade app, including the wrapper component, an icon-existence test, and a deploy-step change for the manifest cache.

Technical risk. The risk profile is dominated by one signal: last release 2021-05-14, 0 stars, 0 dependents, no upstream tracking past Iconic Icons v1.2.1. This should be classified as vendored convenience code we absorb, not a maintained dependency.

  • Version-conflict risk (high, cheap to test). The source material cites a blade-icons constraint of ^1.0. If the app is on Blade Icons 2.x, Composer will conflict and the package simply cannot be installed as-is. This is the first thing to verify and it is a five-minute check — do it before anything else.
  • Framework-compatibility risk (high, no fix available). A 2021-era wrapper has not been tested against Laravel 10/11/12. Auto-discovery, component registration, and the Blade component namespace are the plausible failure points. There is no maintainer response path, so any incompatibility is an internal ticket, not a vendor ticket.
  • Silent-failure risk (medium, mitigable). Unknown icon names render as empty output with no exception. A typo or a renamed glyph ships to production as a blank space. The wrapper's @else fallback plus a test_required_icons_exist assertion converts this from a production incident into a CI failure.
  • Supply-chain / licensing risk (low). MIT wrapper, but the wrapper's license does not settle the terms of the upstream Iconic Icons artwork. Verify both before this touches a public-facing surface.
  • Scope-creep risk (low, but real). The package will not compose with a second icon family without duplicating tooling. If the design system later adds Lucide or a custom set, this wrapper becomes an awkward singleton.

Key questions to resolve before committing.

  1. What blade-icons major is the target app on, and does ^1.0 actually resolve? (Blocks everything else.)
  2. Has design chosen Iconic Icons, or is this package choosing for us? What is the glyph-coverage gap against the screens we need to ship?
  3. Is the blast radius genuinely low — internal tool, prototype, or a surface we can migrate in an afternoon — or are we quietly putting an unmaintained package under a long-lived public UI?
  4. Who owns the fork path (copy SVGs, register the set, track Laravel majors), and is that person identified now rather than at the first incompatibility?
  5. What are the attribution terms on the upstream icon artwork, and does that survive contact with a public-facing surface?

Integration Approach

Stack fit. Requires Laravel + Blade (Livewire is fine and unremarkable — icons render server-side per component render). Icons are inlined SVG, inherit currentColor, and are styled with plain CSS classes, which matches Tailwind-style utility workflows cleanly. No JS build step, no icon font, no CDN, no published assets. Where the app already uses Blade UI Kit conventions, the API is consistent with what the team already knows; where it doesn't, the conventions are learnable in minutes. It does not fit non-Laravel or non-Blade contexts by construction, and it should not be run in parallel with an existing npm icon pipeline.

Compatibility. Two constraints to validate, in order: (1) the blade-icons major must be compatible with the app's resolved version, and (2) the package's Laravel/PHP constraints must be checked against both the current and the next major — assume no forward compatibility will be provided. Pin resolved versions in composer.lock and treat any future Laravel upgrade as requiring an explicit re-evaluation of this dependency. The escape hatch is trivial and should be documented at adoption time, not discovered at upgrade time: copy resources/svg into resource_path('svg/iconic') and register it via BladeIcons::registerSet(). That fork path is the de facto long-term plan; price it in up front.

Migration path. Deliberately shallow, and that is the main selling point.

  1. Verify the blade-icons constraint resolves; run composer require codeat3/blade-iconic-icons.
  2. Glob vendor/codeat3/blade-iconic-icons/resources/svg once to enumerate actual available icons — the README is not the source of truth. Keep the output as the whitelist.
  3. Publish and set Blade Icons' own config (class, attributes, fallback) once, rather than inlining w-5 h-5 at every call site.
  4. Build the single project-local <x-ui.icon> wrapper with the missing-icon @else branch and baked-in aria-hidden/focusable/<title> handling. All call sites go through it.
  5. Drive dynamic names from config or database-validated lists — never from raw request input.
  6. Add a CI test asserting the specific glyphs the product depends on still exist.
  7. Wire the manifest cache into the deploy pipeline.

Sequencing. Front-load the two cheap, blocking checks — Composer resolution and icon-list enumeration — before any UI work. The wrapper component should land before the first icon is used in a view; retrofitting a wrapper across ad-hoc <x-iconic-* /> call sites is the only part of this that scales badly. For a phased rollout, pilot on an internal admin surface first: it validates the wrapper, the fallback styling, and the deploy steps against real usage with negligible brand exposure, and it keeps the option to fork-and-vendor exercised in a low-stakes setting. Do not publish the icons into resources/ or public/ at any point — published copies are not refreshed by composer update and produce the classic "icons fine locally, blank in prod" incident. Keep the package as the single source until the fork is actually executed.

Deploy sequencing matters. Because the manifest is cached, any icon file change requires icons:clear → icons:cache → view:clear, in that order. Adding this to the standard deploy script is a prerequisite, not a follow-up.

Operational Impact

Maintenance. This is the dominant cost and it is not zero, despite the zero license price. The package is effectively frozen — no release since May 2021, no downstream users, tracking upstream v1.2.1. Plan on owning: the blade-icons version constraint reconciliation at every framework upgrade, the icon set itself if new glyphs are ever needed, and the fork if (when) a Laravel major breaks it. The honest framing for stakeholders is that the risk is ownership cost, not license cost: someone on the team owns the fork, the compatibility matrix, and the icon-set updates. This is a reasonable trade for internal tooling and a poor trade for long-lived public surfaces adopted without an explicit contingency.

Support. There is no support relationship, no security-response path, and no maintainer to escalate to. Practically, "support" means internal triage against a debugging checklist: resolved package version and blade-icons major → exact icon name/casing/hyphenation against resources/svg → manifest cache (icons:clear) → compiled views (view:clear) → dd(svg('iconic-home')) to confirm the set is registered at all. That checklist should live in the team's runbook, because the maintainer will not be producing one. For any org with a dependency-governance policy requiring active releases or a security-response commitment, this package fails the bar — expect that conversation and pre-empt it with the fork plan.

Scaling. Two distinct axes. Rendering scale: the @svg directive reads and parses the SVG per render unless the manifest is cached. In hot paths — data tables, permission grids, anything rendering dozens of icons per request — run php artisan icons:cache at deploy or memoize markup keyed on name + class string (and flush that cache on package version change). The cached manifest is the single highest-leverage operational step. Adoption scale: the package is a single-set wrapper and does not compose with a second icon family without duplicated tooling. If the design system grows beyond Iconic, this dependency becomes the thing to replace, not the thing to extend. Subclassing the package's component to customize behavior couples the codebase to the internals of an unmaintained package — use the attribute bag and Blade Icons' global config instead; those are the supported extension surfaces.

Failure modes. Ranked by likelihood × impact:

  • Silent empty render on unknown/renamed icon (most likely). No exception, no log, just blank markup — typically after a version bump renames a glyph or a developer typos a name. Mitigation: the wrapper's @else fallback, styled conspicuously in non-production so missing glyphs are impossible to miss, plus a CI test asserting required icons exist.
  • Composer conflict on blade-icons major (most likely at adoption). Hard failure, caught immediately, cheap to resolve — but it may resolve to "abandon this package."
  • Stale manifest cache after deploy (common, confusing). New or replaced SVGs have no effect until icons:clear. Presents as "the deploy didn't work." Mitigation: the fixed deploy order above.
  • Framework-major incompatibility (certain, eventually). Laravel 10/11/12 breakage with no upstream fix. Mitigation: the documented fork-and-vendor path, executed rather than improvised.
  • Published-icons drift (self-inflicted). Icons look fine locally, blank in production. Mitigation: don't publish; serve from vendor/.
  • Injection via dynamic names (low likelihood, high impact). <x-iconic-* /> returns HtmlString and is safe; hand-rolled {!! svg($name)->toHtml() !!} with a user-controlled $name is an HTML injection point. Mitigation: whitelist against the cached icon list.
  • Duplicate SVG IDs in repeated contexts (low, Iconic is monochrome). Usually moot; verify any glyph with id/clipPath/gradient defs before rendering it in table rows or cards.

Ramp-up. Minimal for developers — three interchangeable APIs, one wrapper component, and a conventions doc that fits on a page. The wrapper is also where accessibility gets solved once (aria-hidden/focusable for decorative icons, <title> or adjacent visually-hidden text for meaningful ones), so no call site can forget. The ramp-up cost is not developer learning time; it is the organizational work of recording the dependency as unmaintained-by-design, assigning a fork owner, and adding the icon-existence test and deploy-order steps to the pipeline. Budget that as a half-day of process work, not as a training cost.

Bottom line for the roadmap. Support this as a low-blast-radius convenience for internal tools, prototypes, and pilot surfaces where reversibility matters more than longevity — and only after the Composer constraint is verified. Do not let it anchor any roadmap item that presumes ongoing icon updates, new glyphs, or future Laravel compatibility; there is no evidence for any of those. For public-facing brand surfaces or accessibility-critical UI, use blade-ui-kit/blade-icons directly with a locally vendored set, and skip this layer entirely.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
ippanelcom/laravel-sdk
adachsoft/changelog-linter
adachsoft/collection
payerurl/telegrambot-crypto-payment-instant-payout
dskripchenko/laravel-hybrid-search
riorizkyrainey/lara-ced
mehedimi/static-vel
zharp/zharp
nonsapiens/bigquery-model-sync
lgu-bayambang-ict-office/lgu-laravel-development-standards
andydefer/laravel-support
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel
draftsmaninc/draftsman
square-bit/laravel-volition
himito/laravel-mailman
htinlynn/genius-helper
maco-studios/hephaestus