marshmallow/nova-tooltip-field
marshmallow/nova-tooltip-field is a Laravel Nova field that adds configurable tooltips to resource fields, showing helpful hints on hover or click. Use it to clarify data, explain icons, and guide users without cluttering your admin UI. Supports custom text and placement.
Architecture fit. marshmallow/nova-tooltip-field is a micro-package that does one thing: it registers a Laravel Nova field whose Vue component wraps Nova’s own stock Tooltip component. Architecturally it sits entirely inside the presentation layer of the Nova admin panel — no service provider business logic, no persistence, no queue/event surface, no external I/O. That is the best possible shape for a low-risk dependency: the blast radius is confined to how a single resource renders in Nova’s index/detail/form views. The important caveat is what it depends on. Nova’s internal Vue component library is not a documented public API; it ships inside a commercial, closed-distribution package. The moment this field renders Tooltip directly, it takes a hard coupling to Nova’s internal component names, props, and slot signatures. That coupling, not the package’s own ~100 lines of code, is the real technical characteristic to price in.
Integration feasibility. Straightforward: composer require marshmallow-packages/nova-tooltip-field, confirm the service provider is auto-discovered (or register it), and use the field class in a Nova::resources() field list. No migrations, no config publishing, no schema changes — a tooltip field is presentational and should not persist a column. The main feasibility gate is version alignment: Nova major versions have historically reshuffled the front-end stack (Vue 2 → Vue 3, Mix → Vite), which is exactly the class of change that breaks a component wrapping an internal UI primitive. Feasibility is therefore "yes, today" rather than "yes, durably."
Technical risk. Ranked:
npm install && npm run build step. If assets are precompiled, you inherit whatever Vue/Nova version they were built against; if not, you inherit a front-end build in your deploy pipeline.v-html is a stored-XSS vector inside an authenticated admin surface.Mitigating factor: MIT license, trivial code surface. If the maintainer disappears or a Nova upgrade breaks it, forking and fixing is a same-day task, not a re-platforming.
Key questions.
composer.json, and does that cover our pinned Nova version — including the next one we plan to adopt?helpText / ->help() does not? If the delta is "tooltip on index columns" only, that is a very small delta.Stack fit. Native fit for any Laravel + Nova application. Requires a licensed Nova install (which means a private Composer repository credential in composer.json and in CI). If our CI cannot resolve Nova’s private repo, this package’s test path is blocked before we start — that is a prerequisite to validate, not an afterthought. PHP and Laravel constraints should be checked against our supported matrix; a package this small often pins loosely and needs an explicit compatibility assertion.
Migration path. Effectively zero-cost and fully reversible, which is the strongest argument in its favor. Nothing to migrate: no tables, no data, no config, no stored state. Adoption means adding a field to one or two resource definitions; removal means deleting those lines and running composer remove. That reversibility lowers the cost of a pilot and makes a "try it, fork it, or drop it" decision cheap. The realistic migration is from ad-hoc inline HTML, helpText, or custom Blade partials to this field — a consistency and maintainability win, not a functional one.
Compatibility. The load-bearing constraint is the Nova major version, not PHP or Laravel. Treat Nova upgrades as a required regression test for this field specifically: render an index, a detail, and a form containing it, and check the browser console. Nova tool packages also frequently depend on the host app’s Vite/Mix configuration; confirm whether assets are published and whether they collide with our existing nova-components build.
Sequencing.
composer.json, the field class, and the Vue component. Confirm escaped rendering, no persistence, and declared Nova constraints. Check the 2026-03-18 tag and changelog.helpText, and does it survive a nova:assets rebuild and a deploy?helpText is small, replicate in-house instead — a custom Nova field wrapping the same internal component is roughly 50–100 lines and gives us ownership of the coupling without the third-party dependency.The honest TPM framing: this is a convenience micro-package. Adopt it only where it demonstrably removes duplicated markup, and treat in-house replication as a live alternative rather than a fallback.
Maintenance. Near-zero routine code maintenance, but non-zero coupling maintenance. The package’s health is a function of a maintainer we have no relationship with and an upstream we do not control (Nova). Because it is MIT and tiny, the correct operational posture is "fork-ready, not support-dependent": register it in the dependency inventory, assign a named internal owner, and pre-agree that a Nova-upgrade break triggers a fork-and-patch rather than a vendor escalation. Budget roughly a day of engineering per Nova major upgrade for regression testing and potential patching.
Support. The weakest dimension. Three stars and zero dependents means there is no issue-trail ecosystem to lean on — every problem is either self-solved or forked. No SLA, no security advisory channel, no guaranteed response. For an admin-panel-only, non-customer-facing field inside an already-licensed commercial product, that is tolerable; for anything on a revenue path it would not be. The compensating control is that the code is small enough to fully review in under an hour — do that review as a gate, and re-review on each version bump.
Scaling. Negligible. Rendering a tooltip is a client-side concern with no query cost, no N+1 exposure, no cache or queue involvement, and no effect on API response sizes. The only scale-adjacent concern is front-end asset weight — a duplicate bundled Vue component adds kilobytes, not a scaling problem. Ten tooltips on an index or one makes no measurable difference to page performance.
Failure modes. Ranked by likelihood and impact:
nova:assets overwrites them on deploy. Mitigation: verify asset behavior in the sandbox proof and after a full deploy rehearsal.Ramp-up. Minimal — under an hour for a Nova-fluent developer, mostly reading the field class. Two things need to be documented internally because they are non-obvious: (1) the field is display-only and must not be treated as a form input, and (2) it tracks Nova’s internal component API, so Nova upgrades require a render check. Overall operational profile: low ongoing cost, low-to-moderate tail risk concentrated almost entirely in Nova upgrade events, and a cheap, well-understood exit (fork or remove) that keeps the downside bounded.
How can I help you explore Laravel packages today?