Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Filament Fullcalendar Laravel Package

saade/filament-fullcalendar

Filament FullCalendar is a highly customizable calendar widget for Filament, powered by FullCalendar. It supports viewing, creating, editing, and deleting events through Filament Actions, with a native Filament theme.

View on GitHub
Deep Wiki
Context7
v5.0.0-beta4

Fixed

  • In 5.0.0-beta3, clicking, dragging or resizing an event on a calendar without resource views threw an error in the browser, so the view and edit modals never opened. Thanks to everyone who reported it. (12a3c34)

Added

  • A theme of your own. registerTheme() on the panel plugin takes a name and the address of a JavaScript module that exports a FullCalendar 7 theme, and theme() takes that name. A theme can extends a built-in theme or another registered one, replacing only the options it sets. (d63bf49)
use Illuminate\Support\Facades\Vite;

FilamentFullCalendarPlugin::make()
    ->registerTheme('brutalist', fn (): string => Vite::asset('resources/js/calendar/brutalist.js'))
    ->theme('brutalist')

See Using a theme of your own for how to write and build one.

Updating

composer update saade/filament-fullcalendar
php artisan filament:assets

Full Changelog: https://github.com/saade/filament-fullcalendar/compare/v5.0.0-beta3...v5.0.0-beta4

v5.0.0-beta1

[!IMPORTANT] This is the first beta release of Filament FullCalendar v5.

At this point, I’m not planning any more breaking changes unless something comes up that really requires one. In practice, that means the API and upgrade path should now be pretty close to what will ship in 5.0.0.

You can start testing it now, including in production if you're comfortable running a beta. And please do test it.

I’ve tried to keep breaking changes to the minimum necessary so upgrading from v4 is as painless as possible, while still giving the plugin room to move forward.

To make upgrading even easier, v5 now ships with an automated upgrade script that rewrites most v4 calendar widgets and their tests to the v5 API using Rector, without needing the application to boot.

composer require saade/filament-fullcalendar:"^5.0"
composer require rector/rector:^2.5 --dev --no-scripts
vendor/bin/filament-fullcalendar-v5

The first Composer command may end with an error, and that's expected. The package is installed first, then Laravel's package discovery may try to load your existing v4 widgets before they've been upgraded. Installing Rector with --no-scripts prevents that discovery from running again, and the upgrade script can then do its work.

The script handles the main mechanical changes required for v5, including handler signatures, record APIs, deprecated actions, getFormSchema(), test calls, and optionally preserving the create button behavior from v4. You can also run it with --dry-run first to see what would change.

It is still an upgrade assistant, not a replacement for reading the upgrade guide. When it finishes, it prints a checklist of anything that may still need manual attention.

As always, if you run into anything, please open an issue. PRs are also very welcome against the 5.x branch.

If the community doesn't uncover any major issues, I’m planning to release v5 stable in roughly a week.

And finally, thank you to everyone who has kept using, contributing to, and believing in Filament FullCalendar despite the, let's call it, less-than-ideal maintenance cycle over the last while. 💛

v5 is a big step forward, and I'm really happy to finally get it into your hands.

Filament FullCalendar v5 is here

After a long time of incremental improvements, fixes, feature requests, and more than a few things I wanted to rethink, Filament FullCalendar v5 is ready.

This is much more than a compatibility release.

The goal with v5 was to make FullCalendar feel less like something embedded inside Filament and much more like something that actually belongs there.

The calendar now follows Filament's design language, uses Filament's actions and schemas more deeply, understands your models better, and gives you considerably more control without having to reach for custom JavaScript or Livewire workarounds.

In short: the calendar is now a much better Filament citizen.

It finally feels like Filament

One of the biggest changes in v5 is something you'll notice immediately.

The calendar has been redesigned to better match the rest of a Filament application.

Toolbars now use Filament buttons. Events look like Filament badges. Colors work with Filament's color system. Headers, dropdowns, dark mode, list views and the +more popover all received the same treatment.

The result is a calendar that feels much less like a third-party component dropped into your panel.

And the integration goes beyond styling.

You can now give the widget a heading, description and header actions just like other Filament components, while the calendar toolbar itself can be composed from navigation buttons, views, filters, Filament actions and your own custom tools.

Filters and tabs are now first-class features

This has been one of the most requested areas of the plugin.

In v5, calendars can finally use Filament-style filters and tabs.

Filters are built using familiar Filament form fields and can appear in a dropdown, modal, slide-over, above the calendar or below it.

