karnoweb/laravel-calendar
A Laravel package for working with calendars, adding reusable calendar functionality to your PHP applications. Integrates easily with Eloquent models and Blade views so you can build and display date-based features with minimal setup.
Calendar::registerModel() + HasCalendarEvents with EloquentEventProvider/EloquentActionHandler means the calendar can render your existing domain models (tasks, classes, deliveries) instead of forcing a parallel calendar_events table. That removes the largest hidden cost of adoption — the sync layer and its reconciliation bugs — so "buy/adopt" now beats an in-house build for most roadmap timelines.EloquentSeries makes recurring business entities (a class that meets weekly, a delivery that repeats) a configuration concern rather than a custom feature project. Recurring-events epics can be re-scoped down or deferred in favor of higher-value differentiation.EventDetailsRegistry and host-side EventDetailsSection drawer extensions let your team add domain context to the event drawer from the host app. This is the difference between "vendored dependency we patch" and "dependency we configure" — a direct reduction in long-term maintenance ownership.EmbedOptions::make(sources: []) change (empty lists now deny rather than widen to all sources, same for views/systems) flips embed behavior to deny-by-default. This is a release that likely closes an audit finding; treat it as a security-relevant upgrade, not just a semver major. Invalid/duplicate embed source keys now fail loudly instead of being ignored, moving misconfiguration from silent data exposure to a startup error.docs/quickstart.md, docs/examples/*, docs/api/public-api.md, and docs/troubleshooting.md materially lower the integration estimate and mean fewer escalations to the vendor/maintainer during rollout.Adopt when:
Look elsewhere or defer when:
EmbedOptions empty-list semantics change is a silent-to-loud behavioral break. Any existing code passing empty arrays to mean "all" will start returning empty calendars. Migration and permission-matrix review must precede the upgrade.For executives: This release converts the calendar from a bespoke build into a configuration layer over data we already own. We stop maintaining a parallel event store and a sync path, we add recurring scheduling without a dedicated project, and we gain a deny-by-default embed permission model that strengthens our security posture. The workbench samples give us a credible demo and a tighter scoping baseline, and the new docs cut integration risk. Cost: a platform upgrade to PHP 8.3 / Laravel 13 / Livewire 4 must land first — that is the real budget line, not the package.
For engineering: Major version with two behavioral breaks. (1) EmbedOptions empty sources/views/systems arrays now deny access instead of widening to all — audit every EmbedOptions::make() call site and permission matrix before merge; empty-array-means-everything is now a bug. (2) Invalid or duplicate embed source keys now throw instead of being dropped — expect previously-silent misconfigs to surface as startup failures. Upside is substantial: HasCalendarEvents + Calendar::registerModel() with EloquentEventProvider/EloquentActionHandler, model-level recurrence through EloquentSeries, and EventDetailsRegistry/EventDetailsSection for host-side drawer extension — i.e., we extend without forking. Prerequisites are hard: PHP 8.3+, Laravel 13, Livewire 4. Sequence the platform upgrade, then the package bump, then the embed config audit.
How can I help you explore Laravel packages today?