PHPackages                             willsprod/ux-fullcalendar - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. willsprod/ux-fullcalendar

ActiveSymfony-bundle[Utility &amp; Helpers](/categories/utility)

willsprod/ux-fullcalendar
=========================

FullCalendar integration for Symfony

1.0.0(9mo ago)243MITPHPPHP &gt;=8.1

Since Aug 12Pushed 9mo agoCompare

[ Source](https://github.com/WillsProd/ux-fullcalendar)[ Packagist](https://packagist.org/packages/willsprod/ux-fullcalendar)[ Docs](https://symfony.com)[ RSS](/packages/willsprod-ux-fullcalendar/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (1)Dependencies (8)Versions (2)Used By (0)

📅 Symfony UX FullCalendar Bundle
================================

[](#-symfony-ux-fullcalendar-bundle)

A modern Symfony UX bundle that simplifies FullCalendar integration with smart plugin management and a clean architecture.

[![Symfony](https://camo.githubusercontent.com/7cca8826ae22dc9cdb977bcb94299a285226b1854c1f35762a52825debe41f51/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f53796d666f6e792d362e30253743372e302d626c7565)](https://camo.githubusercontent.com/7cca8826ae22dc9cdb977bcb94299a285226b1854c1f35762a52825debe41f51/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f53796d666f6e792d362e30253743372e302d626c7565)[![PHP](https://camo.githubusercontent.com/396e308627273611a751aa614834c4a6cd0b268c51ab52ab5330f94b99771fbc/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e312532422d707572706c65)](https://camo.githubusercontent.com/396e308627273611a751aa614834c4a6cd0b268c51ab52ab5330f94b99771fbc/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e312532422d707572706c65)[![License](https://camo.githubusercontent.com/5caa455d8debc46fb23abbadb45a733a937f3910a73fc875c2f7820468e1bb54/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e)](https://camo.githubusercontent.com/5caa455d8debc46fb23abbadb45a733a937f3910a73fc875c2f7820468e1bb54/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e)[![Packagist](https://camo.githubusercontent.com/9576c4fcafb20dcdd8b5141da9ed8d59cd377b841e7e3e095d8cdaa5e1344cad/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f77696c6c7370726f642f75782d66756c6c63616c656e646172)](https://camo.githubusercontent.com/9576c4fcafb20dcdd8b5141da9ed8d59cd377b841e7e3e095d8cdaa5e1344cad/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f77696c6c7370726f642f75782d66756c6c63616c656e646172)

✨ Features
----------

[](#-features)

- 🔥 **Dynamic loading** of FullCalendar plugins
- 🎨 **Easy configuration** entirely in PHP
- 📱 **Native drag &amp; drop** with event handling
- 🚀 **Perfect Stimulus integration** with Symfony UX
- ⚡ **Optimized performance** - only loads necessary plugins
- 🛠️ **Error handling** with toast notifications
- 📦 **Smart default plugins** (dayGrid, timeGrid, interaction)

🚀 Installation
--------------

[](#-installation)

```
composer require willsprod/ux-fullcalendar
```

💻 Basic usage
-------------

[](#-basic-usage)

### 1. In your controller

[](#1-in-your-controller)

```
use WillsProd\UX\FullCalendar\Builder\CalendarBuilderInterface;

#[Route('/calendar', name: 'app_calendar')]
public function calendar(CalendarBuilderInterface $builder): Response
{
    $calendar = $builder->createCalendar("my-calendar");

    // Options configuration
    $calendar->setOptions([
        'initialView' => 'timeGridWeek',
        'events' => $this->generateUrl('api_events'),
        'locale' => 'fr',
        'editable' => true,
        'selectable' => true,
    ]);

    // Actions for drag & drop events
    $calendar->setEventActions([
        'eventDropUrl' => $this->generateUrl('app_event_drop'),
        'eventResizeUrl' => $this->generateUrl('app_event_resize')
    ]);

    return $this->render('calendar/index.html.twig', [
        'calendar' => $calendar
    ]);
}
```

### 2. In your twig template

[](#2-in-your-twig-template)

```
{# templates/calendar/index.html.twig #}
{% extends 'base.html.twig' %}

{% block body %}

        My Calendar
        {{ render_calendar(calendar) }}

{% endblock %}
```

### 3. Endpoint API for events

[](#3-endpoint-api-for-events)

```
#[Route('/api/events', name: 'api_events')]
public function getEvents(): JsonResponse
{
    return $this->json([
        [
            'id' => 1,
            'title' => 'Meeting',
            'start' => '2025-08-12T10:00:00',
            'end' => '2025-08-12T11:00:00',
        ],
        // ... other events
    ]);
}
```

🔧 Advanced configuration
------------------------

[](#-advanced-configuration)

### Plugin management

[](#plugin-management)

```
// Default plugins : dayGrid, timeGrid, interaction
$calendar = $builder->createCalendar("advanced");

// Add plugins
$calendar->addPlugin('list');
$calendar->addPlugin('rrule');

// Or défine completely
$calendar->setEnabledPlugins(['dayGrid', 'timeGrid', 'list']);

// Check if a plugin is active
if ($calendar->hasPlugin('interaction')) {
    // Your specific configuration
}
```

### Drag &amp; Drop Event Management

[](#drag--drop-event-management)

```
#[Route('/event/drop', name: 'app_event_drop', methods: ['POST'])]
public function eventDrop(Request $request): JsonResponse
{
    $data = json_decode($request->getContent(), true);

    // Process the event move
    // $data['eventId'], $data['newStart'], $data['newEnd']

    return $this->json([
        'success' => true,
        'message' => 'Event successfully moved'
    ]);
}

#[Route('/event/resize', name: 'app_event_resize', methods: ['POST'])]
public function eventResize(Request $request): JsonResponse
{
    $data = json_decode($request->getContent(), true);

    // Process resizing
    // $data['eventId'], $data['newStart'], $data['newEnd']

    return $this->json([
        'success' => true,
        'message' => 'Event successfully resized'
    ]);
}
```

### Advanced options

[](#advanced-options)

```
$calendar->setOptions([
    'initialView' => 'timeGridWeek',
    'headerToolbar' => [
        'left' => 'prev,next today',
        'center' => 'title',
        'right' => 'dayGridMonth,timeGridWeek,timeGridDay'
    ],
    'locale' => 'fr',
    'timeZone' => 'Europe/Paris',
    'slotMinTime' => '08:00:00',
    'slotMaxTime' => '20:00:00',
    'weekends' => true,
    'nowIndicator' => true,
    'height' => 'auto',
    'buttonText' => [
        'today' => "Aujourd'hui",
        'month' => 'Mois',
        'week' => 'Semaine',
        'day' => 'Jour',
    ]
]);
```

🎨 Available plugins
-------------------

[](#-available-plugins)

PluginDescription`dayGrid`Classic monthly view`timeGrid`Weekly and daily views with time slots`interaction`Drag &amp; drop, selection, resizing`list`List view`rrule`Support for recurring events🤝 Contribution
--------------

[](#-contribution)

Contributions are welcome! Feel free to:

- 🐛 Report bugs
- 💡 Suggest features
- 📖 Improve the documentation
- 🔧 Submit pull requests

📄 License
---------

[](#-license)

This project is licensed under the [MIT](LICENSE).

👨‍💻 Author
----------

[](#‍-author)

Created By [Willy Natan](https://github.com/willsProd) - Feel free to follow me for more Symfony projects!

---

⭐ If this bundle helps you with your projects, please give it a star!

###  Health Score

32

—

LowBetter than 72% of packages

Maintenance58

Moderate activity, may be stable

Popularity12

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity44

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

273d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/f4a1e6d02951542f68f1753cdf39c34f1ac9b5a136906de2083e652142fef6e5?d=identicon)[WillsProd](/maintainers/WillsProd)

---

Top Contributors

[![WillsProd](https://avatars.githubusercontent.com/u/164310569?v=4)](https://github.com/WillsProd "WillsProd (2 commits)")

---

Tags

symfony-ux

### Embed Badge

![Health badge](/badges/willsprod-ux-fullcalendar/health.svg)

```
[![Health](https://phpackages.com/badges/willsprod-ux-fullcalendar/health.svg)](https://phpackages.com/packages/willsprod-ux-fullcalendar)
```

###  Alternatives

[symfony/ux-chartjs

Chart.js integration for Symfony

1003.2M18](/packages/symfony-ux-chartjs)[pentiminax/ux-datatables

DataTables.net integration for Symfony

605.6k](/packages/pentiminax-ux-datatables)[symfony/ux-notify

Native notification integration for Symfony

1274.7k](/packages/symfony-ux-notify)[symfony/ux-lazy-image

Lazy image loader and utilities for Symfony

36335.2k](/packages/symfony-ux-lazy-image)[symfony/ux-toggle-password

Toggle visibility of password inputs for Symfony Forms

26508.0k5](/packages/symfony-ux-toggle-password)[spomky-labs/pwa-bundle

Progressive Web App Manifest Generator Bundle for Symfony.

6144.4k1](/packages/spomky-labs-pwa-bundle)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
