Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Nova Select Plus Laravel Package

ziffmedia/nova-select-plus

An enhanced Laravel Nova select field with searchable, AJAX-loaded options and dependent selects. It keeps resource forms fast when dealing with large option sets or dynamic relationships, using a familiar Nova field API.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit ziffmedia/nova-select-plus is a drop-in Laravel Nova field, not a standalone component. It slots into the existing Nova resource layer as a subclass of Nova's base Field plus a compiled Vue component registered through Nova's asset pipeline. That means it fits only where Nova already fits: admin/back-office panels in a Laravel monolith or a modular monolith with Nova installed as the operations surface. It is not a candidate for public-facing UI, API layers, or headless architectures. The architectural value is narrow but real — a searchable, optionally remote-loaded select resolves a genuine UX gap in Nova's stock Select field for relationship fields with large option sets (users, tenants, SKUs, accounts). If the product's admin surface is Nova, this is a legitimate "buy" decision; if Nova is being deprecated or wrapped behind an SPA, this package should be skipped entirely. v2.0.2 does not change this conclusion in either direction — it is a styling and integration fix, not an architectural change.

Integration feasibility Low effort. Composer install, register the field in app/Nova, swap Select::make() for SelectPlus::make() on the target fields, and ship. No migrations, no schema changes, no service provider bootstrapping beyond Nova's auto-discovery. The realistic effort is concentrated in two places: (1) reworking option sources that currently return large eager-loaded arrays into a paginated/searchable endpoint, and (2) regression-testing index/detail forms where the field is used, particularly around validation rules and displayUsingLabels-style behavior. A single engineer can typically evaluate it in a day and integrate it across a handful of resources in under a sprint. The v2.0.2 fix is localized to Form.vue and field styling, so it does not raise integration effort — but it also means the field's reactive behavior has changed recently, which pushes dependsOn regression testing from "nice to have" to "required" in the pilot.

Technical risk Moderately elevated, and it is version-drift risk rather than code-quality risk. The picture is materially better than the previous assessment, but not resolved. Updated signals:

  • Release cadence is sporadic, not abandoned. v2.0.2 is the first release since April 2023, and it carries a substantive correctness fix (DependsOn integration on the Form.vue side) plus a maintainer-authored styling improvement. That is evidence of low-frequency but responsive maintenance — someone upstream still reads issues and merges PRs. Treat cadence as "slow, unpredictable, not dead."
  • dependsOn is now a known-good surface, not a known gap. The previous assessment flagged dependsOn interaction as an open risk. A dedicated fix landing means the maintainers are aware of and invested in Nova's reactive-field contract. This meaningfully de-risks one of the three things that were most likely to break, though it must still be verified against our Nova major.
  • No version support statement in the notes. v2.0.2's changelog does not mention Nova or Laravel version targets. A DependsOn fix strongly implies a recent Nova major is in play, but implication is not evidence. Absence of an explicit compatibility statement is now the single biggest unknown.
  • Still zero dependents, still ~low-stars. No ecosystem pressure testing. You will continue to discover edge cases first, and there is no crowd-sourced signal that this works on your stack.
  • Still single-maintainer / agency-backed. Ziff Media maintains it as an internal tool turned public, with occasional community PRs (one new contributor in this release). Nova is closed-source and paid, which suppresses the volunteer contributor pool permanently.

Offsetting all of it: MIT license means the small surface area (one field class, one Vue component) is forkable and self-patchable, and this release actually reinforces that — the changes are small, legible, and the kind of thing we could own. The blast radius of failure is confined to specific form fields, not data integrity. This remains a contained risk, not a platform risk.

