marshmallow/nova-fontawesome
marshmallow/nova-fontawesome adds a searchable Font Awesome icon picker field to Laravel Nova. Let editors choose icons visually, store the selected class on your model, and render icons consistently across your admin resources. Lightweight and easy to install.
Build vs. buy for an admin affordance. A searchable icon picker reads as a one-hour task and is not: icon search, live preview, empty/null handling, class-string validation, Vue asset packaging, and ongoing maintenance of a Nova field component. This package compresses that into a single Composer require. The buy case scales with the number of admin surfaces that need an icon — reuse cost approaches zero, while a custom field's cost repeats per resource.
Who owns iconography. Adopting the field is a decision to move icon selection off the engineering backlog and into marketing, ops, and support hands. Frame it as support-load reduction — a recurring stream of "can you swap this icon" tickets becomes self-serve configuration — not as a cosmetic nicety. If you cannot quantify that ticket volume, get a rough count from support before approving; that number is the business case.
A design-system commitment, made deliberately. Choosing this field is a soft commitment to Font Awesome as the admin icon vocabulary. It also forces a cheap-now/expensive-later call: store raw FA classes (fa-solid fa-house) exactly as the picker emits them, or store semantic keys and map them to icons in config. Raw classes ship fastest but couple the database to FA's naming, so any FA 6→7 rename becomes a data migration. Semantic keys survive version churn and enable per-tenant or white-label theming at the cost of one translation layer. Decide this at adoption, not by default.
Roadmap unlocks in the content model. Once an icon is an editable attribute rather than a hardcoded template concern, a class of engineering-owned features becomes non-engineer configurable: self-serve category and nav customization, per-tenant branding, status/badge configuration, themed customer portals. This is the cheapest enabler for that category; the alternative is usually a bespoke field plus a custom CRUD surface.
Upgrade-path budgeting. The package is Nova 5-only, and v3.1.0 added Laravel 13 support. That puts a line item in every future Nova major evaluation and, to a lesser degree, every Laravel major. The mitigating signal: the maintainer is tracking framework releases and merged an outside contributor's compatibility PR, so this is unlikely to be the dependency that pins your framework version — but verify at each major rather than assume.
Risk posture for admin tooling. Seven stars, zero dependents, one primary maintainer. That is acceptable for an admin-only, non-critical, easily replaced form field; it is not acceptable on a revenue path. Approving it is a statement that you are comfortable treating this as code you may need to fork — defensible only because the surface area is one field.
Scope clarity: this is presentation glue. It stores a class string and does not ship Font Awesome to your frontend, nor validate that a stored class still exists. Budget the frontend rendering and defensive output handling as your work, not the package's.
Adopt when all of the following hold:
Look elsewhere when:
For executives: This is a small, MIT-licensed add-on for the Nova admin panel we already license. It lets non-engineers pick icons from Font Awesome themselves instead of filing a ticket, removing a recurring category of low-value engineering requests at zero licensing cost and zero new vendor relationship — no SaaS subscription, no data leaving our systems, no integration contract to negotiate. Sustainability looks reasonable for its size: the latest release added Laravel 13 support from an outside contributor, a positive signal the project is being kept current. The risk is contained by scope — it is a single admin form field we could replace or fork in a day if the maintainer disappeared, and it never touches a revenue path.
For engineering: A Nova 5 field that swaps a text input for a searchable Font Awesome 6/7 picker and persists the chosen class string on a nullable column. One Composer require replaces roughly 1–3 days of custom-field work, including the Vue component and asset packaging. Treat it as owned-by-adoption: pin the version, centralize the field definition in a trait before the third copy, enforce a regex rule on the stored class, render defensively at every output site (never interpolate the raw column), and keep a Text::make('Icon') fallback behind a flag so a broken package release cannot leave editors with an unusable form. Note that it does not ship FA to your frontend or validate the class still exists — that work stays with us.
How can I help you explore Laravel packages today?