codeat3/blade-microns
Blade Microns provides ready-made Laravel Blade components for rendering Microns icons in your templates. Install the package, then use simple x-micron tags with icon names, sizes, and classes to drop crisp, customizable SVG icons into any view without extra setup.
Architecture fit. This is a thin adapter: it registers Microns SVGs as Blade components on top of blade-icons. There is no runtime, no JavaScript, no asset pipeline, and no build step — icons render as inline SVG during the Blade compile/render cycle. That fits a server-rendered Laravel app, a Livewire app, or an Inertia app with Blade shells. It does not fit a SPA-first frontend: two icon sources of truth across a Blade shell and a React/Vue surface is a worse outcome than picking one system.
The more important architectural point is that the real commitment is to the delivery pattern (Blade component → inline SVG), not to Microns. The same author ships parallel adapters on the same base package, so the icon family is a swappable dependency. That makes this a reversible decision rather than a platform bet — and a TPM should frame it that way to stakeholders.
Integration feasibility. Low effort. composer require, auto-discovery, publishable-but-unnecessary config, no publish or compile step. The install is an afternoon. The actual work is organizational: establishing one project-level <x-icon> primitive, building a name cheatsheet from the vendor SVG directory (there is no editor autocomplete for component names), and settling the artwork licence question.
Technical risk.
| Risk | Severity | Why |
|---|---|---|
| Bus factor / supply chain | Medium | Zero stars, zero dependents, single maintainer. No upstream battle-testing. Blast radius is small but ownership is entirely ours. |
| Constraint ambiguity at 1.7.0 | Medium | "Laravel 13 compatibility" may widen illuminate/* (safe) or replace it with ^13 (strands Laravel 10–12 on 1.6.0). The changelog won't say; vendor/.../composer.json will. |
| Artwork licence | Medium–High | MIT covers the PHP wrapper only. The Microns glyphs are a separate work with their own terms and possible attribution obligations — this matters for any customer-facing or redistributed use, including bundled assets. |
| Namespace collision | Low | All codeat3/blade-* adapters and any other icon set register into the same x-* namespace. Confirm the microns prefix. |
| Upstream icon resync | Low–Medium | A resync can change SVG paths and produce silent visual diffs with no API change to flag them. |
| Render-time failure on bad names | Low | Unknown component throws immediately — loud and localized, which is the preferred failure mode. |
Key questions for engineering and legal.
blade-* adapter in the codebase? If so, which wins?blade-icons directly) written down — including which glyphs?Stack fit. Laravel with Blade + Tailwind, PHP per the package manifest. Composes cleanly inside Livewire components and Blade class components because rendering is entirely server-side. Sizing and colour are plain HTML/Tailwind utilities on the component — no bespoke props to learn, and colour flows from currentColor, so text-* is the knob.
Migration path — the seam matters more than the package. Do not sprinkle <x-microns-*> through views. Create one primitive:
{{-- resources/views/components/icon.blade.php --}}
@props(['name', 'size' => 'h-4 w-4'])
<x-dynamic-component :component="'microns-' . $name"
{{ $attributes->class($size)->merge(['aria-hidden' => 'true']) }} />
This buys two things a TPM should care about: a single place to change defaults and accessibility behaviour, and a one-file migration to another icon family if Microns is abandoned. Existing hand-pasted SVGs get inventoried and mapped to the nearest Microns glyph where one exists; screens that need expressive iconography are left alone rather than having the set stretched to cover them.
Compatibility checks before the first template. Read the illuminate/* and php constraints in the vendor manifest; confirm the microns prefix; ls the vendor SVG directory into a cheatsheet (that directory is the catalogue — names map directly to component suffixes); confirm php artisan view:clear runs in the deploy pipeline and behaves on a read-only filesystem.
Sequencing.
| Phase | Work | Effort |
|---|---|---|
| 0 | Licence review + read composer.json constraints |
0.5 day (parallel: legal) |
| 1 | Install, pin exact version, build name cheatsheet | 0.5 day |
| 2 | <x-icon> primitive with a11y defaults + style-guide entry |
0.5 day |
| 3 | Pilot on one dense-chrome surface (settings nav, one table) | 1–2 days |
| 4 | Measure HTML weight delta; add visual regression test; roll out | 2–3 days |
| 5 | Document the exit path and glyph inventory | 0.5 day |
Total engineering is roughly a week for a broad rollout, most of it migration of existing markup rather than new work. This should be scheduled as a polish/consistency line item, not a platform initiative — it competes with feature work on cost, and it wins only if "inconsistent iconography" is already on the roadmap.
Maintenance. Low local surface, non-trivial upstream surface. Pin the exact version or commit hash, add it to the SBOM, and schedule a light review at every Laravel major and every upstream icon resync. Budget for visual diff review at resync time — that is the maintenance cost, not code changes.
Support. Self-support. One maintainer, no community, no dependents to lean on. Assume no guaranteed response to issues and plan accordingly: the team owns this the day it ships. The mitigation is cheap and should be documented rather than feared — the fork path is a directory of SVGs plus a service provider registration.
Scaling. Runtime cost is negligible: components are compiled and cached, rendering is server-side. The scaling axis is payload, not CPU. Inline SVG duplicates full path data per occurrence — a 200-row table with three icons per row embeds 600 copies of path markup, a real regression against a font icon or external sprite. For list-heavy views, define symbols once and reference them via <use>, and measure the HTML weight delta in the pilot rather than assuming.
Failure modes and their character.
view:clear in the pipeline handles it.aria-hidden, icon-only buttons without an accessible name. This is the most common defect introduced by an icon migration; centralizing it in the primitive is the only reliable fix.Ramp-up. Roughly an hour per engineer: here is the primitive, here is the cheatsheet, here is the rule that you never call <x-microns-*> directly outside the primitive. Designers need the same name list so handoff stops generating glyphs Microns doesn't ship. Add both to the style guide and to onboarding docs.
Decision framing. Adopt if the target is dense admin/dashboard chrome, the Laravel version is inside the supported window, and legal clears the artwork terms — the cost is a week and the decision is reversible in one file. Vendor the SVGs ourselves instead if the licence is unclear, if the surface is customer-facing at scale, or if the team cannot accept a single-maintainer dependency with zero dependents. Either way, the primitive and the cheatsheet are worth building: they are what makes the choice cheap to reverse, which is the only reason a 0-star package should ever be a low-stakes decision.
How can I help you explore Laravel packages today?