Filament: Show Calendar of Tasks with FullCalendar

In this tutorial, we will show you how to quickly create a calendar in Filament for your model to display Tasks, Events, etc, using the package called "Filament FullCalendar".

Here, we have the Task Model that contains the name (string), start (datetime), and end (datetime) fields.

Filament FullCalendar

Install the Filament FullCalendar package via Composer.

composer require saade/filament-fullcalendar:^3.0

Register FilamentFullCalendarPlugin in the AdminPanelProvider file.


use Saade\FilamentFullCalendar\FilamentFullCalendarPlugin;
public function panel(Panel $panel): Panel
return $panel
// ...

Then, create a widget.

php artisan make:filament-widget CalendarWidget

Replace CalendarWidget contents as follows.


namespace App\Filament\Widgets;
use App\Models\Task;
use Illuminate\Database\Eloquent\Model;
use Saade\FilamentFullCalendar\Widgets\FullCalendarWidget;
class CalendarWidget extends FullCalendarWidget
public Model | string | null $model = Task::class;
public function fetchEvents(array $fetchInfo): array
return Task::where('start', '>=', $fetchInfo['start'])
->where('end', '<=', $fetchInfo['end'])
->map(function (Task $task) {
return [
'id' => $task->id,
'title' => $task->name,
'start' => $task->start,
'end' => $task->end,
public static function canView(): bool
return false;

The fetchEvents() method returns your model data in a specific format, so you must map the data from your model.

  • id - Model's id
  • title - Property you want to display as calendar title
  • start - DateTime value when the Task starts
  • end - DateTime value when the Task ends

By default, CalendarWidget is displayed on the Dashboard page. The canView() returns a boolean whether to display the widget on the Dashboard or not. It may contain your custom logic.

For this example, we return false to completely hide it because we will display it on a separate page.

Let's create the said page.

php artisan make:filament-page Calendar

Finally, update the page contents.



If you want more Filament examples, you can find more real-life projects on our



This gives me an error: "Typed static property Filament\Widgets\Widget::$view must not be accessed before initialization"

I'm using Laravel 10 and Filament 3


check if you really extend FullCalendarWidget instead of Widget


thank you very much! It was that


I get this error when pressing "New Task" top right Action:

Filament\Actions\CreateAction::Filament\Actions{closure}(): Argument #2 ($form) must be of type Filament\Forms\Form, null given, called in /Users/d4n333/work/valet/xxx/vendor/filament/support/src/Concerns/EvaluatesClosures.php on line 35

For my Tasks I use simple Resource. Is this the problem? Should I use Pages for Create and Edit the Tasks?


Do you actually have a create form page and form() defined in your resource?

This tutorial is only for displaying calendar. Please see plugin documentation.


thx david, fullcalendars documentation helped me out.

Like our articles?

Become a Premium Member for $129/year or $29/month
What else you will get:
  • 52 courses (952 lessons, total 46 h 42 min)
  • 77 long-form tutorials (one new every week)
  • access to project repositories
  • access to private Discord

Recent Premium Tutorials