Discourse Calendar (and Event)

:discourse2: Summary Discourse Calendar and Event adds dynamic and interactive calendar and event features to your Discourse site.
:hammer_and_wrench: Repository Link https://github.com/discourse/discourse-calendar
:open_book: Install Guide How to install plugins in Discourse

Enabling Calendar (and Event)

The Calendar plugin can be enabled either by the toggle or from its settings, both accessible from your admin/plugins page:


Somewhat unsurprisingly, Discourse Calendar (and Event) adds both the calendar and event features to your Discourse site. With these, you can create individual topic calendars to track important occasions or timelines, display calendars in categories, add a holiday calendar to mark vacations, absences, or sick days, create interactive event topics, as well as show an easy-access calendar summary of all of your upcoming events.


Bespoke calendars can be created in multiple topics, and ones you wish to give higher visibility to can be displayed above a category’s topic list.

You can find more detailed information on how to create and use calendars in:


The Event feature allows interactive elements to be inserted into topics which your members can use to sign up to attend or participate in your community’s activities. These are all summarised in a dedicated site-wide calendar, with the option to add an easy-access link to your navigation menu. You can find more information on how to create and use this feature in:

:exclamation: This should not be confused with Pavilion’s Events plugin (note the plural)

Calendar Settings

Name Description
calendar enabled Enable the discourse-calendar plugin. This will add support for a [calendar][/calendar] tag in the first post of a topic.
holiday calendar topic id Topic ID of staffs holiday / absence calendar.
holiday status emoji Defines the emoji used for the holiday status.
delete expired event posts after Posts with expired events will be automatically deleted after (n) hours. Set to -1 to disable deletion.
all day event start time Events that do not have a start time specified will start at this time. Format is HH:mm. For 6:00 am, enter 06:00
all day event end time Events that do not have a end time specified will end at this time. Format is HH:mm. For 6:00 pm, enter 18:00
calendar categories Display a calendar at the top of a category. Mandatory settings are categoryId and postId. eg: categoryId=6;postId=453[1] Other valid settings: tzPicker[2], weekends[3] and defaultView[4].
calendar categories outlet Allows to change which outlet should show the category calendar.
working days Set working days. You can display the availability of a group using the timezones tag in a post, eg: [timezones group=admins][timezones]
working day start hour Start time of the working day hours.
working day end hour End time of the working day hours.
close to working day hours extension Set extension time in working day hours to highlight the timezones.
calendar automatic holidays enabled Automatically set holiday status based on a users region (note: you can disable specific automatic holidays in plugin settings)

Event Settings

Name Description
discourse post event enabled [experimental] Enables to attach an event to a post. Note: also needs calendar enabled to be enabled.
discourse post event allowed on groups Groups that are allowed to create events.
displayed invitees limit Limits the numbers of invitees displayed on an event.
display post event date on topic title Displays the date of the event after the topic title.
use local event date Use local date after topic title instead of relative time.
discourse post event edit notifications time extension Extends (in minutes) the period after the end of an event when going invitees are still being notified from edit in the original post.
discourse post event allowed custom fields Allows to let each event to set the value of custom fields.
events calendar categories Display an events calendar at the top of a category.
sort categories by event start date enabled Enable the sorting of category topics by event start date.
disable resorting on categories enabled Allow categories to disable the ability for users to sort on the event category.
sidebar show upcoming events Show upcoming events link in the sidebar under ‘More’. Requires post event enabled

:discourse2: Hosted by us? This plugin is available on our Business and Enterprise tiers Calendar | Discourse - Civilized Discussion

  1. categoryId is the category the calendar will be displayed on top of.
    postId is the post in which you put the calendar in with [calendar][/calendar] ↩︎

  2. it can display a time zone picker on the upper right of the calendar. False by default, you can enable it with tzPicker=true ↩︎

  3. it can hide Saturdays and Sundays from the calendar. True by default. You can set it to false with weekends=false. ↩︎

  4. defaultView will set the calendar’s view (day, week, etc;). It can be set as:

    defaultView=month (default)
    defaultView=listNextYear ↩︎


Wow, this plugin has come a long way since I last took a look at it, kudos! I have been testing it for us, and found a couple of bugs and feature requests :slight_smile:

First the bugs:

Holiday calendar seems to make TZ adjustments weirdly

I’ve set my locale (uk_sct) and indeed I see a holiday for the end of May (Mon 29th). However, it appears to have been timeshifted back, and thus appears on the Sunday:

(The blueish event is me manually adding the correct day)

This is more obvious in the list view, where you can see the hours of the holiday:

No Calendar nav for category calendars

Might just be a UI bug, but I have no nav to get to the calendar:

This means the calendar is visible when clicking the sidebar (where I land on mysite/c/events) but once I click Latest or Top I can’t get the calendar back.

And then a couple of things that would be nice to have:

Category-level ICS/GCal link

I can see that a single event has an “Add to Calendar” button, but I cannot see that for the whole calendar. As an example, I’ll take a screenshot from the Pavillion plugin on another forum:

Private invite list

The invite list great, and clearly people can opt out by not clicking any of the buttons. But I can see a scenario where you might want to restrict viewing it to certain people - not so different to when we make polls anonymous.

Auto-delete rules per calendar

I’d love to enable auto-delete for the staff calendar, but I don’t want it on the conference or meetup calendars. Would be lovely to control this more granularly :slight_smile:

If any of that needs to be taken to a GH issue, I’m happy to do that. Thanks!


Thanks for all the great work on this plugin.
It comes so close to doing everything we need. I love that it includes an “add to calendar” function (though I could wish it were more prominent). However, when I use it, I find that none of the description or the URL is included in the event that gets added to my calendar (whether using the ICS or goole calendar option). We use the URL for the zoom link for meetings - and that’s a critical piece of information to be included with the calendar item. Am I doing something wrong or is that how the plugin is supposed to work?

I’m on a business plan (Discourse-hosted), so can’t move over to the Pavilion Events plugin.

1 Like

PR #169: Adds .ics endpoints for calendars, topics and posts by xfalcox · Pull Request #169 · discourse/discourse-calendar · GitHub has been lingering for two years! Adding ICAL support for the Discourse calendar is a must! What is preventing this from being merged?


Can a custom field be hidden from the Add Event modal?


I’m using an API script to post events from the Meetup API. Clearly I want to avoid duplicates, so I’m storing an ID-string in a custom field, so I can tell if I need to update an existing topic or create a new one - but I don’t really need to bother my users with that field, it’s just for this tool. Is that possible?

EDIT: never mind, I just discovered the external_id parameter in the create_topic API, which solves my use-case.


Two more thoughts / requests…

We have an Events category, and we use discourse post event enabled to have a category-level calendar populated from the posts.

We also use tags a lot, so it would be nice to:

  1. Be able to filter on a tag and have the calendar display only the filtered events (currently it vanishes altogether)
  2. Colour events in the calendar by tag (similar to how the staff-holiday calendar uses multiple colours)

+1 to all of this, yes please! :heart: :heart_hands: :pray:


Since it came up in a discussion and for the forum I am working on:

Would contributing caldav support be out of scope (not committing to this yet but asking if it would be accepted if I find time to commit doing it) for the plugin? It’s quite a big spec with a few yet to clear up behavior like what happens if there is an event created using that API in discourse side of things.

Other than that I assume webcal/ical would be small enough to be an alternative right?


A post was split to a new topic: Create a custom field dropdown