secondnetwork/blade-tabler-icons
Blade Tabler Icons lets you drop the full Tabler Icons set into any Laravel Blade view as simple components like x-tabler-alert-circle, with support for classes, inline styles, filled variants, and raw SVG output via Blade Icons.
Architecture fit. secondnetwork/blade-tabler-icons is a thin, presentational dependency. It registers a directory of ~2,400+ SVG files with blade-ui-kit/blade-icons and exposes them as anonymous Blade components (<x-tabler-alert-circle />) or via the @svg() directive. It touches no routing, persistence, queue, auth, or domain layer, so architectural fit is effectively "does the team render Blade templates?" If yes, it slots in with zero coupling to application logic. It is equally usable in Livewire views and in plain Blade; for an Inertia/SPA frontend it degrades to a static asset source via the published raw SVGs, which is a weaker but workable mode.
The real dependency is Blade Icons, not this package. All behaviour that matters — component resolution, @svg, default classes/attributes, and the icon cache — is inherited from blade-ui-kit/blade-icons. This package is a curated and continuously re-synced asset dump plus a service provider registration. That materially lowers technical risk (the engine is a mature, widely used library) and simultaneously lowers the package's unique value: we are adopting it for the icons and the automation, not for engineering.
Integration feasibility. High. composer require plus an optional vendor:publish for config is the whole install. No migrations, no env vars, no build step (the SVGs ship pre-built; the Bun build chain is upstream-maintainer-only). PHP 8.0+ / Laravel 9+ per the README, with explicit Laravel 12 and 13 support committed in v3.30.1 and v3.40.1 respectively. A spike should confirm the constraint resolution against our pinned blade-icons and Laravel versions before we plan anything.
Technical risk. Ranked:
| Risk | Severity | Evidence | Mitigation |
|---|---|---|---|
| Version numbers track the upstream icon set, not this package's API. | High | Releases are automated change Icons Release vX.Y.Z, matching Tabler icons versions; v3.44.0 alone shipped 51 new icons and fixed 28. |
Pin an exact version. Treat every bump as a potential breaking change, not a patch. |
| Icon renames are breaking and arrive in "feature" releases. | High | v3.45.0 renamed mood-confuzed→mood-confused, foodsteps→footsteps, brand-adobe-after-effect→-effects, physotherapist→physiotherapist, and more. |
Reference icons through a project-owned constants file or wrapper components; never hard-code <x-tabler-*> names across templates. |
| Bus factor of one. | Medium | Single maintainer ("secondnetwork"), 40 stars, 0 dependents. | Accept the risk because removal cost is near zero; keep an exit ramp (see below). |
| Automated-only release process. | Medium | Nearly every release is a bot commit; the few human commits are compat bumps and one registration fix (#85 in v3.29.1). | No upstream quality gate to rely on; our own CI must render-check the icons we actually use. |
| Unknown icon render behaviour on miss. | Medium | Not documented in the README. Blade Icons raises an exception for an unresolvable component, which means a renamed icon is a 500, not a blank space. | Verify in the spike; add a smoke test over every icon name we reference. |
| Metadata anomaly. | Low | "Last release: 2026-10-06" is future-dated relative to any normal review window. | Confirm the date is a scrape artifact before citing release freshness in a steering update. |
| Accessibility defaults. | Low | README documents classes, styles, and filled variants; it says nothing about aria-hidden/role/titles. |
Standardise decorative-icon handling in our wrapper, not per-usage. |
License posture is clean: MIT on both this package and Tabler Icons, no attribution burden beyond retaining the license file.
Key questions for the maintainer/spike.
composer why-not cleanly resolve against our Laravel and blade-icons pins today?filled variants at full parity with outline, and is that parity guaranteed per release?blade-icons' cache invalidation contract after a version bump, and does the maintainer document it?Stack fit. Native. Any Laravel 9–13 application rendering Blade gets first-class support. Tailwind works cleanly because Tabler icons are stroked SVGs that inherit currentColor; the README's own examples (class="w-6 h-6 text-gray-500", style="stroke-width: 1.25") are Tailwind-shaped. Livewire is a non-issue. Inertia/Vue/React consumes it only as published static SVGs or via an icon-name-to-path endpoint — do not promise component ergonomics to a non-Blade frontend.
Migration path. Effectively none required, and that is the package's strongest selling point. This is an additive presentational layer: nothing to backfill, no data model, no dual-write, no cutover window. Two adoption shapes:
The reverse migration is the cheapest we will ever see: delete the Composer line and any now-dangling component tags. That asymmetry — trivial to adopt, trivial to abandon — is the core argument for accepting the bus-factor risk.
Compatibility. Pin explicitly on both axes:
blade-icons: transitive; audit composer.lock before and after, since a major there changes component resolution and the @svg signature.Do not float the constraint (^3.49). Given renames ship in minor releases, use an exact pin (3.49.0) or ~3.49.0 at the tightest setting our policy allows.
Sequencing.
<x-icon name="alert-circle" /> wrapper or an Icons constants class — so upstream naming churn is absorbed in one file. This is the single highest-leverage step and the one most likely to be skipped.Maintenance. Low and asymmetric. There is nothing to operate — no service, no cron, no storage. The recurring cost is upgrade supervision: releases land roughly weekly as the bot tracks upstream, and most are additive, so the honest posture is "upgrade deliberately and rarely" rather than "track upstream." Budget roughly 1–2 hours per upgrade cycle for the version bump, the CI icon-render check, and a visual diff on changed icons. The v3.36.1 release ("2,433 icons optimized and fixed") is a useful warning that icon appearance can shift in bulk without any API change — visual regression is a real, if cosmetic, maintenance category.
Support. No commercial support, no SLA, no maintainer on retainer. GitHub issues only, on a repo with 40 stars where the maintainer's responsiveness is unproven. Practically: our own engineers are first-line support, and they will be debugging blade-icons more often than this package. The Blade Icons README is genuinely good documentation and is the resource to point people at. Escalation path is "read Blade Icons source, then vendor the SVGs."
Scaling. Renders are static SVG markup inlined into HTML — no runtime computation, no external calls, no cold-start cost. Two scaling considerations:
public/. Prefer the component/@svg path plus icon caching; publish raw assets only for the specific non-Blade consumers that need them.Neither is a bottleneck at realistic scale. This will not be in anyone's capacity model.
Failure modes and detection.
| Mode | Symptom | Detection |
|---|---|---|
| Renamed/removed icon after upgrade | Blade component resolution exception → 500 on the affected page | CI icon-render test; Sentry |
| Stale icon cache after deploy | New or updated icons render as the old glyph, or fail to resolve | Cache-clear step bound to the deploy, verified in staging |
| Upstream automation breaks | No new icon-sync releases for weeks; package quietly drifts from Tabler | Quarterly freshness check as a calendar reminder, not a dashboard |
| Maintainer abandons the repo | No releases, no issue replies | Same check; trigger point for the vendor-the-SVGs exit |
Transitive blade-icons major |
Component syntax or @svg signature changes |
Lockfile audit on every dependency PR |
The one genuinely dangerous mode is the first: an icon rename surfaces as a hard error, so a routine composer update can take down a customer-facing page. The CI guardrail in the integration plan exists specifically to move that failure from production to the pull request.
Ramp-up. Negligible for anyone who writes Blade — the README is complete enough that a developer is productive in under 30 minutes, and passing classes and inline styles is intuitive. Two things must be taught, not assumed: (1) reference icons through the project wrapper or constants file, never raw <x-tabler-*> in templates, and (2) the accessibility convention for decorative versus meaningful icons (aria-hidden="true" on decorative, a real label when the icon carries meaning). Both belong in the design-system doc and the PR template, not in tribal knowledge. There is no training programme here; the risk is not that developers cannot use it, it is that they use it inconsistently and re-scatter hard-coded icon names across the codebase, quietly rebuilding the coupling we just paid to remove.
Recommendation. Adopt conditionally: pin exactly, wrap in a single project-owned seam, add a CI icon-render check, and pilot behind an internal surface. The dependency is cheap, reversible, and architecturally inert — the only things that can hurt us are the coupled-to-upstream version numbering and the single-maintainer bus factor, and both are neutralised by pinning plus a wrapper, with vendoring roughly fifty SVGs as a credible exit if the repo goes quiet.
How can I help you explore Laravel packages today?