karnoweb/livewire-datepicker
Jalali and Gregorian datepicker for Livewire 3 and Alpine.js with wire:model support for single, range, and multiple dates, min/max limits, themes, RTL, and Gregorian export for storage. No npm or Vite setup required.
jalaali-js and wires to morilog/jalali on the PHP side removes a whole class of defect risk from the roadmap at near-zero cost.export-calendar/export-format options let the product display Jalali while persisting ISO Gregorian dates. This is an architecture decision worth naming explicitly: it keeps the database portable, keeps reporting/BI tooling working on standard dates, and avoids a one-way-door schema decision later.Consider it when:
wire:model.jalali_to_gregorian / gregorian_to_jalali).Look elsewhere when:
holidays key explicitly "reserved for future use" — do not plan around it.composer.json constraints before writing code.For executives (one paragraph): We can serve Persian-speaking users with correct, culturally expected date entry in days rather than weeks, at effectively no licensing cost (MIT). The package handles Jalali↔Gregorian conversion, right-to-left layout, accessibility, and date-range/multi-select behavior out of the box — work we would otherwise build, test, and maintain ourselves. It also lets us store standard Gregorian dates in the database, so our reporting and data tooling stay unchanged and we avoid a schema decision we can't easily reverse. The trade-off is maturity: it's a young, single-maintainer package with no adoption yet, so I recommend a scoped pilot on one non-critical screen, a pinned version, and a thin internal wrapper so we can swap it if it stalls. Risk is contained and reversible; the alternative is a custom build with ongoing ownership cost.
For engineering (the ask): Adopt behind a wrapper component (<x-app-datepicker>) rather than using <x-jalali-datepicker> directly across the codebase. Pilot on one admin form or report filter. Pin the version, commit the published config, and confirm the Livewire/Laravel/PHP constraint matrix against our stack before estimating. Normalize and validate server-side (Carbon::parse(...)->toDateString()) rather than trusting display formats, and always set wire:key when rendering pickers in loops. Budget a small spike to read src/ and resources/views/ since documentation is thin — and treat that spike as our real onboarding doc. If the pilot passes, expanding coverage is mostly template work, not integration work.
How can I help you explore Laravel packages today?