alvinhu/nova-child-select
Laravel Nova field that adds cascading, dependent select dropdowns to your forms. Child options update dynamically based on a parent field's selection, so you can build linked selects (like country then city) with a simple fluent API and no custom JavaScript.
Architecture fit. The package is a Laravel Nova custom field: a Composer-installable package that registers a Vue field component and exposes a fluent PHP API (ChildSelect::make('...')) chained alongside Nova's native field methods. Architecturally this is the canonical Nova extension pattern — no migrations, no domain services, no middleware. It is a thin presentation-layer dependency whose only real contract is the Nova field lifecycle (resolve, fill, rules, jsonSerialize) plus an asset bundle. That means it slots into any Nova resource file without touching application code, but it also means it carries zero business logic — dependent-option filtering, parent/child integrity, and validation remain the application's responsibility.
Integration feasibility. Feasible but conditional on the Nova major version. The repository is archived, which is the dominant signal here: 20 stars and an overall score of ~1.49 indicate a low-adoption, unmaintained artifact. Nova 4 and 5 moved to Vue 3 and Inertia, while packages of this vintage typically target Vue 2 / Nova 2–3. Before any commitment, confirm the composer.json constraint against the licensed Nova version in use. Composer will usually refuse the install outright on a Nova 4+ app — that's a clean failure, but it also means the package is likely unusable as-is on a current stack.
Technical risk.
Rule::exists scoped to the parent is mandatory regardless of the package.dependsOn chains longer than two levels) is unverified.Key questions.
relatable selects?BelongsTo::dependsOn(), which covers a meaningful subset of the same use case?Stack fit. Only viable on a Laravel + Nova stack where the licensed Nova version matches the package's constraint. If the app runs Nova 4/5, treat this repository as a reference implementation, not a dependency — read the component, port the pattern, ship it as an internal field. If the app is pinned to Nova 3, it's installable today but on a stack you should already be planning to leave.
Migration path. Two credible routes:
composer require from a VCS path or fork into a private package registry, pin the commit, and accept maintenance. Appropriate only if the team already has Vue/Nova field experience and the feature is load-bearing.dependsOn() on relationship fields already handles the common cascading case. For everything else, a bespoke ChildSelect field is on the order of a few hundred lines of Vue plus a small PHP field class — cheaper to own than an abandoned dependency, and it removes the version-matrix risk entirely.Compatibility. Verify the full matrix before scoping: PHP version, Laravel version, Nova version, Node/build toolchain used for the published assets. Since assets are typically committed to the package, a mismatch between the shipped bundle and the app's Nova asset pipeline surfaces as a broken or unstyled field at runtime, not at install time — plan a smoke test in staging.
Sequencing.
dependsOn(). Default to the cheapest option that removes the archived dependency.Maintenance. Effectively 100% internal from adoption. There is no upstream to receive fixes from, so budget recurring time for Nova upgrades — every Nova major release is a potential breaking change to the field component, and this package will not track it. That cost is small per upgrade but unbounded in aggregate and invisible until the upgrade happens.
Support. Community-only, and the community is 20 stars deep. No issue triage, no documented roadmap, no maintainer response path. Internal engineers become the sole escalation tier, including for questions the original author would have answered in an afternoon.
Scaling. Two pressure points. Payload size: inline option maps are serialized into the Nova field response, inflating index and detail payloads as child cardinality grows. Request volume: API-driven children multiply per-form requests on every parent change, which is fine at 10 concurrent editors and painful at 100. Neither is disqualifying, but both need a number before launch, not after.
Failure modes.
Ramp-up. For a developer who has authored a Nova custom field before: a few hours to read the source and be productive. For a team without Vue/Nova field experience: this is a poor first exposure, because they'd be learning the extension pattern and reverse-engineering an unmaintained implementation with no tests or docs to lean on. Factor that into the build-vs-fork decision — the internal build is often the faster ramp, since you write it against Nova's documented field API rather than reading someone else's.
Recommendation. Do not adopt as a standing dependency. Use it as a reference implementation, or fork it into a pinned private package only if the Nova version matches cleanly and the feature is genuinely load-bearing. In parallel — and regardless of the UI path chosen — enforce parent/child integrity server-side, since that is the only part of this problem the package definitively does not solve.
How can I help you explore Laravel packages today?