codeat3/blade-govicons
A Laravel Blade package that brings the Govicons icon set into your views as easy-to-use, customizable Blade components, letting you add government-themed icons with minimal markup.
Architecture fit. This is a leaf presentation dependency, not a platform component. The package is a thin collection wrapper: SVG assets plus a service provider that registers them with blade-ui-kit/blade-icons as <x-govicon-… /> Blade components. There is no runtime service, no database, no queue, no outbound HTTP, no frontend bundle, and no asset pipeline. That gives it a clean architectural profile: it sits entirely inside the view layer and cannot contaminate domain, data, or integration boundaries.
It fits server-rendered Laravel/Blade applications — public-sector portals, internal admin panels, case-management back offices, legacy Blade codebases without a JS toolchain. It does not fit Inertia/React/Vue front ends, where the same SVGs would be consumed directly as assets and the Blade wrapper adds nothing. That is the first gate: if the UI is JS-driven, stop.
Integration feasibility. Effectively the lowest tier possible. One Composer line, package auto-discovery, no publish step, no migration, no config, no npm install. The two prerequisites are both five-minute checks rather than work items:
govicon- vs govicons-) by listing the vendor SVG directory; that listing doubles as the icon inventory.blade-icons constraint against the existing lockfile, since that is where resolution conflicts actually appear — not in the Laravel version.Technical risk. Low blast radius, moderate confidence risk.
blade-icons constraint, not illuminate/support, is the likely conflict during future composer update runs.currentColor inheritance broken by hardcoded fill, and accessibility defaults that need an app-level pattern rather than ad-hoc use.Key questions to answer before approval.
blade-ui-kit/blade-icons already in the lockfile at a compatible version, or would this introduce a second constraint?Stack fit. Laravel with Blade and blade-icons present (directly or transitively). Utility-class styling (Tailwind-style size-* / text-*) is the expected usage pattern but not a hard requirement. Out of scope for non-Laravel stacks and for SPA front ends.
Migration path. There is no data, route, or API surface to migrate — this is a template-level substitution. Two viable paths:
<svg> blobs incrementally, starting with one high-traffic civic surface (global nav item, service-category badge, agency identifier in a table row). Do not schedule a sweep; let replacement ride along with normal work touching each template. Rollback is composer remove plus a grep for x-govicon usages.Compatibility. Pin deliberately against composer.json, not the changelog — the changelog documents intent, the constraint file documents reality.
illuminate/support window; if it has, stay on 1.5.0 and fold the bump into the framework upgrade workstream.blade-icons on a branch first. A failed resolution there is the realistic integration blocker.Sequencing.
composer require, list the SVG inventory, confirm the prefix, verify blade-icons resolution. Timeboxed to hours.<x-ui.icon name size>) and a config/icons.php name map before wide usage. This is the one decision that is expensive to retrofit — it pins sizing and accessibility defaults and turns a future library swap or local fork into a one-line change.icons:cache) and the clear step to the rollback path (icons:clear).Maintenance. Near-zero ongoing cost and near-zero churn: expect roughly one release per Laravel major, consisting of a compatibility bump. Assign a named owner and add the package to the framework-upgrade checklist next to the other leaf dependencies. There is no patch stream to track and no runtime attack surface — the only monitoring needed is standard Composer advisory visibility.
Support. No vendor, no contract, no SLA, no meaningful community. For a 2-star package with 0 dependents, the realistic support plan is internal capability, and it must be stated explicitly rather than assumed: we can fork the MIT assets into an application-owned blade-icons path in under a day. That capability is the actual contingency; it is also why this dependency does not need formal vendor review or a procurement workstream.
Scaling. No operational scaling concerns. Icons render server-side as inline SVG — no JS, no CDN, no network dependency at request time. Two manageable considerations:
php artisan icons:cache removes per-render filesystem lookups, but the cache must be warmed on every node at deploy and cleared on rollback. Multi-node environments that skip the clear are the classic source of "works on one node" bugs.Failure modes.
| Failure | Likelihood | Severity | Mitigation |
|---|---|---|---|
| Blank render from wrong prefix / unknown icon name | High | Low, but high confusion | Prefix decision documented; app wrapper with a fallback name; check rendered HTML source first |
Stale component registry after upgrade (view:clear / icons:clear) |
Medium | Low | Run both clears as first debug step; add to deploy and rollback scripts |
blade-icons constraint conflict on Composer update |
Medium | Medium | Resolve on a branch before committing to adoption |
Visual inconsistency (unsized icons, hardcoded fill breaking dark mode/hover) |
Medium | Medium | Wrapper defaults size-5; style via text-* only; policy in design-system notes |
Accessibility debt from direct @svg / svg() calls bypassing the wrapper |
Medium | Medium | Reserve helper forms for dynamic contexts; put labels on controls for icon-only buttons, not aria-hidden alone |
| Semantic drift — civic glyphs stretched to generic UI | Medium | Low–Medium | Written two-tier policy; reach for the general set on mismatch |
| Upstream unmaintained after a framework major | Low | Medium | Fork trigger defined in advance; fork is a few hours of work |
Ramp-up. Hours, not days. One developer, one spike, one wrapper component, one paragraph of documentation. The team learning curve is confined to two facts: registration is prefix-dependent and fails silently, and colour is inherited via currentColor. No training budget is warranted.
Correspondingly, cap the design investment: do not commission a design-system icon audit or brand-governance review against a dependency that renders a handful of civic glyphs. Route this through a lightweight "low-consequence, reversible" approval lane — and reuse that lane for the leaf dependencies that follow.
How can I help you explore Laravel packages today?