Tabs work much like resource list tabs, including badges and query modification.

Both can also remember their state between visits.

So things like:

  • filtering appointments by employee
  • switching between confirmed and pending bookings
  • showing events for a specific department
  • filtering resources, categories or locations

can now be part of the calendar itself instead of something you have to build around it.

Your models can be calendar events

Another major change in v5 is a much tighter relationship between your application models and the calendar.

Models can now describe how they should appear on a calendar themselves.

That means a calendar can work directly with your models instead of forcing every project to repeatedly transform them into event arrays.

Even better, one calendar can contain events backed by different models.

The plugin keeps track of which record each event represents and uses the appropriate model, policy, label and actions when the event is opened.

Forms and infolists can also come directly from your Filament resources when you don't need something calendar-specific.

The end result is considerably less duplication between your resources and your calendar.

Actions are just Filament actions

Creating, viewing, editing and deleting events now uses Filament's own action system.

That means the same concepts you already use throughout a Filament application also apply to the calendar.

Custom actions can live alongside the defaults, authorization works through model policies, and actions automatically receive the relevant record.

After an action changes something, the calendar refreshes itself.

It sounds simple, but it removes a surprising amount of special handling that used to exist around calendar interactions.

Dragging events can actually update your records

Drag-and-drop has also been significantly improved.

Tell the calendar which model attributes represent the start and end of an event and it can automatically persist changes when an event is moved or resized.

If you don't want changes to happen immediately, you can require confirmation and let the user review the updated dates in the edit action first.

Users can also drag items from outside the calendar onto it.

That opens up workflows like an unscheduled task list beside a calendar where users simply drag work onto the day or person responsible for it.

Resource calendars can do the same thing when moving events between rooms, employees, machines or other resources.

Resource calendars are much easier to build

For applications using FullCalendar's resource views, v5 introduces a proper PHP API for providing resources.

Rooms, employees, vehicles, machines or anything else represented by a resource can now be returned directly from the widget.

The calendar understands when an event moves between resources and can persist that relationship automatically.

Resource data can also be refreshed independently from events.

Bring other calendars into yours

v5 can display external calendars alongside your application's events.

That includes iCalendar feeds and Google Calendar.

So a booking calendar could, for example, display public holidays, a shared company calendar or another external schedule without having to import those events into your own database.

External calendars remain separate and read-only.

Private iCalendar addresses are fetched by your application rather than exposed directly to the browser.

More control, less JavaScript

There are now PHP methods for navigating and controlling the calendar directly.

You can move to a date, change views, navigate forward or backward, scroll to a time, change options and refresh events or resources.

For cases where JavaScript really is the right tool, v5 also provides a cleaner way to register FullCalendar callbacks.

The idea isn't to hide FullCalendar.

It's to make the common things feel natural in Filament while still giving you access to FullCalendar when you need it.

Better defaults for real applications

There are a lot of smaller additions in v5 that become very useful once a calendar is running in production.

Calendars can now be made completely read-only.

You can choose a different initial view on mobile devices.

Events can refresh automatically on an interval.

Calendars correctly resize when they are first rendered inside hidden tabs or modals.

SPA navigation is handled properly.

Multiple calendars on the same page can be controlled independently.

And loading events now has a proper loading state.

Security and tenancy are part of the calendar now

v5 also tightens several areas that previously required developers to be more careful themselves.

Filament model policies are respected by the calendar's view, create, edit and delete actions.

Applications using Filament tenancy automatically scope calendar records to the current tenant.

And operations such as moving, resizing or selecting dates are validated on the server as well as in the browser.

These aren't particularly flashy features, but they're important ones.

A better experience for package authors and tests too

There's now a dedicated Artisan generator for creating FullCalendar widgets.

It can ask for your panel, resource, model and date attributes and generate a working starting point for you.

v5 also introduces dedicated Livewire testing helpers for common calendar interactions such as:

  • finding events
  • clicking events
  • dragging events
  • selecting dates
  • testing calendar actions

The package itself now has a test suite running against both Filament 4 and Filament 5 as well.

Smaller where it matters

The JavaScript bundle has also been split so calendars only download features they actually use.

Premium views, recurrence support, locales and external calendar integrations don't need to be included when your calendar doesn't use them.

For a standard calendar, the measured gzipped bundle dropped from roughly 204 KB to 155 KB.

And a lot of things were fixed along the way

v5 includes fixes for issues around SPA navigation, recurring events, timezones, hidden calendars, all-day events, date selection, external event sources, dark mode, event serialization and more.

