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 Multiselect Checkboxes Laravel Package

mohkoma/nova-multiselect-checkboxes

A Laravel Nova field for selecting multiple options with checkboxes, offering a clean, searchable, and customizable way to manage many-to-many relationships and long option lists inside your Nova resources and forms.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • This is a single-purpose Nova field package: a Laravel service provider that registers a custom Vue field component, plus a model-side convention for storing an array of selected values (typically a JSON column with an array cast). The footprint is narrow — presentation layer plus serialization — so it is architecturally "safe" in the sense that it does not touch application domain logic.
  • The real fit question is redundancy. Nova ships Multiselect (searchable, tag-style) and BooleanGroup (checkbox list) natively, and a "dropdown with checkboxes" is a UX hybrid of the two. The package's differentiated value is cosmetic, not functional.
  • The package was released against the Nova 2 era (last release 2020-02-19). Nova's custom-field contract and asset pipeline changed materially in subsequent major versions, and custom field packages had to be rebuilt to keep working. A 2020 artifact is, at best, unverified against a current Nova install and at worst non-functional.

Integration feasibility

  • Mechanically simple: composer require, add the field to a NovaServiceProvider/Resource fields() method, publish and serve the compiled dist/js/field.js, ensure the underlying column is JSON/text and cast to array on the Eloquent model.
  • The friction points are all downstream of that: no composer.json constraint evidence for PHP 8.x, no evidence of CI or asset build reproducibility, no tests, and no guarantee the Vue component mounts under the current Nova bootstrapping (Nova.booting callback signature, mixins, and asset publishing conventions have moved).
  • Searchability, sorting, and filtering on the stored array are not provided and would need custom filterable/sortable implementations — a nontrivial Nova extension surface.

Technical risk

  • Highest risk is abandonment, not code quality. 3 stars, 0 dependents, a single maintainer, and no release in roughly five years means zero upstream defect fixes, zero security response, and no compatibility maintenance. The 0.015 score reflects essentially no ecosystem validation.
  • Second risk is silent breakage on Nova upgrade: field components fail loudly (blank field, console error) or, worse, degrade to a raw string and corrupt the stored shape.
  • Third risk is supply chain hygiene: an unmaintained Composer dependency will eventually be flagged by composer audit/abandoned-package checks, creating recurring noise and audit exceptions.

Key questions

  1. Which Nova major version are we on today, and what is the committed upgrade path over the next 24 months?
  2. Does the actual UX requirement survive contact with native BooleanGroup (in a modal/panel) or Multiselect? If yes, this package is unnecessary.
  3. What is the persisted data shape, and is there existing data to migrate or coexist with?
  4. Are we prepared to own a fork (private vendor repo, CI, asset build) or do we require an actively maintained dependency?
  5. What is the license and attribution obligation if we fork?

Integration Approach

Stack fit

  • Fits a conventional Laravel + Nova monolith with a Blade/Vue admin surface. No queue, no external service, no runtime dependency at request time — the field is client-side and the value round-trips as part of the resource payload.
  • Does not fit a headless or API-first posture, since the value is only meaningful inside Nova's form layer.

Migration path

  • Preferred path: replace, don't adopt. Evaluate BooleanGroup for bounded option sets and Multiselect for large ones; if the dropdown-checkbox affordance is a hard product requirement, build a small in-house Nova field (a few hundred lines of Vue plus a service provider) that we own outright. Estimated effort: 3–5 engineer-days including tests.
  • Fallback path: fork and vendor. Copy into a private repository, widen the Composer constraints, rebuild assets against the current Nova tooling, add a smoke test that renders the field in a Nova resource, and pin the fork.
  • Avoid: installing the upstream package directly into a shared codebase with no ownership assigned.

Compatibility

  • Verify PHP version, Nova version constraint, and whether the compiled asset works with the current Nova asset pipeline before any resource code is written.
  • Data-layer compatibility matters more than UI: confirm JSON vs. text column, cast behavior, null/empty handling, and how the value is rendered in index/detail views (the package likely only supplies the form component).
  • Confirm behavior with dependent fields, validation rules (array, in:), and Nova's ->onlyOnForms() / ->hideFromIndex() modifiers.

Sequencing

  1. Week 1 — Confirm Nova version and upgrade roadmap; write the UX acceptance criteria for the field.
  2. Week 1 — Side-by-side prototype of native BooleanGroup/Multiselect against the criteria. If it passes, stop; deprecate the package idea.
  3. Week 2 — If it fails, timebox a 2-day spike: fork the package, rebuild assets, render it in a scratch resource, and record exactly what breaks.
  4. Week 2 — Decision gate: fork-and-maintain vs. build in-house. Default to in-house unless the spike shows the fork is trivially viable.
  5. Week 3 — Implement, add a Nova-level rendering test, document the data shape, and ship behind a single resource before broadening.

Operational Impact

Maintenance

  • Upstream maintenance is effectively zero. The moment we install it, we own it: every Nova upgrade becomes a compatibility review of this field, and every Laravel/PHP bump becomes a Composer constraint edit. Budget 1–2 engineer-days per quarter plus a fixed line item in each Nova upgrade. A fork doubles this because we also own the asset build and dependency updates.

Support

  • No maintainer SLA, no issue triage, no documentation beyond a README. Internal runbook is mandatory: where the component lives, how to rebuild assets, how the value is stored, and the exact Nova version it was validated against. Any support question becomes an internal escalation.

Scaling

  • Runtime cost is negligible — rendering is client-side and the payload is a small array. The scaling limit is option-set size: a dropdown with thousands of options degrades browser performance and produces an unusable scroll surface. If option sets are large, require server-side search (async option loading) rather than shipping the full list to the client. No database or queue implications.

Failure modes

  • Upgrade break: Nova bump silently blanks the field or errors in console; users cannot save the resource. Mitigation: pin Nova version, smoke test in staging.
  • Data shape drift: component posts a string instead of an array (or vice versa) and the cast writes malformed JSON; reads return null and selections appear lost. Mitigation: explicit validation rule and a round-trip test.
  • Asset publish failure: compiled JS not served after deploy, producing a blank field with no server-side error. Mitigation: include field rendering in deploy smoke checks.
  • Audit/compliance flag: package marked abandoned on Packagist, failing composer audit gates. Mitigation: fork early, or accept and document an exception.
  • Bus factor: single maintainer disappears — already true; no incremental exposure.

Ramp-up

  • A Laravel developer can wire the field into a resource in under a day. A developer asked to own it — rebuild assets, understand the Nova custom-field lifecycle, and debug the Vue component — needs 2–3 days of Nova/Vue-specific ramp-up, and that knowledge is concentrated in one or two people. Treat it as a specialist dependency, not a drop-in convenience.
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.
ippanelcom/laravel-sdk
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