Events calendar for Craft - which one should I use? The current state of events/calendars in Craft is:


Calendars - https://topshelfcraft.com/calendars/introduction
Venti - http://tippingmedia.com/venti
Solspace Calendar - https://solspace.com/craft/calendar


Whats the benefits of each? Anything to note?
I haven't used Venti, so I can't comment on it. However, I have tried out both Calendars from Top Shelf Craft and Solspace Calendar on a recent project.

I started out using Top Shelf Craft Calendars (Solspace Calendar hadn't been released at this point). However, during the project, I switched to Solpsace Calendar which has ended up being used on the final build.

In my view, Craft Calendars and Solspace Calendar have distinctly different approaches as to how they work.

Top Shelf Craft Calendars

In Craft Calendars, any element (entries, users, assets, etc.) can be attached to a calendar event. If you want to store custom fields associated with an event, then you would store these on the element you are attaching to the calendar event, not on the event itself.

In this way, you can think of Craft Calendars as creating a specialist fieldtype which enables you to schedule events, either on a one-off basis, or using sophisticated recurring rules. So to create an event, it must be associated with another element, since the event date is set using the Event Dates Fieldtype on the host element, rather than creating an event directly on a calendar element.

Craft Calendars doesn't currently have a nice GUI for the control panel and the front end output and styling are also left to you. This means that there is no native way to see an overview of the events that have been created. This may or may not be important to you.

Solspace Calendar

On the other hand, with Solspace Calendar, events belong to a calendar first and foremost. There is an Events Fieldtype which can be used to relate another element (entries, users, assets, etc.) to a specific event using native Craft relations.

Events can also have their own custom fields. However, at the moment it is is not currently possible to search for Solspace Calendar events based on the contents of their custom fields. You can only search for events based on 'native' Solspace Calendar attributes, such as calendar name, start date, end date and author (see the docs for full details).

The control panel GUI for Solspace Calendar really shines and is very easy to use. It is based on Full Calendar, a JavaScript event calendar JQuery plugin. Solspace provide sample front end templates using Full Calendar, so it is fairly quick and easy to get a similar system up and running on your site.

The Full Calendar interface, plus the ability to have events that weren't associated with existing elements, were the main factors in my choice of Solspace Calendar for the project I used it on. Though at the time I developed it, Solspace had not yet released their Full Calendar front end templates and there was little support for calling the event creation controllers from the front end, I was able to work through their code to see how they had achieved it in the control panel and create what I needed for the front end of my site.

However, it wasn't an easy choice between the two so I completely understand the motivation behind your question.

Comment on development and coding style

I have spent a lot of time looking through the code for both plugins and Solspace Calendar in particular. From a development and coding point of view (if that matters to you), Craft Calendars seems to me to follow Craft coding conventions more closely.

Solspace seem to have introduced extra levels of complexity and abstraction into Calendar that, in my opinion, for what it's worth, make it more complicated that it perhaps needed to be and lose some of the native behaviour you would get if they had used a more 'Crafty' approach. I have noticed this before with some of their EE add-ons. That said, they were very responsive to all the bug reports and questions I raised with them during the active development of the project.