Key questions

  • Which exact Nova and Laravel versions is v2.0.2 tested against, and does its DependsOn fix work on the Nova major we are pinned to? This is now the single highest-value question and should be answered by a branch smoke test, not by reading the source.
  • Does the v2.0.2 Form.vue fix change behavior for fields that don't use dependsOn, or for nested dependsOn chains we already rely on?
  • Does the package's remote/async option loading fit our authorization model, or will it leak option lists (e.g., all tenants) to users who shouldn't see them?
  • How does it interact with Nova's validation, onlyOnForms, and resolveUsing/displayUsing hooks we already rely on?
  • Is the field's stored value format identical to Nova's stock Select, so an existing column needs no migration and a rollback is a one-line change?
  • Given v2.0.2 landed after a long gap, is the project entering a maintenance window or was this a one-off? Any signal (issue triage, roadmap, Nova 5 branch) changes the fork calculus.
  • What is our fallback if upstream goes quiet again — is forking and owning a ~hundreds-of-lines Vue component acceptable to the team?

Integration Approach

Stack fit Requires Laravel + Nova + a build pipeline that ships Nova's compiled assets. It assumes Nova's Vue runtime and its Tailwind-ish component styling; visual consistency with the rest of the Nova panel is inherited, not guaranteed — and v2.0.2 touches form field styling, so the pilot should include a visual review against surrounding fields rather than assuming visual parity holds. It does not fit Inertia/Livewire-first admin panels, Filament-based stacks, or anything where Nova is absent. For teams already on Nova, the fit is native — one composer dependency, no new runtime, no new datastore, no sidecar service.

Migration path Adopt field-by-field, not package-wide. Identify the highest-pain selects first — typically relationship fields with hundreds-plus options where Nova's stock dropdown becomes unusable. For each: keep the stock Select in place, add SelectPlus behind a feature flag or a per-resource toggle, compare rendered output and submitted payloads, then swap. Because the stored value should be format-compatible with stock Select, rollback is a revert of a single line — treat that as a hard acceptance criterion before rollout. If remote loading is used, stand up the search endpoint alongside the existing option array so both paths exist during the transition. For any field using dependsOn, run the dependency chain explicitly in the pilot rather than assuming v2.0.2 fixed it for our Nova version.

Compatibility Still the gating workstream, and v2.0.2 raises rather than lowers its priority — the release changes reactive-field behavior and styling, which are exactly the surfaces that differ across Nova majors. Before broader adoption, build a compatibility matrix: Nova major × Laravel major × PHP version, validated with a smoke test that (a) renders the field on create and update forms, (b) submits and persists a value, (c) resolves the display label on index and detail, (d) honors required/nullable validation, (e) survives an async option search round trip, and (f) — newly mandatory — drives a dependsOn parent/child pair, since that code path just changed. Pin the package to an exact version (2.0.2, not ^2.0); do not allow floating constraints. If the smoke test fails on our Nova version, the decision moves from "integrate" to "fork and patch" or "do not adopt," and that fork cost must be estimated before, not after, the first resource depends on it. Positively: a maintainer-authored DependsOn fix shrinks the expected size of that fork if we need one.

Sequencing

  1. Spike (1–3 days): install v2.0.2 in a branch, run the compatibility matrix including the dependsOn case, confirm value-format parity and rollback safety.
  2. Go/no-go (with fork-cost estimate as the alternative). Decide between adopt-as-is, fork-and-own, or build a thin in-house field. Note that the fork's starting point is now v2.0.2, which is a better baseline than the 2023 code.
  3. Pilot: convert one low-traffic resource that uses dependsOn if possible, ship to internal users, monitor for a release cycle.
  4. Search-endpoint hardening: if remote loading is adopted, add authorization scoping, pagination caps, and rate limiting before the second resource goes live.
  5. Rollout: convert remaining target fields in batches, keeping the revert line documented in each PR.
  6. Ownership handoff: assign a named maintainer and record the fork/patch procedure in the runbook even if we never fork.

Operational Impact

