codeat3/blade-fluentui-system-icons
Render Microsoft Fluent UI System Icons in your Laravel Blade views with simple, fluent components. Browse the full icon set and drop crisp, scalable SVG icons into your app with a single tag.
Architecture fit. This is a view-layer-only dependency. It ships Microsoft's FluentUI System Icons as SVG assets and registers them into the blade-icons ecosystem, surfacing them as <x-fluentui-* /> Blade components. There are no migrations, queues, scheduled jobs, service-layer hooks, or runtime configuration beyond an optional publishable config file. For a TPM the headline property is blast radius: a defect, a regression, or a removal is confined to template rendering, and the fallback is inlining the SVGs we need. That makes it an appropriate dependency for a decorative layer and an inappropriate one for anything on a critical path.
The architectural nuance to hold onto — and to put in the decision record — is that this is a content package as much as a code package. Its version tracks Microsoft's upstream icon inventory, not just PHP code. So there are two independent review axes: "does it run on our Laravel version?" and "does its inventory and naming match the icon language design has chosen?" The second dominates. This package wraps exactly one icon set; if design isn't standardizing on Fluent UI, the technical merits are irrelevant and the ticket should be closed rather than negotiated.
Integration feasibility. High, and cheap to prove. Adoption is composer require and, in most setups, nothing else — auto-discovery registers the components. Teams already on blade-icons wrappers (Heroicons, Tabler, Phosphor) get identical ergonomics, so there is no new mental model and no training line item to schedule. The only genuine integration decision is the component prefix and naming convention, which becomes a de facto template API across the codebase. That must be signed off by design and engineering before the first merge; changing it later is a repo-wide find-and-replace plus review churn across every team touching views. Size the whole adoption at hours of engineering plus one design review, not a sprint.
Technical risk. Low, with structural caveats to register and track rather than block on. Release 1.35.0 is a single-purpose compatibility change — Laravel 13 support via PR #63 — with no breaking changes, deprecations, or behaviour changes, so it forces no work for teams on Laravel 10–12. That is a positive maintenance signal: the maintainer tracks framework majors, which is the single most valuable durability property for a small dependency. Residual risks worth logging in the register:
blade-icons floor moved, or whether the PHP minimum shifted. In a monorepo with mixed framework versions, that ambiguity is the actual risk, not the code.blade-icons. If a bump raises the blade-icons floor, every other icon package in the app moves at once. That is the only path by which this "decorative" dependency can take out unrelated screens.vendor/. Inert, but it is data pulled into every build and potentially every deploy artifact.Key questions. Each of these gates a specific decision; assign an owner and close them before the merge, not before the spike — the spike is how you answer most of them.
composer.json on the 1.35.0 tag — did Laravel 10/11 get dropped, and did the PHP floor move? (Gates: whether mixed-version teams can adopt in one wave.)blade-icons version floor raised, and does that force a move in icon packages we already run? (Gates: whether adoption is isolated or becomes a coordinated multi-package upgrade.)Stack fit. Excellent for a Blade-first or Blade-heavy Laravel application, particularly one already inside the blade-icons convention — and that is where you should aim it: admin panels, internal tools, dashboards, customer portals, settings and onboarding flows, empty states, status indicators, table row actions, navigation. It is a poor fit where the frontend is decoupled (Inertia/React/Vue consuming a JS icon library), because you would end up with two sources of truth for iconography — worse than either one alone. Also poor fit if the design system already ships FluentUI assets, or if we need only a handful of icons, where inlining beats a dependency plus its review overhead.
Migration path. Effectively greenfield. There is nothing to migrate from unless we currently hand-copy SVGs into resources/views or run an icon font, in which case the work is mechanical and bounded: inventory icons actually in use, map each to its FluentUI component name, replace the markup, delete the inlined assets. Timebox it and do it in one pass. The real failure mode is not technical difficulty — it is letting two icon conventions coexist indefinitely, which produces permanent ambiguity about which is canonical.
Compatibility. Laravel 13 is explicitly supported as of 1.35.0. Treat Laravel 10–12 as supported pending confirmation from the tagged composer.json; PHP compatibility is unverified from release notes alone and must be read off package constraints before adoption. The main compatibility consideration is coexistence: multiple icon sets can live side by side only if they agree on a blade-icons version, so reconcile that constraint across the existing icon packages as a single planning item rather than discovering it during a routine bump.
Sequencing. Commit to this order and keep the change in its own PR for a clean revert; no feature flag is warranted at this risk level.
composer update in isolation to see whether anything else in the graph moves. This answers key questions 1, 2, and 5 empirically and is far cheaper than reading changelogs.php artisan view:cache, since a component that works uncached but breaks under view caching is a classic late surprise.vendor/ and deploy-artifact growth before and after, so the size delta is a number in the ticket rather than a later surprise.Maintenance. Ongoing cost is near zero: pin the minor, let the bot propose bumps, and review release notes for renames before merging each one. Budget a few minutes per bump plus the occasional ten-minute smoke-test fix — the correct posture is "cheap but not unattended." The durable artifacts to maintain are the written prefix convention and the smoke test; both outlive any individual contributor's memory of why they exist. Watch specifically for bumps that touch the blade-icons constraint, since those are the only ones that can ripple beyond the icon layer.
Support. No vendor SLA, no support contract, single maintainer, MIT license. Internal ownership should sit with whoever owns the design system or the shared view layer — assign it explicitly, because "everyone uses it, nobody owns it" is how dormant dependencies become incident tickets. The escalation path when the maintainer stalls is the exit plan: vendor the SVGs, drop the package, accept a frozen icon inventory. That path costs hours, not sprints, and its existence is the core reason this adoption survives a conservative dependency review.
Scaling. Scales with the number of templates using icons, not with traffic — inline SVG is rendered server-side and cached with the compiled view, so there is no per-request external fetch and no runtime dependency. Two things to watch as surface area grows: HTML payload from inline SVG (mitigated by gzip and by not repeating large icons in long lists), and template-level consistency, which degrades if teams diverge from the agreed prefix. Note the deliberate trade-off in the platform bet: zero npm dependency, zero Vite config change, zero JS bundle weight, zero hydration cost — in exchange for icons that cannot be tree-shaken per glyph the way a JS icon library would allow.
Failure modes. Enumerate these in the risk register with mitigations, because they are what a postmortem would otherwise reconstruct from scratch.
blade-icons failure (highest impact). A constraint bump breaks every icon package simultaneously, including sets used by teams that never adopted this one. Mitigation: treat blade-icons version changes as a separate, coordinated change with visibility beyond this package's owners.vendor/ inflating build artifacts. Mitigation: measure once at adoption rather than guessing.Ramp-up. Effectively zero for anyone already using blade-icons — the syntax is identical, so the ramp is one example in the README and a line in the onboarding doc. Developers new to the ecosystem need a paragraph, not a session. The ramp-up risk is not skill acquisition, it is institutional memory: without the prefix convention and the design decision written down, the next team reopens the icon-language debate from scratch, which is a far larger cost than the dependency itself. Capture both at adoption time, when the reasoning is fresh and the people who made the call are still in the room.
How can I help you explore Laravel packages today?