PHPackages                             marshmallow/nova-calendar - 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. marshmallow/nova-calendar

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

marshmallow/nova-calendar
=========================

A powerful event calendar Tool for Laravel's Nova 5.

5.1.0(3mo ago)05.1k↑40%2AGPL-3.0-or-laterPHPPHP ^8.2

Since Feb 27Pushed 3w ago1 watchersCompare

[ Source](https://github.com/marshmallow-packages/nova-calendar)[ Packagist](https://packagist.org/packages/marshmallow/nova-calendar)[ GitHub Sponsors](https://github.com/marshmallow-packages)[ RSS](/packages/marshmallow-nova-calendar/feed)WikiDiscussions main Synced yesterday

READMEChangelog (3)Dependencies (4)Versions (5)Used By (0)

Event calendar for Laravel Nova 5
=================================

[](#event-calendar-for-laravel-nova-5)

An event calendar that displays Nova resources or other time-related data in your Nova 5 project on a monthly calendar view that adapts nicely to clear and dark mode.

[![Latest Version on Packagist](https://camo.githubusercontent.com/949098ef79cad20dc992eca071d2073c311333049504f6814710eb056a585405/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6d617273686d616c6c6f772f6e6f76612d63616c656e6461722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/marshmallow/nova-calendar)[![Total Downloads](https://camo.githubusercontent.com/7e846ef592dcf77bf027176102b9184d3bfaf0e87ef31e8d56f87c0179923e7a/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6d617273686d616c6c6f772f6e6f76612d63616c656e6461722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/marshmallow/nova-calendar)[![License](https://camo.githubusercontent.com/0965f1672eade9456090aaa6d73b6946c29d349cad92ce9fd3bc5616050aed42/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6d617273686d616c6c6f772f6e6f76612d63616c656e6461722e7376673f7374796c653d666c61742d737175617265)](LICENSE.md)

[![The design of the calendar in both clear and dark mode](https://github.com/marshmallow-packages/nova-calendar/raw/main/resources/doc/screenshot.jpg?raw=true)](https://github.com/marshmallow-packages/nova-calendar/blob/main/resources/doc/screenshot.jpg?raw=true)

Important

This package was originally forked from [wdelfuego/nova-calendar](https://github.com/wdelfuego/nova-calendar). Since we were making many opinionated changes, we decided to continue development in our own version rather than submitting pull requests that might not benefit all users of the original package. You're welcome to use this package, we're actively maintaining it. If you encounter any issues, please don't hesitate to reach out.

What can it do?
---------------

[](#what-can-it-do)

This calendar tool for Nova 5 shows existing Nova resources and, if you want, dynamically generated events, but comes without database migrations or Eloquent models itself. This is considered a feature. Your project is expected to already contain certain Nova resources for Eloquent models with `DateTime` fields or some other source of time-related data that can be used to generate the calendar events displayed to the end user.

The following features are supported:

- Automatically display Nova resources on a monthly calendar view
- Mix multiple types of Nova resources on the same calendar
- Display events that are not related to Nova resources
- Use event filters to limit the amount of events shown on the calendar
- Add badges to events and calendar days to indicate status or attract attention
- Customize visual style and content of each individual event
- Laravel policies are respected to exclude events from the calendar automatically
- Allows end users to navigate through the calendar with hotkeys
- Allows end users to navigate to the resources' Detail or Edit views by clicking events

Requirements
------------

[](#requirements)

- PHP `^8.2`
- [Laravel Nova](https://nova.laravel.com) `^5.0`
- `illuminate/support` `^10`, `^11`, `^12` or `^13`

Installation
------------

[](#installation)

Install the package through Composer:

```
composer require marshmallow/nova-calendar
```

The package registers its `ToolServiceProvider` automatically through Laravel's package discovery, so no manual provider registration is needed.

Publish the config file:

```
php artisan vendor:publish --provider="Marshmallow\NovaCalendar\ToolServiceProvider" --tag="config"
```

This creates `config/nova-calendar.php` with a working starting configuration.

Getting started
---------------

[](#getting-started)

Adding a calendar to Nova takes a few steps. The full walkthrough lives in the [documentation](https://marshmallow-packages.github.io/nova-calendar/installation.html); the short version is below.

### 1. Create a data provider

[](#1-create-a-data-provider)

A data provider supplies the events for a calendar. Generate the default one:

```
php artisan nova-calendar:create-default-calendar-data-provider
```

This creates `App\Providers\CalendarDataProvider`, a subclass of `Marshmallow\NovaCalendar\DataProvider\AbstractCalendarDataProvider`. Implement `novaResources()` to map Nova resources to the `DateTime` attribute(s) that define when each event starts and, optionally, ends:

```
namespace App\Providers;

use App\Nova\SomeEvent;
use App\Nova\User;
use Marshmallow\NovaCalendar\DataProvider\AbstractCalendarDataProvider;

class CalendarDataProvider extends AbstractCalendarDataProvider
{
    public function novaResources(): array
    {
        return [
            // Single-day event on the model's `created_at` timestamp:
            User::class => 'created_at',

            // Event with a start and (optionally nullable) end timestamp:
            SomeEvent::class => ['starts_at', 'ends_at'],
        ];
    }
}
```

Any attribute named here must be cast to a `DateTime` by the underlying Eloquent model. Returning an empty array yields a working but empty calendar.

### 2. Register the calendar tool

[](#2-register-the-calendar-tool)

Add the calendar to the `tools()` method of your `App\Providers\NovaServiceProvider`, passing the calendar key from the config file:

```
use Marshmallow\NovaCalendar\NovaCalendar;

public function tools(): array
{
    return [
        new NovaCalendar('my-calendar'),
    ];
}
```

If you build your Nova main menu manually, link to the calendar with `NovaCalendar::pathToCalendar()`:

```
use Laravel\Nova\Menu\MenuItem;
use Marshmallow\NovaCalendar\NovaCalendar;

MenuItem::link(__('Calendar'), NovaCalendar::pathToCalendar('my-calendar'));
```

Configuration
-------------

[](#configuration)

Most calendar configuration is done at runtime from your data provider, but each calendar instance needs an entry in `config/nova-calendar.php`, keyed by a unique *calendar key*. Each entry supports the following options:

OptionRequiredDescription`dataProvider`yesThe data provider class that supplies the event data for this calendar.`uri`yesURI the calendar is served under, appended to the Nova path. With `my-calendar` and Nova on `/nova`, the calendar lives at `/nova/my-calendar`. Must be unique.`windowTitle`noFixed browser tab title. If omitted or empty, the dynamic title generated by the data provider is used instead.Multiple calendars are configured by adding more keyed entries:

```
use App\Calendar\Providers\BirthdayDataProvider;
use App\Calendar\Providers\FlightDataProvider;

return [
    'flights' => [
        'dataProvider' => FlightDataProvider::class,
        'uri' => 'calendar/flights',
    ],
    'birthdays' => [
        'dataProvider' => BirthdayDataProvider::class,
        'uri' => 'calendar/birthdays',
        'windowTitle' => 'Birthdays',
    ],
];
```

See [Adding more calendar views](https://marshmallow-packages.github.io/nova-calendar/adding-more-calendar-views.html) for details.

Documentation
-------------

[](#documentation)

Full documentation — including event filters, badges, event visibility, custom event generators, customizing events and the calendar, and the upgrade guide — is available at [marshmallow-packages.github.io/nova-calendar](https://marshmallow-packages.github.io/nova-calendar) and in the [`docs/`](docs) directory.

License summary
---------------

[](#license-summary)

Anyone can use and modify this package in any way they want, including commercially, as long as the commercial use is a) creating implemented calendar views and/or b) using the implemented calendar views. Basically the only condition is that you can't sublicense the package or embed it in a framework (unless you do so under the AGPLv3 license). Usage in Nova is not compatible with the AGPLv3 license. More details in [LICENSE.md](LICENSE.md).

Contributing
------------

[](#contributing)

Contributions are welcome. Please see the [contributing guide](docs/contributing-to-this-package.md) and open a pull request against the `develop` branch. Bug reports and feature requests can be filed on the [issue tracker](https://github.com/marshmallow-packages/nova-calendar/issues).

Security
--------

[](#security)

If you discover a security vulnerability, please email  rather than using the public issue tracker.

Credits
-------

[](#credits)

- [Marshmallow](https://github.com/marshmallow-packages)
- [wdelfuego](https://github.com/wdelfuego) — original author of the package this was forked from
- [All contributors](https://github.com/marshmallow-packages/nova-calendar/contributors)

###  Health Score

47

—

FairBetter than 93% of packages

Maintenance89

Actively maintained with recent releases

Popularity25

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity54

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

Every ~192 days

Total

3

Last Release

107d ago

### Community

Maintainers

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

---

Top Contributors

[![stefvanesch](https://avatars.githubusercontent.com/u/46725619?v=4)](https://github.com/stefvanesch "stefvanesch (8 commits)")

---

Tags

laraveleventsdatecalendarnovaevent-calendar

### Embed Badge

![Health badge](/badges/marshmallow-nova-calendar/health.svg)

```
[![Health](https://phpackages.com/badges/marshmallow-nova-calendar/health.svg)](https://phpackages.com/packages/marshmallow-nova-calendar)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3355.3M345](/packages/psalm-plugin-laravel)[renatomarinho/laravel-page-speed

Laravel Page Speed

2.5k1.7M11](/packages/renatomarinho-laravel-page-speed)[markwalet/nova-modal-response

A Laravel Nova asset for Modal responses on an action.

17878.9k](/packages/markwalet-nova-modal-response)[advoor/nova-editor-js

A Laravel Nova field bringing EditorJs magic to Nova.

92219.3k3](/packages/advoor-nova-editor-js)[mostafaznv/nova-map-field

Map Field for Laravel Nova

46107.9k](/packages/mostafaznv-nova-map-field)[datomatic/nova-enum-field

A Laravel Nova PHP 8.1 enum field with filters

20156.0k](/packages/datomatic-nova-enum-field)

PHPackages © 2026

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