- How do I install saade/filament-fullcalendar in a Laravel app with Filament?
- Run composer require saade/filament-fullcalendar, then create a widget class that extends FullCalendarWidget and register it on a Filament page or resource. There are no migrations, service providers to configure, or schema opinions to adopt, and assets are published through Filament's normal asset pipeline. You then implement a single fetchEvents() method to supply the events shown on the calendar.
- Which Filament, Laravel, and PHP versions does filament-fullcalendar support?
- The current 3.x line targets PHP 8.1+, Laravel 10 or 11, Filament 3.x, and Livewire 3. It will not work inside a Filament v2 panel, and it has no standalone or Inertia/Vue mode because the widget is tied to the Filament panel runtime. Both Filament and FullCalendar ship breaking majors regularly, so confirm the supported major and support window on the repository before locking it into a long-lived project.
- How do I return events from an Eloquent model to the FullCalendar widget?
- Override fetchEvents() in your widget and map your models into EventData DTOs containing an id, title, start, end, and any custom keys you need. The package is a presentation adapter only, so it never queries your database or assumes a model, table, or column naming scheme. You control the mapping, which makes it easy to join in extra fields for tooltips or filters.
- Can filament-fullcalendar handle recurring events and large event sets?
- fetchEvents() receives the visible date window, so you can filter server-side with a whereBetween instead of loading every record. There is no RRULE recurrence engine, conflict detection, or invitation logic in the package, so recurring events must be expanded into concrete occurrences on your side. Keep the returned EventData payload lean and paginate or narrow the window to stay fast on large datasets.
- How do I save drag-and-drop and resize changes back to the database?
- Enable interactions with editable() and selectable(), then persist the new start and end values yourself from the drag, resize, or drop callbacks the widget exposes. Nothing is written automatically, so you own the update logic, validation, and any audit trail. A common pattern is to open the edit action after a drop so the user confirms the change before it is saved.
- How do I customize the view, create, edit, and delete modals in the calendar?
- Those modals are Filament Actions, so you define their form schemas, labels, and modal contents with the same API you already use across your panel. Custom event data passed through EventData is available to the actions, which makes it straightforward to build contextual edit forms. Day selection also lets you prefill a create action with the clicked date and any additional data.
- How do I authorize calendar actions with Laravel policies?
- Because every action is a Filament Action, you can gate view, create, edit, and delete using Filament's action authorization or your existing Laravel policies. The package documents an authorizing actions section where you expose visibility and ability checks for each interaction. Pair that with your normal panel and page access rules so unauthorized users cannot reach the widget at all.
- How do I set the timezone and locale for the FullCalendar widget?
- Use the timezone() and locale() configuration methods on the widget to control how dates are displayed and interpreted client-side. The package does not include timezone resolution logic, so store and return timestamps consistently, typically in UTC, and let the widget render them. Locale changes affect UI text and date formatting and rely on the corresponding FullCalendar locale assets.
- Do I need a FullCalendar scheduler license key for resource or timeline views?
- Yes, FullCalendar's resource, timeline, and scheduler views are commercially licensed, and the package exposes schedulerLicenseKey() to pass your key. That key is embedded in client-side JavaScript, so anyone who can load the panel can see it, which is worth confirming with your legal team before shipping on a shared or customer-facing surface. Basic day, week, and month views do not require it.
- Is saade/filament-fullcalendar actively maintained, and what are the alternatives?
- It is a single-maintainer package with roughly 420 stars and no dependents, and it has to track breaking majors from both Filament and FullCalendar, so review the real commit and release cadence plus any CI matrix before adopting. For internal admin scheduling it is a reasonable fit with guardrails; for customer-facing booking, billing-adjacent, or multi-tenant scheduling, wrap it behind your own abstraction or build a small Livewire and Alpine wrapper around FullCalendar directly. Either way, assign an internal owner for upgrades.