idez/nova-checkboxes-field
A Laravel Nova field package that adds a checkbox group input to resource forms, letting users select and store multiple options at once. Drop-in checkboxes field with native Nova styling and minimal setup for multi-select values.
BooleanGroup cannot group, and Select::multiple() can't render a stacked checklist. If your requirement is literally "a permission matrix with headings," this package closes a real gap that the built-ins don't. If your "groups" are just categories, they aren't worth the dependency.Adopt when all of these are true:
laravel/nova constraint and Vue build actually match this June-2022 bundle — verified in composer.json and package.json, not assumed from a successful composer require.Select::multiple() dropdown would be poor UX.array cast — tags, channels, categories, permissions. Not a relational belongsToMany.nova-components/checkboxes/) if the package stalls. MIT license makes this legitimate and low-friction.Look elsewhere when:
BooleanGroup (stores {"key": true}, renders toggle pills) or Select::make()->multiple()->options(...) handle most checkbox use cases with zero maintenance. Reach for the package only when the grouped-list UI is the actual requirement.belongsToMany, a native relationship field with ->multiple() is less code and no unmaintained dependency. Bridging via fillUsing/resolveUsing works but is a worse trade.searchable() doesn't work on JSON columns (false positives across keys), SQLite doesn't support whereJsonContains, and integer keys round-trip as strings. If ops users will filter heavily on this field, budget for a model scope or a denormalized text column.Non-negotiable pre-work if you adopt: confirm the stored value shape on day one — flat array of leaf keys (['posts.create','users.ban']) vs. nested object mirroring group structure. Everything downstream (validation allow-lists, whereJsonContains filters, label lookups, accessors) depends on that single answer. Also assert exact payloads in a round-trip feature test, not just assertOk() — group labels leaking into stored values is an easy, silent bug with a naive nested v-model.
For executives: This is a free, MIT-licensed UI component for our admin panel that adds a clean multi-select checkbox group — the natural affordance for tags, notification channels, categories, and internal permission grids. It's a small, reversible internal-tooling bet, not a platform commitment. The cost is roughly zero against a 1–2 day build; the risk is that the package hasn't shipped since mid-2022, so we treat it as code we adopt and own rather than a vendor we depend on. Worst case, we vendor a copy into our repo (which the license permits) and maintain it ourselves — a contained, well-understood outcome. Recommendation: adopt for one or two back-office resources now, contingent on a half-day compatibility check against our Nova/Vue version.
For engineering: Install is a single composer require with no config publish step. Before building on it, do two things: (1) audit composer.json's laravel/nova constraint and package.json's Vue version — a Vue 2 field installs cleanly on Nova 4+ and then renders blank at runtime, so a console check for Failed to mount component is mandatory; (2) read resources/js/components/FormField.vue and the network tab on save to determine whether grouped mode persists a flat leaf-key array or a nested group-shaped object. That determines the migration's column type, the model cast, whether whereJsonContains works for filters, and whether your validation allow-list must be the flattened leaf keys. Expect to supply what the package doesn't: element-level validation (field rules apply to the attribute, not its elements), null-safe normalization on create, index/detail display formatting, authorization via policy in the resource's fields(), and a round-trip feature test asserting the exact stored array — there's no test suite to lean on. If grouped mode is the reason we're adopting, eyeball its Vue template for Vue 2 syntax before trusting it; that's the newest and least-exercised code in the bundle. Long-term path if it stalls: copy src/ and resources/js/ into nova-components/checkboxes/, rebuild, and depend on the local version.
How can I help you explore Laravel packages today?