gabrielesbaiz/nova-ajax-select
Nova Ajax Select is a Laravel Nova field that adds AJAX-powered searchable select inputs, loading options asynchronously so forms can handle large datasets without bloating the page. It supports remote search, custom endpoints, and a smooth Nova-native experience.
dependsOn(), hide(), show(), readonly()) inside panels, pivot forms, and action modals — all broken in 1.x. Any roadmap item gated behind "our admin can't do X in a modal" becomes cheap to ship.cacheScope() is an explicit affordance for tenant-specific option sets — a signal that per-tenant caching is a first-class concern rather than something to bolt on, and a guardrail against the classic cross-tenant cache-leak bug.Text field that 1.x forced alongside every select — fewer fields to maintain, fewer places for label logic to drift.Rule::in lists. Removes a class of "the rule list and the options list disagree" bugs and the code that generated those lists.alexwenzel/ajax-select (colliding asset handle, silently unserved bundle). If both are in the codebase today, this release is a forcing function to pick one — a decision to schedule, not defer.Adopt when:
parent() → Nova dependency rewrite is the headline fix and the reason to move off 1.x.Look elsewhere when:
Select with a hardcoded array is cheaper to own than any package.dependsOn() and modal gaps, or wait.alexwenzel/ajax-select for other fields and can't migrate those in the same window — the asset-handle collision means one of the two silently fails to render.Upgrade note for the decision log: 2.0.0 is a non-breaking upgrade — get(), parent(), NovaAjaxSelect, and the {value, display} payload all still work, with deprecations targeted at 3.0. That means no forced migration now, but also a defined cleanup backlog: delete the custom routes, drop shadow detail Text fields, and strip canSee() workarounds that only existed because dependsOn() never fired. Budget that as cleanup work, not migration risk.
For executives: This is a small, low-risk upgrade that removes custom code from our admin panel. Today, building a searchable picker over a large dataset means writing and maintaining our own endpoint, permissions, and validation — and it still breaks inside modals. This release replaces that with a supported configuration, resolves options on the server so the UI stays fast as the dataset grows, validates submissions automatically, and adds no new endpoints for us to secure. Cost is a routine dependency bump; 2.0.0 is backward compatible, so there is no forced rewrite. The trade-offs to acknowledge: it requires Nova 5 (already licensed separately) plus PHP 8.3 and Laravel 12/13, and it's maintained by a single author, so we should treat it as a convenience layer with an exit path rather than a platform bet. Net: less bespoke admin code, faster internal tooling, one fewer place for a data-leak or validation bug to hide.
For engineering: This is the release that makes the field a first-class Nova citizen. parent() was a bespoke Vue watcher walking the component tree; it's now a proper Nova dependency, which is why dependsOn(), hide(), show(), readonly(), panels, pivot forms, and action modals all start working. Resolution happens server-side from a closure, Eloquent model, relation, or backed enum, with search across named columns, index/detail labels, membership-query validation instead of a materialized Rule::in, and optional caching with cacheScope() for tenant isolation. No package routes — everything rides Nova's existing authorized field-sync request. Two things to action: (1) if alexwenzel/ajax-select is installed anywhere, remove it before rollout — both registered the same asset handle and Nova's ->first() resolution means one bundle is silently dropped; (2) the 2.0 surface is additive, but get(), parent(), and the {value, display} payload are deprecated for 3.0, so the upgrade guide's cleanup — deleting routes, dropping shadow detail fields, removing canSee() workarounds — should land in the same sprint to avoid carrying dead code forward.
How can I help you explore Laravel packages today?