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 Ajax Select Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Product Decisions This Supports

  • Build vs. buy for admin search fields. The recurring "searchable dropdown" requirement in internal tools — pick a customer, product, tenant, or enum-backed status from a large set — is normally a week of custom Nova field code plus a route, a controller, authorization checks, and client-side search that falls over past a few thousand rows. This package turns that into a config line. Treats it as a commodity, not a differentiator.
  • Feature scoping for admin/back-office roadmap. Unlocks dependent-field UX (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.
  • Data-volume-driven UX decisions. Server-side search moves the ceiling from "whatever fits in a form payload" to "whatever the DB can index." Products can now expose lookup fields over 10k–1M+ row reference tables without a bespoke autocomplete service.
  • Multi-tenant admin architecture. 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.
  • Reducing duplicate schema surface. Labels on index and detail eliminate the shadow Text field that 1.x forced alongside every select — fewer fields to maintain, fewer places for label logic to drift.
  • Validation consolidation. Automatic membership validation backed by a single query replaces materialized Rule::in lists. Removes a class of "the rule list and the options list disagree" bugs and the code that generated those lists.
  • Security posture as a purchasing input. No package-owned routes; resolution rides Nova's already-authorized field-sync request. Fewer endpoints to threat-model, review, and keep patched — a concrete point in favor versus a homegrown solution with a public search endpoint.
  • Dependency hygiene / consolidation decision. 2.0.0 explicitly requires removing 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.

When to Consider This Package

Adopt when:

  • The product runs Laravel Nova 5 and is on PHP 8.3+ / Laravel 12 or 13. Below that, only 1.x is available and this release's core benefits (dependency composition, modals, panels) do not apply.
  • Option sets are too large or too volatile to ship in a form payload — relation-backed, frequently-edited, or tenant-scoped data.
  • Requirements include dependent or conditional selects; the parent() → Nova dependency rewrite is the headline fix and the reason to move off 1.x.
  • The select must appear in action modals, pivot forms, or panels — 1.x simply does not render correctly there.
  • You want authorization to stay inside Nova rather than maintaining new routes and policies for a field.
  • Multi-tenancy means option caches must be scoped, not global.

Look elsewhere when:

  • Not on Nova — Filament, Livewire, or custom Inertia admin UIs get nothing from this. The Nova 5 license is a separate paid dependency and a real line item.
  • You need select behaviors the release notes don't claim: multi-select, tag creation, grouped/optgroup rendering, or client-side "create new option" flows. Verify against the docs before committing; don't assume parity with a full autocomplete component.
  • Options are small and static — a plain Nova Select with a hardcoded array is cheaper to own than any package.
  • Laravel 12/13 is a hard constraint you can't meet yet; stay on 1.x and accept the known dependsOn() and modal gaps, or wait.
  • You depend on 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.
  • You need a vendor with an SLA. This is a single-maintainer package pinned to Nova's field API; treat it as a convenience wrapper, not infrastructure.

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.

How to Pitch It (Stakeholders)

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.

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.
adachsoft/changelog-linter
adachsoft/collection
payerurl/telegrambot-crypto-payment-instant-payout
dskripchenko/laravel-hybrid-search
riorizkyrainey/lara-ced
mehedimi/static-vel
zharp/zharp
nonsapiens/bigquery-model-sync
lgu-bayambang-ict-office/lgu-laravel-development-standards
andydefer/laravel-support
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel
draftsmaninc/draftsman
square-bit/laravel-volition
himito/laravel-mailman
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast