patriziotomato/select-or-custom
A Laravel form field that lets users pick from a predefined list or enter their own custom value. Ideal for select inputs that need an "other" option, with simple setup for Blade forms and Filament-style components.
Architecture fit. This is not a general-purpose Laravel package — it is a Laravel Nova field. Its entire surface area is a PHP Field subclass plus a compiled Vue component that Nova loads into its SPA. That means the addressable footprint is limited to applications that (a) run Laravel, (b) hold a paid Nova license, and (c) have an admin resource where a "pick from list or type your own" input is the correct UX. Outside Nova it is inert; inside Nova it is a leaf-node UI dependency with no service-provider magic, no config, and no runtime hooks. Architecturally that is the safest possible shape for a third-party package — it cannot interfere with request lifecycle, queues, or the container — but it also means the value is entirely concentrated in a small piece of front-end behavior we could reproduce in-house in well under a day.
Integration feasibility. Mechanically straightforward: composer require, register the field on a Nova resource, publish assets if required, and define options(). The real friction is version alignment. Nova's front-end moved to Vue 3 with Nova 4, and Nova 5 changed the asset/build toolchain again; a field last released in February 2023 is very likely pinned to a Nova 4-era toolchain. Before committing we need to read the package's composer.json constraints and the compiled component's Nova dependencies, and confirm whether the resolve/fill/displayUsing paths behave correctly across index, detail, and form views.
Technical risk. High, and mostly non-technical in origin. Zero stars, zero dependents, single maintainer, no release in over two years — there is no evidence of production use anywhere, which means we would be the first real integration test. The package name (select-or-custom) and repository name (select-or-text) diverge, which is a small but telling signal of low maintenance discipline and complicates discovery, Packagist verification, and future fork/rename work. There is no visible CI, no security policy, and no dependency-update cadence. Abandonment should be assumed as the base case, not the risk case.
Key questions.
null, empty string, and "custom with no text" distinguishable?Stack fit. Only consider this if the target application is already on Nova and the team has accepted Nova as the admin layer. If the admin surface is Filament, Backpack, or hand-rolled Blade, this package is irrelevant — stop here and treat the requirement as "a select with an 'Other' escape hatch," which is a standard form pattern.
Build-versus-buy. Given the adoption signals, the honest recommendation is to build. A Nova field that renders a <select> plus a conditional <input> and resolves to a single string is a small, well-understood piece of work: one PHP class, one Vue component, one npm run prod. Owning ~150 lines is cheaper over a two-year horizon than owning a dead upstream. If the team wants to move fast, fork the repository rather than depending on it — same code, but the dependency is now internal and reviewable.
Migration path. If already installed elsewhere in the estate, plan the exit at the same time as the entry: fork to an internal namespace, pin the Nova constraint, add a smoke test, and record the fork in the dependency inventory. If this is greenfield, prefer Nova's native Select field combined with a companion text field gated by dependsOn, or a Select whose options are supplemented at runtime — both avoid the third-party dependency entirely and keep the value semantics explicit.
Compatibility and sequencing.
composer.json constraints against the project's Laravel and Nova versions; do not install on faith.Maintenance. Effectively zero upstream maintenance; assume 100% internal ownership from day one. Budget a recurring line item for "fork survives Nova upgrades," because the Vue asset is the most upgrade-fragile part of any Nova installation. A single maintainer with a two-year release gap is not a support relationship — it is a code snapshot.
Support. No community, no issue triage, no security advisories to subscribe to. Any defect becomes an internal ticket with no upstream escalation path. This is acceptable for a presentation-layer field and unacceptable for anything touching authorization, validation, or persisted business rules.
Scaling. Negligible. The field executes only inside authenticated admin requests and performs no queries, caching, or I/O beyond the form round-trip. It will not be a throughput or capacity consideration at any realistic admin scale. The only scaling concern is organizational: one more bespoke dependency per additional Nova app multiplies the fork-maintenance surface.
Failure modes.
Ramp-up. A Laravel developer with Nova experience can integrate and validate this in roughly half a day; the fork-creation and upgrade-testing overhead adds another day. The misleading cost is the ongoing ownership, not the initial setup. For a single admin screen the math favors building in-house; for a fleet of Nova apps with a hard deadline it may still be worth the fork, provided that decision is made explicitly rather than by default.
How can I help you explore Laravel packages today?