Maintenance Revise the posture from "unmaintained" to "low-cadence, single-vendor." v2.0.2 demonstrates the project is not dead — a maintainer merged a real fix and took a community contribution — but it also demonstrates that the gap between releases is measured in years, so it cannot be relied on for time-sensitive compatibility work. Keep the "vendored responsibility" posture: assume we will apply our own patches for future Nova or Laravel compatibility. Budget roughly a few engineer-days per Nova major upgrade to validate and, if needed, patch; v2.0.2 reduces the risk that the DependsOn path specifically is the thing that breaks, but does not reduce the budget. The fork should live in a private repository or a VCS composer entry from day one, forked at v2.0.2, so that a patch is a normal PR rather than an emergency vendor-directory edit. Keep the diff against upstream minimal and documented; a heavily modified fork is a worse long-term asset than a purpose-built field.

Support No vendor SLA, no paid support, no meaningful issue throughput — this release does not change that, though it does show the issue tracker is not entirely unread. Internal users reporting "the dropdown doesn't load" will still route to our team. Mitigate with a short internal note: what the field is, which resources use it, how to revert to stock Select, and who owns it. Treat community answers as unavailable and write our own troubleshooting entry for the predictable cases — remote endpoint failure, Nova asset cache staleness, and (newly worth documenting) dependsOn chains that stop re-rendering after a deploy, since that is now a recently-churned code path.

Scaling Well-behaved at the low end, and the remote-loading path is precisely what makes it scale for large option sets — a paginated search endpoint beats eager-loading thousands of options into a page payload. Two scaling limits to watch: the search endpoint becomes a per-keystroke query source, so it needs debouncing, a result cap, and an index on the searched columns; and per-instance asset compilation grows trivially with one more field component, which is a non-issue. Horizontal scaling is unaffected — there is no new stateful service. Concurrency risk sits entirely on the search endpoint, not on the field itself. dependsOn chains add client-side request amplification on nested fields; cap and debounce there too.

Failure modes

  • Nova upgrade breaks the component: still the most likely and highest-impact; symptom is a blank or non-interactive field on affected forms, blocking edits to those resources. v2.0.2 marginally lowers this for the dependsOn path but does not change the category. Mitigation: compatibility gate before every Nova bump, plus a tested one-line revert.
  • Recent-style regression from v2.0.2: the form field styling changes are cosmetic in intent but land in shared form markup; a visual review in the pilot is the mitigation. Low severity, easy to catch.
  • Asset cache mismatch after deploy: stale compiled assets cause inconsistent rendering across users — and a field that changed in the latest release is a more likely victim of a stale-asset mismatch than a stable one. Mitigation: ensure nova:publish/asset build is in the deploy pipeline and that deploy ordering is asset-before-traffic.
  • Remote endpoint failure or slowness: degraded UX, potential form blockage if the field is required. Mitigation: timeout, retry, and a documented fallback to a static option list; make the field non-blocking where possible.
  • Authorization leakage in search results: the quietest and most serious — an unscoped endpoint returning options the user shouldn't see. Mitigation: scope queries by the authenticated user's policy from the first commit; add a test that asserts a restricted user cannot retrieve out-of-scope options.
  • Upstream goes quiet again: low direct impact given MIT and small surface area, but it strands the dependency graph. Mitigation: fork at v2.0.2 on day one, as above.

Ramp-up Near-zero for anyone who knows Nova fields — the API surface mirrors stock Select, so developers can be productive in an hour. The real ramp-up is operational, not technical: on-call needs to recognize this component as a distinct failure domain, and the search endpoint (if adopted) is a new backend surface that needs monitoring, auth review, and query-performance ownership. A short internal runbook plus the compatibility matrix covers it. Do not let the low code-level complexity obscure the fact that this is a sporadically-maintained third-party component inside a paid, closed-source framework — v2.0.2 is a welcome signal but not a guarantee of future responsiveness, and the governance cost, not the engineering cost, is what needs a named owner.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle
adachsoft/api-version-bundle
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager