codewithkyrian/filament-date-range
Adds a date range picker field to Filament forms, letting users select start and end dates through a clean, user-friendly interface. It integrates smoothly with Filament panels and Laravel apps for quick date-range input and filtering.
Architecture fit. The package is a UI-layer extension of Filament v3, contributing two artifacts: a form field (date range picker) and a table filter. It sits on the TALL stack (Laravel, Livewire 3, Alpine.js, Tailwind) and inherits Filament's existing field/filter contracts rather than introducing a parallel abstraction. There is no schema footprint, no migration, and no persistence layer — state lives in Livewire component memory and is resolved to a query at filter time. That is the right shape for this problem: the gap it fills (no first-class range picker in core Filament v3 forms) is a presentation concern, not a domain concern, and the package correctly stays in that lane. It composes with existing Filament panels rather than requiring an application-level refactor.
Integration feasibility. Integration is a composer require, an optional asset publish (filament:assets / vendor:publish for Alpine and CSS), and either a service-provider registration or a panel plugin registration — this must be confirmed before sequencing, because the two paths change bootstrap wiring. Adoption cost is measured in hours, not sprints. The API surface a consuming team touches is small (field configuration, filter configuration), which caps both learning cost and blast radius.
Technical risk. The dominant risk is not code quality — it is supply chain. Forty stars, zero dependents, one apparent maintainer: bus factor of one, negligible ecosystem validation, no evidence of downstream production hardening. The package is also hard-pinned to Filament v3; Filament major upgrades historically break field and filter internals, so a v4 transition converts this dependency into a migration project. Secondary risks: date semantics (inclusive vs. exclusive end bounds, timezone normalization, DST transitions, Date vs. DateTime vs. Time modes) are the classic defect surface for range pickers, and Alpine/Livewire state binding for a composite widget is fragile under re-render. Test coverage and CI status are unverified. A 2026-03-23 release date indicates recent activity but does not establish cadence.
Key questions.
whereBetween on one column, or does it accept a custom query closure and support relation/qualified columns?Recommendation: adopt opportunistically with an explicit exit plan (pinned version plus a named fork owner), not as a load-bearing dependency.
Stack fit. Targets Laravel 10/11, PHP 8.1+, Livewire 3, Filament v3. Composer-only install; no database, queue, cache, or infrastructure changes. It slots into existing resource forms and table filter bars without altering routing or panel configuration beyond registration.
Migration path. Two entry points:
Filter that carries custom query logic. Instead, swap the two-DatePicker UI for the range field only where the underlying query is already a clean whereBetween; where custom closures, joins, or aggregates exist, keep them and adopt the package purely for presentation if it exposes that seam, otherwise defer.Compatibility. Pin the Filament constraint explicitly and validate with composer why-not before upgrading Filament anywhere in the estate. Confirm the asset pipeline version matches the panel's (v3.2+ uses FilamentAsset; older panels use a different publish path). Validate in a non-production panel against the exact Livewire and Alpine versions shipped by the target Filament release — composite widgets are where minor-version drift shows up.
Sequencing.
toSql()/query log.where clause for a known range, including the end-boundary case. This is the regression net that survives a future fork.Maintenance. Ongoing cost is near zero in steady state — no runtime services, no data, no scheduled jobs. The real maintenance exposure is upgrade coupling: every Filament major is a potential breaking event, and there is no vendor SLA to lean on. Mitigate with a version pin, a changelog watch, and a pre-agreed fork budget (small, given the code surface).
Support. Community-only, single maintainer, no commercial backing. Internal ownership must be explicit — name a DBA/full-stack owner, record the adoption decision and the exit criteria in an ADR, and treat unanswered issues as a signal to fork rather than wait.
Scaling. Negligible application-side cost; the widget is client-side and the filter is a single predicate. The scaling risk is query-shaped: unbounded ranges on large tables produce wide scans. Ensure composite indexes cover the filtered date column alongside the tenant/status columns the panel already filters on, and consider a max-range guard for high-volume resources.
Failure modes.
Ramp-up. Low. A Filament-fluent engineer is productive in under an hour; a half-day of source reading plus the boundary-case test is enough to own it confidently. No ops, SRE, or DBA onboarding required beyond the index review. Given the modest opportunity score, the package's value is convenience and consistency across admin screens — it is an accelerator, not a differentiator, and should be governed accordingly.
How can I help you explore Laravel packages today?