codeat3/blade-bytesize-icons
codeat3/blade-bytesize-icons provides ready-to-use Blade components for the Bytesize SVG icon library, letting Laravel developers render clean, scalable icons in views with simple tags, customize attributes, and avoid manually embedding SVG markup.
Architecture fit
A presentation-only dependency. codeat3/blade-bytesize-icons registers the Bytesize SVG set as Blade components on top of blade-ui-kit/blade-icons. There is no service provider logic beyond component registration, no migration, queue, scheduler, event, or outbound network call — nothing that touches data, auth, or money. For a TPM that means a very narrow blast radius and a clean rollback: drop the composer require, delete the wrapper, ship. It fits Blade-first Laravel monoliths, Livewire apps, and any server-rendered surface. It does not fit API-only services, or Inertia/React/Vue front ends that render icons client-side. That last point is the one to capture in scope: this solves the Laravel half of iconography, so a mobile app or design tooling still needs a separate shared SVG source of truth. Missing that turns "the icon story" into a second, unplanned workstream.
Integration feasibility
Effort is hours, not sprints: one composer require, one tag (<x-bytesize-check-16 class="size-4" />), and no npm install, build step, asset pipeline change, or published config. The parent blade-icons dependency coexists with Heroicons/Feather/Phosphor via distinct prefixes, so adoption is additive. Realistic plan line: one small dependency PR plus a design review, absorbable inside a normal feature ticket or spare-capacity slot. It should never compete with roadmap work for a sprint.
Technical risk Low, and concentrated in lifecycle and supply chain rather than runtime:
codeat3 Blade icon family is maintained by a single individual. No documented security disclosure process, no deprecation policy, no vendor SLA. Acceptable only because the package holds no trust boundary.illuminate/support constraint or hard-pivoted to ^13; the latter strands anyone on Laravel 10–12.focusable, aria-hidden, <title>) are vendor-controlled unless overridden. A genuine accessibility-review item, not a formality.Key questions
^10|^11|^12|^13) or drop older majors? What is the new minimum Laravel/PHP floor, and was that handled as a semver-major change?fill/stroke) without forking, and does Bytesize's deliberately minimal catalog cover our real design-system vocabulary at 16/24/32px, or will this become one of several icon dependencies?Stack fit
Target Laravel 10+ applications rendering through Blade or Livewire, on a Tailwind-style CSS system — icons inherit currentColor, so theming and dark mode come free. Deliberately out of scope: SPA/API-first front ends, where the raw SVGs would need extracting into the client build. Confirm fit before adopting, because installing this on a repo that turns out to be Inertia/React is wasted work and a confusing precedent.
Migration path
Incremental by design. The TPM-relevant decision is not whether to install the package but how we expose it: adopt behind an internal wrapper component (<x-app.icon name="check" size="16" />) from day one, so the vendor namespace never appears in feature templates. That is the cheap insurance policy — it turns a future swap to a different icon package, a sprite sheet, or a vendored directory into a one-file change rather than a codebase-wide find-and-replace. Write the convention into front-end standards so review enforces it rather than memory.
Compatibility
Verify three things post-install: (a) the illuminate/support constraint against the target app's Laravel version; (b) the PHP floor versus the platform image; (c) no conflict with an already-installed codeat3/blade-* package resolving a different shared dependency version. Pin to ^1.7 and let Composer's solver confirm. Do not run a broad composer update across the whole codeat3/* family during an unrelated framework bump — that is how a cosmetic package causes an incident.
Sequencing
<svg> present, expected class applied — so an upstream rename fails the build instead of production.Maintenance Near-zero steady state: no config to drift, no migrations, no jobs, no credentials, no data to reconcile. The only recurring obligation is tracking upstream releases, and those are almost entirely framework-constraint bumps rather than features. Budget a few hours per year plus a checkbox at every Laravel major. The TPM-specific job is making sure that checkbox exists on the framework-upgrade runbook — this class of package fails by being forgotten, not by breaking.
Support Community-only, single maintainer, no commercial backing, no CVE process. Acceptable because the package is confined to the presentation layer and holds no trust boundary; unacceptable for anything touching auth, payments, or data. Confirm MIT compatibility with our distribution model — relevant if the product is white-labelled or the build is redistributed. Note that "support" here mostly means "we can read a few hundred lines of PHP and fork it," which is a reasonable fallback to state explicitly rather than assume.
Scaling Rendered at Blade compile time, so per-request CPU cost is negligible; the only real axis is HTML payload. Inline SVGs are not shared across repeated instances of the same icon on a page, so a data table with a per-row action icon is materially heavier than a nav bar with six. At low-to-moderate icon density this is noise; at high density (dashboards, dense tables, public pages with a performance budget) plan for a sprite sheet or a cached partial. Flag that decision at design time, not after a Lighthouse regression.
Failure modes
^1.7, review release notes at each bump, never blanket-update.aria-hidden/<title> and screen readers announce decorative glyphs. Mitigation: bake a11y defaults into the wrapper so individual call sites can't get it wrong.<x-bytesize-* /> tags proliferate before the wrapper convention lands, turning a trivial swap into a find-and-replace. Mitigation: sequence the wrapper first.Ramp-up Effectively zero for engineers already writing Blade — the syntax is a standard component tag, and no new tooling, build command, or mental model is introduced. Expect a 15-minute onboarding note covering: use the wrapper, size via class, don't copy SVGs by hand. The real ramp-up is organizational, not technical: getting design to confirm the icon vocabulary, and getting review to enforce the wrapper convention before the first hundred call sites exist. Assign that to the design-system owner and treat adoption as done when the convention is in the standards doc and the CI test is green — not when the Composer PR merges.
How can I help you explore Laravel packages today?