codeat3/blade-weather-icons
Easily add Weather Icons to Laravel Blade views with this lightweight component package. Install via Composer and use simple x-weather-icon tags to render scalable, customizable icons anywhere in your templates, with no manual SVG handling required.
What it is. codeat3/blade-weather-icons is a presentation-layer-only Laravel package: it bundles the Weather Icons SVG set and registers it with blade-ui-kit/blade-icons so each glyph renders as a Blade component inside server-rendered views. No data model, no persistence, no external service call, no client-side bundle, no configuration surface. Release 1.8.0 is a single-change release — Laravel 13 compatibility (PR #10) — with no features, no deprecations, and no documented breaking changes. That is the whole product.
Architecture fit. The surface area is as small as a dependency gets, and that is the delivery argument. It sits in the same tier as a heroicons or font-awesome Blade package: it makes markup expressive and centralizes the icon vocabulary in one place instead of scattering one-off SVGs through templates. Because it holds no business logic, the architectural commitment is reversible — replacing it with inline SVG, a sprite sheet, or another icon pack is a view-layer refactor, not a migration. For a TPM this means the decision does not need to be defended at architecture-review level; it needs to be defended only on accessibility and dependency-hygiene grounds, and both are addressable with one wrapper component.
Integration feasibility. Engineering effort is near zero: Composer install plus Laravel auto-discovery is the entire integration. The actual work is coordination, and it is exactly the kind of work a TPM should force early: agree the icon naming convention, decide whether components are wrapped in a domain component, and confirm the accessibility contract — before icons appear in templates. Left unmanaged, those three decisions get made implicitly and inconsistently by whoever writes the first forecast card.
Technical risk. Low blast radius, but four things should be verified rather than assumed:
illuminate/* constraints were widened. If they were replaced, teams on Laravel 10–12 are pushed onto the older 1.7.0 line. This must be read from composer.json in the 1.8.0 tag, not inferred from a changelog line.<x-weather-icon name="day-sunny" /> while developer notes describe <x-weather-icon-day-sunny />. That ambiguity costs an engineer ten minutes, but more importantly it signals the docs are not rigorously maintained and should not be the source of truth. The shipped SVG filenames are.Key questions.
illuminate/* constraints, and what is the resulting minimum supported Laravel version?name="...") or per-icon tags?aria-hidden / title / role correctly, or do we need a wrapper to clear accessibility review?01d) to icon names, and where does that mapping live?Stack fit. Native Laravel: Composer package, auto-discovery, Blade components, zero configuration. Components accept standard HTML attributes, so they compose cleanly with Tailwind or any utility styling (class, width, height, aria-*). That is the practical value proposition for a TPM — design can size and color icons without an engineering handoff, and non-frontend developers can render them without touching an asset pipeline. Server rendering also makes this viable in channels where a JS icon library is a non-starter: emails, PDFs, and low-JS pages.
Migration path. Greenfield: install, use, done. Existing app on 1.7.0: treat 1.8.0 as a routine patch-level upgrade. Because there is no state and no schema, rollback is a single version pin — no migration story, no data backfill, no release-window coordination. This is the cheapest possible class of dependency change and should be batched with normal maintenance rather than scheduled as its own initiative.
Compatibility. Three gates before merge: (a) the resolved illuminate/* range still includes our current Laravel version; (b) our PHP floor satisfies the package constraint — recent releases in this package family have moved to PHP 8.2+, which is a genuine blocker for older services; (c) the composer.lock diff shows no unexpected transitive upgrades. The strategic value of this release is not the icon set — it is that a Laravel 13 migration now has one fewer blocker, which is exactly the evidence a TPM wants when sequencing platform upgrades against feature commitments.
Sequencing.
composer.json in the 1.8.0 tag and diff it against 1.7.0 — confirm constraint direction and PHP floor.composer update codeat3/blade-weather-icons --with-dependencies.<x-weather-glyph :code="..." />) that owns condition-code→icon mapping, the fallback glyph, and the accessibility attributes. Do this before icons appear in templates.php artisan view:clear && php artisan view:cache to validate compiled-component behaviour the way production will.Recommended posture: adopt, but consume it shallowly. Do not build an abstraction layer over the package. One wrapper component for mapping plus accessibility is the correct amount of insulation; anything more is inventing maintenance work for a dependency whose entire value is that it has none.
Maintenance. Negligible. No configuration to drift, no scheduled jobs, no credentials, no third-party quotas. The only recurring obligation is tracking major Laravel releases so this package does not become the long pole in a framework upgrade — precisely the debt 1.8.0 pays down. Budget roughly zero ongoing engineering hours.
Support. Effectively zero until a designer requests an icon that does not exist. The upstream Weather Icons set has been stable and effectively archived for years, so "missing icon" is a permanent coverage gap, not a bug awaiting a fix. Set that expectation with design up front and agree a fallback — a generic cloud/sun glyph, or a supplementary pack for anything outside the set — rather than letting it surface as a mid-sprint blocker. Support load, if any, comes from product ambiguity, not from the package.
Scaling. Irrelevant at the infrastructure layer — static assets, no per-request cost beyond Blade component resolution. The one scaling-adjacent concern is payload: inlining many SVGs inflates HTML on dense dashboards. Mitigate by curating the subset actually used, preferring sprite / <symbol> patterns for large icon grids, and keeping view:cache in the production build. For the typical case — a current-conditions card, a 7-day forecast row, an email, a PDF — this is a non-issue.
Failure modes.
composer.json plus a scheduled CI composer update --dry-run.aria-hidden or title will fail an audit. Mitigation: the wrapper owns those attributes so no template can omit them.Ramp-up. A Blade developer is productive in under an hour; the package API is one tag with a handful of attributes. The real onboarding cost is not the package but the two artifacts we author around it: the mapping table from provider codes to icon names, and the one-page note recording the naming convention, the fallback rule, and the exit plan. Budget roughly half a day of a mid-level engineer for the wrapper, the initial mapping, and that note — after which the package is invisible to the team, which is the correct end state for a dependency like this. Do not build a runbook; there is nothing to run.
How can I help you explore Laravel packages today?