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 Pill Filter Laravel Package

digital-creative/nova-pill-filter

A Laravel Nova package that adds customizable pill-style filters to resource index screens, letting users quickly toggle predefined filters through a clean, compact interface. Simple to configure and ideal for streamlining resource navigation in Nova admin panels.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • The package is a thin extension of Laravel Nova's native filter contract (Laravel\Nova\Filters\Filter): it keeps the standard apply(Request $request, $value) server-side pipeline and replaces only the presentation layer with a Vue component that renders toggleable pills.
  • Fit is therefore conditional on the host application already standardizing on Nova. It adds no new persistence, no new service boundary, and no new runtime dependency beyond Nova itself—so architectural blast radius is small.
  • Where Nova is already the admin surface, this is a pure UX-layer swap (select box → pill chips) with no impact on query semantics, authorization, or resource definitions.
  • Where the team is not on Nova (or is on Filament/Livewire admin tooling), the package has no reuse value.

Integration feasibility

  • Installation is a single composer require digital-creative/nova-pill-filter plus registering the filter class inside a resource's filters() method. Effective effort for a competent Laravel developer is measured in hours, not days.
  • Minimum viable version is now v1.0.1, not v1.0.0. The v1.0.1 patch fixes "reset not working properly," which is precisely the class of defect that makes a filter untrustworthy in daily operator use. Any spike or pilot must pin ^1.0.1 and explicitly assert that the reset/clear affordance returns the resource to an unfiltered state.
  • Because it extends the base filter class, it can be introduced side-by-side with existing filters and removed without data migration—there is no stored state to unwind.
  • Main friction remains front-end asset distribution: Nova packages typically ship compiled JS/CSS that must match the installed Nova major version's Vue runtime and asset pipeline (nova.mix / Nova::script). This is the actual integration risk, not the PHP side—and a point release that touches only reset behavior is not evidence that the asset build has been re-validated against a newer Nova major.

Technical risk

  • Maintenance risk (revised: high → medium-high): the project was dormant since 2023-10-02 and is still a small, single-maintainer micro-package with minimal ecosystem validation—but v1.0.1 is a genuine signal of life: an external contributor's PR was reviewed and merged by the maintainer. One release is a data point, not a trend. Do not upgrade this to "actively maintained" on the strength of a single patch; do treat "totally abandoned" as no longer the base case.
  • Provenance risk (new, low-medium): the release notes point at dcasia/nova-pill-filter while the install target is digital-creative/nova-pill-filter. Confirm whether this is a rename, a transfer, or a maintained fork, and that the Composer package, the GitHub repo, and the tagged release are the same lineage. If they diverge, our fork point and our CVE-watching target diverge with them.
  • Version-drift risk (high, unchanged): Nova's front-end stack has moved across majors (Vue 2 → Vue 3, Vite-based asset compilation). A reset-behavior patch tells us nothing about compatibility with the current Nova major, and Nova upgrades are a recurring, forced event for paying customers. This remains the dominant risk.
  • Adoption risk (low): MIT license, presentation-only surface, no data writes, no auth surface, no network egress. Worst-case failure is a broken filter UI, not a security or data-integrity incident.
  • Bus-factor risk (medium, slightly improved): small, readable codebase plus demonstrated third-party contribution—realistically forkable and ownable in-house within a sprint, and now with mild evidence that outside patches get accepted.

Key questions

  1. Which Nova major version is in production today, and does the shipped JS build against it without console errors? (v1.0.1 does not change this answer either way.)
  2. Does "reset" in the v1.0.1 fix cover our actual interaction patterns—multi-select, "clear all," default/URL-persisted state, and resetting a single filter vs. all filters on a resource?
  3. Is digital-creative/nova-pill-filter the same codebase and maintainer lineage as dcasia/nova-pill-filter referenced in the changelog?
  4. Is the pill styling themeable to our design tokens, or are we locked into hardcoded CSS?
  5. Does it meet our accessibility bar (keyboard toggling, aria-pressed, focus states, contrast)?
  6. Are we willing to fork and own it, or is the policy "no unmaintained dependencies"? If the latter, this is a build-not-buy decision (a pill filter is roughly a day of work)—and v1.0.1 marginally strengthens the case for buy-and-fork over build.

Integration Approach

Stack fit

  • Requires Laravel + Nova + Composer; aligns cleanly with an existing Nova-based admin stack and standard CI (composer install, asset publish, nova:assets).
  • Zero impact on the application's domain layer, queue topology, or API surface—it lives entirely inside the Nova admin boundary.
  • Fits best as a UX polish item on high-frequency operational resources (orders, tickets, users) where filters are used dozens of times per shift and pill affordances measurably reduce clicks—and where a broken reset is most costly, which is exactly why the v1.0.1 floor matters.

Migration path

  • Non-destructive and incremental: introduce the pill filter alongside the existing filter on one resource, feature-flag it per-resource rather than globally.
  • No schema change, no backfill, no data migration. Rollback is deleting one line from filters() and removing the dependency.
  • If we are already running v1.0.0 anywhere, v1.0.1 is a straightforward patch bump with no stated breaking changes—but re-run the reset assertions rather than assuming, since that is the code path that changed.
  • If the package proves stale again, the fallback is a ~100-line internal filter class that copies the pattern—so the migration has a known, cheap exit.

Compatibility

  • Validate against the exact pinned versions of PHP, Laravel, and Nova in production; do not accept "works on my machine."
  • Confirm asset publishing works under the current build toolchain (Vite vs Laravel Mix) and that no Node build step is required in CI. A reset-only patch gives no reason to expect this has changed since v1.0.0.
  • Verify filter value serialization round-trips correctly with Nova's URL query state and with any existing filterable / relatable filter combinations—and specifically test reset with a multi-value selection, since that is the reported defect area.

Sequencing

  1. Spike (1–2 days): install v1.0.1 in a sandbox Nova app matching production versions; confirm rendering, filtering behavior, asset publishing, and reset/clear-all.
  2. Fork decision: if the spike passes, fork to an internal repo at v1.0.1 with a pinned reference and a CI smoke test rather than depending on the upstream tag directly. Cherry-pick future upstream patches opportunistically; do not track main.
  3. Pilot: deploy behind a per-resource toggle on one high-traffic resource with a small user cohort.
  4. Measure: instrument filter usage, time-to-filtered-view, and mis-filter incidents (filters appearing applied but not applied) before/after.
  5. Decide: promote to additional resources, hold, or replace with the internal implementation—explicitly re-evaluate at the next Nova major upgrade, and again if upstream goes quiet for another 12+ months.

Operational Impact

Maintenance

  • Upstream shows a pulse but is still effectively single-maintainer; plan for internal ownership from day one. The code volume is small enough that "vendor it" is a realistic posture: fork, pin, and patch in-house.
  • Set a calendar reminder tied to Nova upgrade cycles to re-validate the front-end build; this remains the single most likely trigger for breakage, and v1.0.1 does not address it.
  • Dependency hygiene: pin to ^1.0.1, avoid cascading it into shared internal packages, and keep it out of any critical-path bootstrapping.

Support

  • No vendor SLA, no issue-triage guarantee. Support model is internal: one owning team, a short runbook, and the fork as the escalation path.
  • The v1.0.1 fix is a useful precedent: it demonstrates that filing a focused PR upstream is a viable first response to a defect before reaching for the fork. Budget for that path being slow and unpredictable.
  • Document the "how to remove this in 15 minutes" procedure so the package never becomes load-bearing institutional knowledge.

Scaling

  • Runtime cost is negligible: the server-side work is identical to a native filter (whatever apply() builds), and the pill rendering is client-side and O(1) in filter count.
  • The real scaling concern is query cost, not the package—pills encourage more frequent filter toggling, which can increase load on a poorly indexed filter column. Benchmark the underlying query, not the widget.
  • No horizontal scaling, caching, or queue implications.

Failure modes

  • Nova upgrade breaks the compiled assets → filter renders blank or throws in console; degraded admin UX, no data loss. Mitigation: fork + smoke test in CI. Unchanged by v1.0.1.
  • Reset/clear-all silently no-ops → operators believe they are viewing unfiltered data while a stale filter value persists. This was a real defect in v1.0.0 and is the stated v1.0.1 fix. Mitigation: pin ^1.0.1 as a floor, and add an automated assertion that reset yields an unfiltered result set—not just that the chips visually clear.
  • Asset publish/build misconfiguration → component not loaded, filter silently falls back or disappears. Mitigation: staging verification on each deploy.
  • Filter state serialization mismatch (multi-value vs single-value, URL persistence) → filters appear applied but return unfiltered results, which remains the most dangerous failure because it is silent and can mislead operators. Mitigation: assert on filtered result correctness, not just on visual rendering.
  • Accessibility regression → keyboard-only operators lose filter access. Mitigation: manual a11y check during the pilot.
  • Upstream abandonment / repo deletion → dependency resolution failure at composer install. Mitigation: fork or commit the package to a private registry. Repo-naming ambiguity between digital-creative and dcasia makes this mitigation more important, not less.

Ramp-up

  • Developer ramp-up: low—hours. Any Laravel developer familiar with Nova filters will read the whole package quickly, and a one-line reset fix is trivially auditable.
  • Operator ramp-up: very low—pills are a more discoverable affordance than a dropdown, and the pilot should confirm reduced time-to-filtered-view. Operator trust, however, depends on reset behaving correctly; communicate the v1.0.1 floor to whoever runs the pilot.
  • TPM ramp-up: the decision-relevant context is compact—this is a UI convenience with a maintenance tail, not a platform commitment. The judgment call is whether a small UX win justifies carrying one more lightly-maintained dependency in a paid, frequently-upgraded framework. v1.0.1 improves the odds slightly and removes a known sharp edge, but does not change the shape of the decision.
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.
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console
pnscripts/filament-broadquill-lite
pnscripts/laravel-sentfold-lite
vleap/mx-sdk-laravel-internal
twidpay/utils
htetmyathlaing/scout-elasticsearch-driver
artisan-toolbox/front-awesome
ls/client-assistant
users-au/laravel-client
cgv/localized-resource