codeat3/blade-evil-icons
Blade Evil Icons provides easy, expressive Blade components for the Evil Icons SVG icon set in Laravel. Drop icons into your views with a simple x-evil-icon tag, control size and color via attributes, and keep your markup clean without extra JavaScript or asset pipelines.
Architecture fit. codeat3/blade-evil-icons is a presentation-layer dependency with no architectural footprint. It is a thin wrapper over blade-ui-kit/blade-icons that registers the Evil Icons SVG set as Blade components under the evil-o prefix (e.g. <x-evil-o name="search" class="w-4 h-4" />). It ships no service provider logic beyond icon registration, no config to publish, no migrations, no middleware, no routes, no events, and no persistence. It therefore cannot couple itself to domain code, and removing it later is a view-layer change rather than an architectural one. It is in-scope only where Laravel renders Blade — a monolith, Livewire, or an Inertia/Vue app with Blade layouts. It is out of scope for API-only backends and JS-first SPAs, where the equivalent decision belongs to an npm icon package and this dependency would be dead weight.
Integration feasibility. Low effort, low ceremony. A single composer require codeat3/blade-evil-icons plus package auto-discovery; no credentials, no build step, no Vite/npm involvement, no runtime network calls. The realistic shape of the work is a sub-day pilot in one or two layouts followed by a template sweep whose duration scales with the number of views touched, not with technical complexity. That makes it easy to estimate per-surface and easy to stop halfway: templates migrated keep working, templates untouched are unaffected.
Technical risk. The release under review (1.7.0) is compatibility-only — a single PR adding Laravel 13 support, with no API changes, no deprecations, and no removed components. Functional risk from this release is negligible. The meaningful risks are program-level and should be recorded as such:
composer.json ranges (PHP minimum, supported Laravel majors, blade-ui-kit/blade-icons version) were not. These must be verified before commitment — they are the most likely cause of a failed composer update.aria-hidden, role, <title>, and focusable can be expressed through attribute passthrough, and whether inline SVG fits the Content-Security-Policy, must be validated before customer-facing use.Key questions.
blade-ui-kit/blade-icons constraints, and do they satisfy prod, staging, and CI lock files exactly?Stack fit. Assumes Laravel + Blade (or Livewire) + Composer. Works cleanly with a Tailwind or utility-CSS workflow because arbitrary attributes pass through to the root <svg>, so sizing, color, and hover states are handled by existing classes rather than package API. It does not fit front-end-only pipelines: a React/Vue/Next front end needs the icons consumed at build time via npm, not rendered server-side.
Migration path. Additive, never big-bang. Sequence:
^1.7 in composer.json and commit the resulting composer.lock so CI and production resolve identically.<img src="/icons/..."> tags or hand-copied inline SVG with <x-evil-o name="..." />.fill/stroke inheritance from currentColor, hover and transition states, and CSP behavior.Compatibility. The headline of 1.7.0 is Laravel 13 support, so the package is current with the latest framework major. Before rollout, confirm the constraint covers the version actually running in each environment. If any environment lags a major behind, verify the constraint is a range rather than a pin — a single composer.json/lock mismatch is the realistic failure mode here, and it blocks the whole application rather than the icon layer.
Sequencing. Low urgency; slot into an existing dependency-refresh window rather than raising a dedicated change. Order: (a) verify constraints, license, and accessibility behavior, (b) pin and lock, (c) pilot one layout, (d) sweep remaining templates, (e) decommission legacy assets. Critically, do not bundle this with a Laravel major upgrade — keep framework and view-layer changes in separate deploys so a rollback is unambiguous and attributable to one change.
Maintenance. Near-zero steady state. No configuration, no database, no scheduled jobs, no external service, no runtime state. The only recurring task is a version bump alongside framework upgrades. Budget a small annual allowance for the "Laravel N+1 released, waiting on the icon package" lag, historically weeks to months, and treat that lag as a known platform constraint rather than a surprise on the upgrade critical path.
Support. The failure surface is narrow and loud: a mistyped component name or a renamed glyph fails at render time, visible in development and immediately obvious in review — not a silent production degradation. No on-call implications. The entire runbook is "icon missing → check the name against the README and the package's resources/svg directory." Support cost is effectively documentation-only.
Scaling. Scales without ceremony on the server: no connections, no queues, no caches to warm, no cold-start considerations. The scaling pressure is on the client and it is linear in icon count — inline SVG increases HTML weight on icon-dense pages and cannot be cached as a separate asset the way a sprite sheet or icon font can. On a CRUD-heavy admin surface this is invisible; on a large, icon-dense, high-traffic public page it is measurable and should be validated with a page-weight check during the pilot rather than assumed away.
Failure modes. Four to plan for, in order of likelihood:
composer update application-wide. Mitigation: verify ranges up front, pin ^1.7, and keep a vendored copy of the SVG set on hand.blade-icons solution — and make explicit that the latter means touching every template already migrated.fill/stroke inheritance or global SVG CSS interacts badly with existing styles, producing wrong-colored or wrong-sized icons. Mitigation: baseline comparison during the pilot, before the sweep.blade-ui-kit/blade-icons registration.Ramp-up. Effectively zero for any engineer already writing Blade — the syntax is one tag, and there is nothing to configure or learn conceptually. A short README note and one exemplar template in the pilot layout is enough to make the pattern self-propagating across the team. The onboarding cost that does exist is editorial rather than technical: making sure engineers check the icon list before designing a screen that assumes a glyph, so the coverage constraint surfaces during design, not after implementation.
How can I help you explore Laravel packages today?