alexazartsev/heroicon
Laravel package that makes it easy to use Heroicons in your Blade templates. Provides a simple Blade component for rendering outline and solid SVG icons with custom sizes and CSS classes, so you can drop icons into any Laravel app quickly.
Package context: AlexAzartsev/heroicon is a small Laravel/Nova presentation package that supplies Heroicons and Font Awesome icon sets as selectable assets inside Laravel Nova. It has no domain logic, no persistence layer, and no runtime service surface — it is a UI asset/field helper. That narrowness is the most important fact in this evaluation: the blast radius is visual, not functional.
Architecture fit: Fits cleanly as a leaf dependency in a Nova admin panel. It does not touch application models, queues, auth, or the public-facing app. Integration is composer-only plus, at most, publishing/discovering a Nova field or asset registration. The architectural concern is not coupling — it is that the package's major version is pinned to a Nova major version.
Integration feasibility: High. The upgrade path documented is a single constraint bump (^1.0 → ^2.0). However, that is only true if the host application is already on Nova 4. v2.0.0 deliberately drops Nova 3 support rather than supporting both, so the package version and the Nova version form a hard 1:1 pairing.
Technical risk (ranked):
| Risk | Severity | Notes |
|---|---|---|
| Version lockstep with Nova | Medium | ^1.x ↔ Nova 3, ^2.x ↔ Nova 4. Mixed-version fleets require per-repo constraints; no single shared lockfile or internal metapackage can span both. |
| Persisted icon identifier drift | Medium | Changelog says "fix few heroicons." If any icon slug was renamed or removed, any stored icon name (Nova resource config, DB column, seeded settings) will silently render blank rather than error. Needs verification, not assumption. |
| Visual regression from style changes | Low–Medium | "Change styles for support light and dark theme" and the fill='currentColor' change alter rendering for all existing icons, not just new ones. Expect cosmetic diffs in dark mode and anywhere icon color was previously inherited from a hardcoded fill. |
| Maintenance / bus factor | Medium | Single maintainer, pre-1.0-era history, no stated test matrix. A Nova 5 release would likely repeat this same breaking-cutover pattern with no guaranteed maintainer response. |
| Composer resolution conflicts | Low | Only if other Nova add-ons still constrain nova ^3; resolution failure is loud and safe. |
Key questions before approval:
fill='currentColor' change a behavioral fix we want (theme-aware icon tinting) or a silent restyle that conflicts with custom CSS in our panels?Stack fit: Laravel + Nova. No queue, cache, storage, or external service implications. Deployment is a composer install and an asset rebuild; no migrations, no env vars, no config publishing expected beyond what v1 already required.
Migration path and compatibility: The documented path is a one-line constraint change. In practice the correct sequence is the reverse of what the release note implies:
heroicon to ^2.0.Attempting the package bump on a Nova 3 host will fail composer resolution — a safe, loud failure. The genuinely unsafe scenario is the opposite: a repo that upgrades this package opportunistically during a routine composer update while its Nova constraint is loose enough to permit it.
Sequencing and guardrails:
^1.0 or ^2.0), never a bare * or an unpinned require.Rollback: Trivial — revert the constraint and reinstall. The only irreversible element is if any data was rewritten to new icon slugs that do not exist in v1.
Maintenance: Near-zero steady-state. No scheduled jobs, no runtime dependencies, no data lifecycle. The maintenance burden is concentrated entirely into Nova major-version transitions, which for this package means a forced breaking bump roughly once per Nova cycle.
Support: Thin. Single-maintainer GitHub project; changelog is release-note quality, not support-contract quality. We should treat upstream responsiveness as best-effort and plan for the possibility of a trivial internal fork. Mitigating factor: the package is small enough that forking or vendoring is genuinely cheap — this is a low-severity but non-zero abandonment exposure.
Scaling: Not applicable in the conventional sense. Icon assets add a bounded page-weight and build-time cost. The only scaling-adjacent consideration is build pipeline consistency — every property shipping Nova panels must be on a consistent icon package version to avoid visual drift between environments.
Failure modes:
currentColor changes alter existing appearance. Users notice; monitoring does not.nova ^3 blocks the whole upgrade. Loud, but can stall a release train.Ramp-up: Effectively none for engineers — the package is declarative usage of an icon field. The actual ramp-up cost sits with the Nova 4 upgrade itself, not this dependency. For the TPM, the required knowledge is narrow: know which repos are on which Nova major, and know that the two heroicon lines cannot coexist.
Recommendation: Approve v2.0.0 for properties already on (or imminently moving to) Nova 4, gated on (a) an inventory of persisted icon identifiers, and (b) a light/dark visual diff of representative panels. Hold Nova 3 properties on ^1.0 with an explicit pin and a tracked migration item. Do not treat this as a routine patch bump in automated dependency updates.
How can I help you explore Laravel packages today?