Some of these were long-standing edge cases.

Others came directly from issues and discussions opened by people using the plugin in real applications.

Thank you to everyone who reported them, tested fixes, opened pull requests, shared workarounds or simply explained where the plugin was getting in their way.

This is the direction going forward

Filament FullCalendar started as a relatively small integration between Filament and FullCalendar.

Over time, people started building much more serious scheduling interfaces with it.

v5 reflects that.

Instead of treating FullCalendar as a JavaScript component with a Filament wrapper around it, the plugin now tries to connect the two ecosystems properly.

Filament provides the actions, forms, infolists, policies, colors, filters, tabs and application structure.

FullCalendar provides an extremely capable calendar engine.

Filament FullCalendar should be the bridge between them.

And v5 is a pretty big step in that direction.

Compatibility

Filament FullCalendar v5 supports:

  • Filament 4 and 5
  • FullCalendar 6
  • PHP 8.2+
composer require saade/filament-fullcalendar:"^5.0"
php artisan filament:assets

If you're upgrading an existing application from v3 or v4, please read the upgrade guide before updating. v5 changes some existing behavior and APIs in addition to adding all of the features above.

Full documentation, examples and the complete changelog are available in the repository.

Thanks to everyone who has been using the plugin, reporting issues and suggesting improvements.

I'm excited to finally get v5 into your hands.

v4.0.0-beta3

What's Changed

New Contributors

Full Changelog: https://github.com/saade/filament-fullcalendar/compare/v4.0.0-beta2...v4.0.0-beta3

v4.0.0-beta2

What's Changed

Full Changelog: https://github.com/saade/filament-fullcalendar/compare/v4.0.0-beta1...v4.0.0-beta2

v4.0.0-beta1

This is a beta release

  1. The reason behind this decision is that we need to introduce some breaking changes to fix some known issues (for example, using the calendar inside a resource edit/view page. We need to rename $record to some other name like $event to avoid crashing with Filament's $record property).

  2. Also, i want to make the api match the Filament one (for example, defining schemas using public function form(Schema $schema): Schema {} and public function infolist(Schema $schema): Schema {}), also, get rid of custom actions and leverage the native ViewAction, EditAction etc.

These are just a few concerns; there are more.

That being said, this will be released as a beta at the moment. The refactor has already started and will be released soon.

Please read the Installation Guide to be able to update to 4.x-beta.

Thanks everyone for the support and help! <3


What's Changed

New Contributors

Full Changelog: https://github.com/saade/filament-fullcalendar/compare/v3.2.4...v4.0.0-beta1

v3.2.4

What's Changed

New Contributors

Full Changelog: https://github.com/saade/filament-fullcalendar/compare/v3.2.3...v3.2.4

v3.2.1

What's Changed

New Contributors

Full Changelog: https://github.com/saade/filament-fullcalendar/compare/v3.2.0...v3.2.1

v3.1.1

What's Changed

New Contributors

Full Changelog: https://github.com/saade/filament-fullcalendar/compare/v3.1.0...v3.1.1

v3.0.3

What's Changed

New Contributors

Full Changelog: https://github.com/saade/filament-fullcalendar/compare/v3.0.2...v3.0.3

v1.9.3

What's Changed

New Contributors

Full Changelog: https://github.com/saade/filament-fullcalendar/compare/v1.9.2...v1.9.3

v3.0.0

FullCalendar V3 was released! 🎉

Full Changelog: https://github.com/saade/filament-fullcalendar/compare/v1.9.2...v3.0.0

v3.0.0-beta4
v3.0.0-beta3

What's Changed

New Contributors

Full Changelog: https://github.com/saade/filament-fullcalendar/compare/v1.9.2...v3.0.0-beta3

v3.0.0-beta2
v1.7.1

What's Changed

New Contributors

Full Changelog: https://github.com/saade/filament-fullcalendar/compare/v1.7.0...v1.7.1

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
mehedimi/laravel-amp-mail
happones/laravel-vue-i18n-generator
jwerd/inertia-table
siberfx/flysystem-wasabi
hollyit/token-replace
ippanelcom/laravel-sdk
adachsoft/changelog-linter
adachsoft/collection
payerurl/telegrambot-crypto-payment-instant-payout
dskripchenko/laravel-hybrid-search
riorizkyrainey/lara-ced
mehedimi/static-vel
zharp/zharp
nonsapiens/bigquery-model-sync
lgu-bayambang-ict-office/lgu-laravel-development-standards
andydefer/laravel-support
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel