reachweb/statamic-livewire-filters
Add reactive, Livewire-powered filtering to your Statamic site. Build faceted search and filter interfaces that update instantly without full page reloads, backed by a simple, developer-friendly API. Ideal for collections, entries, and product listings.
status, from, site, limit, paginate, since/until, filter) and change which entries are returned rather than how they are filtered. It ships on by default with no configuration, which means the PM decision is "schedule the upgrade," not "fund a remediation effort."setParameters() made protected, rejection of :-prefixed keys (Antlers expression injection), and URL state sanitized on load all reduce the surface a security review would flag.clear-all-filters in custom filter components, add the new optional $boundsSelection = null parameter to subclass overrides of filterUpdated() / clearFilter() / clearFilters(), and re-publish customized range views if enabling dynamic bounds. Estimate it as a small, checklistable ticket — and note the one real behavioral risk: a filter targeting a field named like a control key (e.g. status:is) will silently stop working unless the key is removed from blocked_query_params or allowed via allowed_filters. Audit existing filters before upgrading.Adopt when most of these hold:
config:clear/static:clear and read the upgrade list. Skipping those steps leaves the blocklist unset and nothing protected.Look elsewhere when:
To executives: This is a filtering layer for our Statamic listings, and the new version closes a security hole where a crafted URL could change which entries a page returned — not just how they were filtered. The fix is on by default, so the cost is an upgrade ticket, not a project. It also buys us a feature we would otherwise build: URL-shareable filters, live faceted counts, and sliders that adapt to the other active filters. Net: one small upgrade, lower security exposure, and a catalog UX we don't have to staff from scratch.
To engineering: v4.6.0 is primarily hardening. blocked_query_params ships pre-populated with Statamic's query-control keys (status, from, site, limit, paginate, since/until, filter, and more), matched on the segment before the first colon so status also blocks status:is. Tag-set and init-hook parameters are always preserved, and allowed_filters is the escape hatch. Filter identity properties are #[Locked], setParameters() is protected, :-prefixed keys are rejected, and URL state is sanitized on load with tag-only params never read from the URL. The event contract was kept compatible — one-argument params-updated listeners still work — and the opt-in enable_dynamic_range_bounds flag means no behavior change unless we ask for it. Required steps: clear config and static caches, audit filters on fields named like control keys, allowlist any control key visitors legitimately set via URL, add clear-all-filters listeners to custom filter components, add the optional $boundsSelection = null parameter to subclass overrides, and re-publish or merge the range-bounds-updated listener into customized range views if we enable dynamic bounds.
How can I help you explore Laravel packages today?