Discourse Meta archived in May, 2026

Discourse Calendar (and Event)

Discourse
:discourse2: Summary Discourse Calendar and Event adds dynamic and interactive calendar and event features to your Discourse site.
:open_book: Install Guide This plugin is bundled with Discourse core. There is no need to install the plugin separately.

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:

/admin/plugins

Features

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.

Calendars

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:

Events

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)
map events title Maps title of the sidebar calendar based on category. Defaults to “Upcoming events”

Event Settings

Name Description
discourse post event enabled Enables the Event features. 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
map events to color Assigns an event color to a specified tag or category

:information_source: :curling_stone: The discourse-post-event/events.json endpoint now has an added parameter to switch between simple and detailed response. To get the detailed response you can add ?include_details=true:

/discourse-post-event/events.json?include_details=true

Integrations with Other Plugins

You can use a component from this plugin with Right Sidebar Blocks. You’ll want to ensure the desired route is enabled in the Right Sidebar Blocks component. The block name will be upcoming-events-list. Historically, there were additional settings required in the Calendar plugin itself, but this has been streamlined.

This is how the sidebar calendar will appear by default.

If you don’t want the time, you can add an empty timeFormat value in the component’s block setting.

: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=agendaDay
    defaultView=agendaWeek
    defaultView=month (default)
    defaultView=listNextYear ↩︎

Last edited by @tobiaseigen 2025-07-16T21:10:06Z

Check documentPerform check on document:
martyn_thomas

This plugin is promising - but there’s some features that are missing that prevents us from jumping from Pavilion’s plugin

  • Display non-all-day events with the start time on the calendar, currently every event looks like an all day event.

  • ‘Add Event’ button in the composer next to the tag selector (not hidden in the cog)

  • Limit which categories can have events, and if a events are compulsory in a category

Nice to haves:

  • Event meta data in the topic only appears/is entered at the top of the topic (instead of where ever the curser is
  • ability to limit which groups can make events in a category (for example - only ‘EventPlanners’ group can create events in the ‘Discussion’ category, but all users can create non-event topics (or edit topics if the topic is set to Wiki)
  • change URL of /upcoming-events to /calendar
JammyDodger

2 posts were split to a new topic: Holiday status being incorrectly applied

pokapow

Hello there,
Thank you for this work.

I have 2 UX questions:

  • Is it possible to display “Add event” button next to “Add location” button in topic editor ? Like it was the case with pavillion plugin ?

  • Is there a possibility to add Calendar top menu entry ? I don’t find it in settings

AstonJ

This looks great! Some thoughts/questions:

Am I correct in assuming that to create a calendar you simply create a new thread/topic, and paste the following into it:

Name Of Calendar 

[calendar]
[/calendar]

Then to add entries to the calendar you simply make a new post in the sam thread with something like the following (by clicking on the insert time/date icon in the post options):

Name of Event/Entry

[date-range from=2024-04-18 to=2024-04-19 timezone="Europe/London"]

This adds the entry to the calendar which is great, however:

  • Is there any way to add entries to a calendar but let those entires have a dedicated thread/topic as well? (I see you can add events in new threads, but there doesn’t appear to be any way to add those events to a calendar).
  • Is there any way to feature ‘Upcoming Events’ from a specific calendar in the digest emails? Or maybe the left hand column, and with each entry linking to the dedicated thread for that entry?

If this is not currently possible do you have any plans to add it?

haozi

@vinothkannans Could you help me review this pr?

putty

Are there plans to add a URL feed that users can subscribe to? I’m sure it would be tricky for all events vs the ones they have RSVP’d to.

Secondly, an additional layer would be amazing if it could recognize private events (or maybe that’s just a different URL feed per group).

jordan-violet

There is no rss feed for the /upcoming-events url though—that would be a nice addition!

pokapow

What about caldav sync ?

Matthias_Schuster

That would also for me be a reason to switch, indeed.

Heliosurge

This needs more updating as it mentions a. Event Insert in composer and adding event details not as pictured. Unless Event was an add on?

Isambard

I’ve installed the plug-in and the calendar tag works in the first post of a topic. But I don’t see any event or calendar options in the gear menu:

Can someone please explain what I need to do to get the event option in the gear menu?

JammyDodger

You need to enable the Event portion of the plugin discourse post event enabled

Isambard

Thanks. I somehow missed this setting.

Heliosurge

How do you get create event to show in a Category topic with replies being events?

I see the create event works on creating new topics. But looking to have a Calender in a topic with replies adding events. It works partially with insert date but not as good as create event has more options.

eve

Currently users can set the region in their profile preferences.
grafik

I’d like to let them set their region during signup by showing this field in the registration form. Is that feasible?

joo

Will a deleted reply still appear on the calendar?

tonninseteli

I can’t find any setting for changing first day of week to monday, is this trivial to implement if missing? :thinking:

Another issue is that that time & date entry is broken, if it’s an all day event there should be an option to select it before the time entry fields mess up the dates, and the dates seem to change randomly when editing.

Also noticed that it’s possible to enter 00:00 in both time & date, (which sometimes works, sometimes doesn’t) leading to calendar giving an error which will then cause some conflict with drafts leading to a repeated 422 error until the page is rolled back to an earlier revision, then re-edited etc.

joo

Please refer here

Jagster

There isn’t such setting and that’s why I don’t use it. And I bet the team would fix that error if it would be trivial trick.

alexis_bacots

I’m fairly new to Discourse, so apologies if this is not the right place for it. How can I support this feature (set the week starting date to Monday in calendars)?
Starting on Sunday is really awkward and confusing for us.

NateDhaliwal

Make a topic in feature with the tag calendar-and-event , I think.

Jagster

I don’t know how, because nowadays week starts from monday. Because it doesn’t follow my personal language setting then it may follow language of forum?

edit

And this I found.

So, if it shows sunday starting a week there is either a bug, forum is un-updated or you are usin some other calendar-plugin?

alexis_bacots

Hum, I have updated both discourse and the plugin yesterday, it’s the right plugin, and my weeks are still starting on Sunday. That’s weird.

Edit: the category calendar starts on Sunday, but the calendar in the post starts on Monday. That’s probably a bug.

Moin

I think it is expected to work like this

nat

Ah, let me have a look since I’m in the vicinity.

nat

Just a small update that I took a look at “Monday”. It’s a little interesting because it looks like we’re doing all the correct things in setting up the calendar.

Ideally what should happen now is that we use your site’s locale to set the calendar’s locale (not user’s locale). If we use “en-gb” for example, it should use Monday per fullcalendar/locales/en-gb.js at v4.0.0-alpha.3 · fullcalendar/fullcalendar · GitHub, though I am seeing that is not the case despite the docs saying so - weekNumberCalculation - Docs v4 | FullCalendar.

We can force a “Monday” by using an “ISO” setting on the calendar itself but it does not feel right.

In any case stay tuned for an update. We are using a very old version and could use a refresh.

satonotdead

Hello! I’m planning to integrate this plugin with events on Jitsi and I wonder if there is possible to display the birthdays of users as events?

That should enable cool automations to engage :slight_smile:

putty

Have you seen the Cakeday plugin?

tobiaseigen

It sounds to me like you are wanting an automation that creates a topic when a birthday rolls around with the event already added to the topic. That way people could be invited to join in a discussion to share pictures or whatever to celebrate a member’s birthday. And you could also schedule a birthday party using jitsi!

nat

2 posts were merged into an existing topic: Bulk Invite via modal only allowing one user (and not displaying correctly)

benji

Howdy, all! I’ve just fixed a small issue regarding the integration with the Right Sidebar Blocks component.

Previously, a week-long event would only show the first day (even if it had passed) and no subsequent days:


(Note: this was taken on the 28th, and the 15th is still hanging out)

Now each day of the event from the current day forward will show up in the sidebar calendar:

dubwoc

Was it intentional to remove the “Invited Groups” field from the create event dialog? I looked through the commit history and didn’t see any mention of this desire but maybe I missed it. When I roll back a couple of weeks to commit: 54460416c2efe30f8265ed7b5aa06743f615e8b3 this functionality is restored.

Example of previous behavior:

Current Behavior (commit: 588052ff0ddd6c399659f4545ef4525967a3a4e1):

nathank

If you select “Private”, does the field reappear?

dubwoc

It does not, sorry, I should have included a screenshot with that exact state:

You can observe the same behavior on the try.discourse.org site.

I confirmed that the commit directly after the good one I somewhat randomly picked introduces the change: b4c4e4e0bcc94b99ef8b582454e938a72389867d

DEV: migrate post event to glimmer (#615)
    
    This commit is making two major changes:
    
    - Move all the post event widgets code to glimmer
    - Implement tracked models to ensure reactivity, many paths didn't have real reactivity atm and were mostly working by luck or the fact that widgets re-render a lot
elRicharde

Hi Everybody :wave:

we want to switch from eventPlugin to this official plugin. Actually most of our requirements do work now completely with this plugin as well.

I just saw one minor Bug:

And there is one requirement we´d love to have:

  • we need to be able to force all topics in category need to be an event, in our forum we have separate calendar categories.

If i can help with anything just let me know.

Thanks for your time, cheers Richarde

paulswithers

I’m using the calendar plugin with event colors. However, it only seems possible to set the background color to an explicit value. This means the same background color is used for dark and light mode, whereas the font color changes, resulting in some challenges for supporting accessibility.

Looking at the source code, it appears to be managed by a JSON schema discourse-calendar/lib/discourse_calendar/site_settings/map_event_tag_colors_json_schema.rb at main · discourse/discourse-calendar · GitHub.

Is there a way to set this to an SCSS variable defined in a color_definitions.scss, so it can use the #dark-light-choose() function to switch depending on mode? The editor allows switching between RGB, HSL and HEX, but HEX forces upper case and has a character limit, so can’t be used.

Alternatively, would be it possible to define color as well as background color?

I check to see if it added the relevant tag / category it’s using to the HTML tags, but it’s not. That would have allowed programmatic setting of the styling separate from the plugin settings.

Any suggestions or feasibility of enhancements would be welcome.

We_the_Makers

Hello, is there a way to limit the amount of people of seats for a puplic Meeting? If not is there a way to allow only specific groups to attend certain meetings? Thank you

omegerard

I’ve been using this plugin on a production (docker) site. No problem. Works as described. And it would solve one of the main problems of my client if the “event” component had one more feature.

Missing feature: put members who say “Yes” to the invitation in a dedicated group.

Intended solution:

  • use the (event) custom field to enter the name of the dedicated group
  • write a plugin that add everyone who clicks “Yes” in that group

My problem: I cannot start developing a plugin as the Calendar and Event plugin does not seem to work in my (non-docker) development server. Though the plugin appears to compile well, saving a topic takes a long time and end up with an internal error. But the topic itself seems to be stored in the database. If I click on it, I get this error message: “Sorry, we couldn’t load that topic”.

Upon removing the Calendar plugin, the topics and posts can be accessed without any problem.

Has anybody experienced a similar behaviour? How I can proceed best to get around this hurdle?

Aurora

We would need that too!

Aurora

I miss the function for repetitive events which in the rhythm “every 1. Monday of the month” take place.

What can I do? Would there be another plugin that works better?

xErrorAmelie

Is there any way to manually force “Monday”, as the first day of the week, on our instance, for now?

DrekkSama

Does anyone know of a way for URL of the event to only show up when they click “going”? especially for Private events.

putty

Have you considered setting the event permissions to the intended groups?

tvavrda

No, but you can vote for it.

Aurora

I have a problem. With recurring events, participants remain listed even after the event has ended. This makes it unclear whether they signed up for the past event or the next one.

It’s possible to remove participants manually, but only if you have moderation rights.

Is there a solution for this?

The other problem: In the calendar, for recurring events, only the next upcoming event is displayed.

This is also inconvenient—if I want to check which events are scheduled in May, I can’t see them.

nathank

Have you considered using Events Plugin 📆 instead? It handles that particular issue nicely!

renato

What Calendar are you seeing this behavior: the one within a category or the /upcoming-events calendar?

Is your plugin up-to-date? We had a fix on early January for the /upcoming-events calendar.

paulswithers

I’ve enabled a calendar in a category. When I filter the category on a tag, the topics listed in the category are filtered. But the topics showing in the calendar for the category are not. I can’t see anything in the settings but maybe I’ve missed something. Or is this functionality not available?

Jim_Starkweather

Not sure if this is connected to the plugin or an issue with the greater Discourse translations at-large, but a user reported this missing variable for the Dutch translation in the events area.

Milenski

This is a plugin I definitely needed! Thanks for the good work :slight_smile:

HAWK

A post was split to a new topic: Calendar feature

tobiaseigen

A post was split to a new topic: Creating events doesn’t respect user’s 12 hour time locale

bitmage

As an FYI to everyone using this plugin: If you want to give all logged in members access to this feature DO NOT use the everyone group, use trust_level_0. It was non obvious to me until I read that the everyone group actually includes even non-logged in users and that it’s generally not appropriate to attach permissions to this. (In practice, associating the calendar permissions with everyone does nothing at all - new users will be unable to access the feature.)

The plugin might do a better job of 1) eliminating everyone from the selection, 2) having some note to the admin to use trust_level_0 if that is their intention.

Or Discourse could change their APIs to remove the everyone selection to make it more natural for plugin developers to offer the right options.

Cheers and thanks for the plugin. Very useful in my community!

Moin

It’s a mistake in the Dutch translation. In this case, the placeholder %{duration} was translated to %{duur}.
Crowdin

It seems this has also happened on some other strings:


I have tried to fix the placeholders, but because the old ones have already been approved, a new translation no longer overwrites the existing one. Someone with permission to approve the new translations is needed to get the changes to GitHub.

nathank

This is an old bug:

Nick_Stager

This appears to still be an issue, did you ever figure out a work around besides not setting an end date?

benji

Hey Nick!

I’m not sure what specifically you’re referring to. Happy to help if you’re able to share any other details.

Nick_Stager

Hi Benji, I replied to your post which is what I was referring to, when I make an event that occurs over successive days (in this case an author AMA) the upcoming calendar sidebar view shows an event for each day (reposting your screenshot):

In your screenshot your ‘hey let’s get tea’ event is duplicated four times, this happened to us as well and our solution was just to not have the calendar event include the start and end date, only the start date, but that’s not ideal.

Did you ever figure out a solution for this so that you can keep an event with different start and end dates without the event being duplicated on ‘upcoming events?’

It looks as though you thought the non-duplication was a bug, I guess it would be nice to have the option to have it be duplicative or not.

benji

Ah, I see! Yeah, the non-duplication was a bug, but I see your point. I’ll pass this along to the team for you and see what they think. Thanks for the update!

pbstgbr

same here!! It would be great if such function would exist!! additionally, a waiting list function would be also nice to have :slight_smile: thank you very much for this plugin!!

tobiaseigen

Hi Nick! The behavior you are seeing is intended, but I can see how it appears repetitive.

Could you start a new topic in Feature to lay out what you are looking to see changed in the way events with an end date are displayed? Ideally with a mockup and/or examples from other event platforms.

We can then talk about it there and clean up the replies here.

gilles

Hello community, I am looking for a solution to see the participants who are attending the upcoming events on the events page. Thank you.

tobiaseigen

The content in the red box in your pic shows the local time zones of all members in the specified group, using markdown like this in your post. See the settings in the first post above.

[timezones group="team"]timezones[/timezones]

Can you share an example of what you are wanting this to look like? Each event does have a participants list which you can see on the events page, in a popup on the event menu, and export to csv.

It might help us to help you if you can tell us some more about your site and what you are trying to do with this plugin.

gilles

Thanks Tobiaseigen
I will try to explain. :sweat_smile:
I manage a board game association. I use events as game tables.
Players participate in events (game tables) and I wanted to display the events with the participants to see the available spots for each event directly, to avoid having to look through each event. And I wanted to display this in upcoming events.
I don’t know if I am very clear. :sweat_smile:

mpaulhac

Hi all! I’ve installed the Right Sidebar Blocks plugin to display upcoming events in the right sidebar using the upcoming-events-list block. However, after creating an event, I keep getting an “Invalid date” error in the upcoming events list.

Has anyone encountered this before? Any idea what I might be doing wrong?

Thanks a lot in advance for your feedback and support!

Andrew_Rowe

no, and I have right side bar with upcoming events and it works

is the event set to a proper time? Maybe show us the event

mpaulhac

Hi Andrew, thanks for your answer! Here are screenshots of the event:

Andrew_Rowe

huh… your event looks good to me and the date looks good in the upper left corner of your second screen shot so its working, just not on your right side bar
here’s mine

mpaulhac

I might have misconfigured the right sidebar plugin for the upcoming events list, could you perhaps share what settings you used?

Andrew_Rowe

here is the editor with the upcoming events block (it is the first one in my lists)


and here is themes and components view
Those two are the only settings I’ve changed. The first one launches the editor shown above. The second one is just what views the side bar shows in

mpaulhac

I tried changing my settings to match yours, but it’s still not working, I have no idea why! I think I’ll give up on this for now :sweat_smile:
Thanks so much anyway for your time and support, I really appreciate it!

Moin

Hey @mpaulhac

It seems your forum is hosted by Discourse. Before you give up: have you tried contacting their support? Unlike support provided by the community, they can see your settings and can probably more easily find out what’s wrong.

mpaulhac

Hi @Moin! Thanks for the suggestion! We haven’t contacted their support yet, but that’s a great idea. We’ll reach out to them directly to see if they can help identify the issue more efficiently. Really appreciate your help!

Neil_Evans2

I’m seeing this too - but only for particular dates. If I move the event to another week, it works fine! It only seems to be a problem in Safari - it’s fine in Chrome, Firefox and Edge

mpaulhac

Hi Niels! I’ve just checked and it works fine on Google Chrome, same as you. The problem is indeed with Safari :thinking:

Thorsten

We updated our forum to Discourse version 3.5.0.beta6 a few days ago. After the update the date of all events is no longer shown correctly in the posts.

Here is an example:

The event was created before the update and looks like this:

[event start="2025-06-21 14:00" status="public" timezone="Europe/Berlin" end="2025-06-21 16:00" url="https://swisstesladay.ch/"allowedGroups="trust_level_0"]
[/event]

The “format” parameter is not part of the event but is shown in the redered post.

I saw that there are a few new commits for the calendar plugin. Do you think updating the plugin to the latest version would solve the problem?

Thank you in advance for the support.

Moin

I think so. There was a fix within the last week

Thorsten

Thank you for the reply and the link to the other thread.

We will update to the latest version of the calendar plugin in the next days.

opcourdis

Thanks a lot for the 06/2025 update bringing many new features. This plugin is really a base stone to build a community, I think any forum system should have such a feature but most of them don’t.
Discourse developers are great at understanding fundamentals needs for communities ! You guys rock !

tobiaseigen

:partying_face: This plugin is now bundled with Discourse core as part of Bundling more popular plugins with Discourse core. If you are self-hosting and use the plugin, you need to remove it from your app.yml before your next upgrade.

Aurora

We really need the ability to limit the number of participants for events, as many of our events have limited capacity.

Currently, the event system does not allow us to:

  • set a maximum number of participants,
  • see who signed up first (no registration timestamps),
  • manage a waitlist or notify people when a spot opens up.

We would find the following features very helpful:

  1. A participant limit (cap) that prevents more users from signing up once full.
  2. A waitlist for those who still want to attend after the event is full.
  3. Automatic notifications when a spot becomes available.
  4. Optional timestamps to see the order of sign-ups (useful for fair prioritization).

This would be incredibly useful for communities running in-person or capacity-limited events.

Is anything like this already planned or in development?
Or are there any known workarounds for this use case?

Thanks so much in advance!

Ethsim2

Thanks Aurora — really excited to hear that native calendar work is active again!

We’d also like to surface one additional high-impact request that’s come up in a number of community discussions: iCal feed sync.

This was broken out into its own dedicated topic here:

The ability to subscribe to external .ics feeds (such as school timetables, civic calendars, or organizational events) and have them reflected in a Discourse topic calendar would make this feature vastly more useful for many real-world deployments. Without it, we’re forced to manually copy events over, which is error-prone and hard to maintain.

We’d really appreciate any comment from the Discourse team about whether parts of that proposal — like one-way iCal sync, feed refresh interval settings, or optional event tagging — are in scope for the upcoming implementation.

Either way, thanks again for breathing new life into Discourse Calendar — we’re looking forward to what’s ahead!

opcourdis

if you want to show the create event button from the composer directly like below , use the code below in your theme’s header. admin>appearance>theme>edit>edit code>head(make sure it is placed between tags)

Tested on discourse 3.5.0.beta9-dev on desktop in firefox

 <!-- Custom Create Event Button (Icon-based, Language-proof) -->
<script>
(()=>{const e=".d-editor-button-bar",t=".btn.no-text.fk-d-menu__trigger.toolbar-menu__options-trigger.toolbar__button.options.toolbar-popup-menu-options",n=".fk-d-menu__inner-content",o=".d-modal.fk-d-menu-modal",c=e=>{const t=e.querySelector('svg use[href="#calendar-day"]');return t?t.closest("button"):null},r=(e,t,n=4e3)=>new Promise((o,c)=>{const r=t(e);if(r)return o(r);const l=new MutationObserver(()=>{const n=t(e);n&&(l.disconnect(),o(n))});l.observe(e,{childList:!0,subtree:!0}),setTimeout(()=>{l.disconnect(),c()},n)}),l=(e=4e3)=>{const t=new MutationObserver(()=>{document.querySelector(o)&&t.disconnect()});t.observe(document.body,{childList:!0,subtree:!0}),setTimeout(()=>t.disconnect(),e)},s=e=>{if(e.querySelector(".custom-create-event-btn"))return;const o=document.createElement("button");o.className="btn no-text btn-icon toolbar__button link custom-create-event-btn",o.title="Create event",o.innerHTML='<svg class="fa d-icon d-icon-calendar-day svg-icon"><use href="#calendar-day"></use></svg>',e.appendChild(o),o.addEventListener("click",async()=>{const e=document.querySelector(t);if(!e)return;e.click();let o=document.querySelector(n);o||(await new Promise((e,t)=>{const c=new MutationObserver(()=>{(o=document.querySelector(n))&&(c.disconnect(),e())});c.observe(document.body,{childList:!0,subtree:!0}),setTimeout(()=>{c.disconnect(),t()},2e3)}));try{(await r(o,c)).click(),l()}catch{}})},u=new MutationObserver(()=>{const t=document.querySelector(e);t&&s(t)});u.observe(document.body,{childList:!0,subtree:!0});const d=document.querySelector(e);d&&s(d)})();
</script>

gilles

I tried the script, the event creation button is created correctly, but when I click on it, I get the same contextual menu as the plus button. I may have made a mistake.

Aurora

After the update it has improved, it appears at least only “Create event”

Screenshot is german, sorry.

opcourdis

Hi,

This works on the latest with 3.5.0.beta9-dev, I don’t know your version?

And this is javascript so you should provide the JS error from the console when you press F12 in your broswer.(you may click on the button once the console is open and this should provide info over what happens at this moment)

gilles

I have the same version 3.5.0.beta9-dev
Here is the console message


I must be doing something wrong :sweat_smile:

opcourdis

I don’t use Edge, can you try again with the script that I’ve just updated in the original post as I found mistakes that I corrected. If it does not work I will update later after I install Edge.

opcourdis

I’ve just updated the script to be more mobile compatible, it should work now, please copy paste the script from the original post

opcourdis

I confirm the updated code works fine in edge. If you have something like ublock you may always disable it for your discourse page but I don’t think its related.

gilles

Sorry, still the same problem for me, I must be doing something wrong

Yet I paste your script here correctly

opcourdis

Allright, thanks to Gilles situation, I could setup a selector based on the .svg class of the icon that is unique instead of a title attribute that would vary according to language, the script is also now minified and IIFE wrapped.

You may find the updated script here Discourse Calendar (and Event) - #535 by opcourdis

gilles

Thank you for your help :+1:

nathank

It would be very helpful to have your script wrapped up as a Theme component, and have the categories where it applies be selectable.

The use case I’ve got in mind is an ‘Events’ category, where I want to make event posting super-duper obvious.

Perhaps this could also be wrapped up together with your other excellent enhancement.

opcourdis

You may use what’s below and modify the first conditions to specify your categories, and to make the button more visible css will do it: .btn.no-text.btn-icon.toolbar__button.link.custom-create-event-btn {
order: -1;
}

<script>(()=>{if(!(document.body.classList.contains("category-events")||document.body.classList.contains("category-event2")||document.body.classList.contains("category-event3")))return;const e=".d-editor-button-bar",t=".btn.no-text.fk-d-menu__trigger.toolbar-menu__options-trigger.toolbar__button.options.toolbar-popup-menu-options",n=".fk-d-menu__inner-content",o=".d-modal.fk-d-menu-modal",c=e=>{const t=e.querySelector('svg use[href="#calendar-day"]');return t?t.closest("button"):null},r=(e,t,n=4e3)=>new Promise((o,c)=>{const r=t(e);if(r)return o(r);const l=new MutationObserver(()=>{const n=t(e);n&&(l.disconnect(),o(n))});l.observe(e,{childList:!0,subtree:!0}),setTimeout(()=>{l.disconnect(),c()},n)}),l=(e=4e3)=>{const t=new MutationObserver(()=>{document.querySelector(o)&&t.disconnect()});t.observe(document.body,{childList:!0,subtree:!0}),setTimeout(()=>t.disconnect(),e)},s=e=>{if(e.querySelector(".custom-create-event-btn"))return;const o=document.createElement("button");o.className="btn no-text btn-icon toolbar__button link custom-create-event-btn",o.title="Create event",o.innerHTML='<svg class="fa d-icon d-icon-calendar-day svg-icon"><use href="#calendar-day"></use></svg>',e.appendChild(o),o.addEventListener("click",async()=>{const e=document.querySelector(t);if(!e)return;e.click();let o=document.querySelector(n);o||(await new Promise((e,t)=>{const c=new MutationObserver(()=>{(o=document.querySelector(n))&&(c.disconnect(),e())});c.observe(document.body,{childList:!0,subtree:!0}),setTimeout(()=>{c.disconnect(),t()},2e3)}));try{(await r(o,c)).click(),l()}catch{}})},u=new MutationObserver(()=>{const t=document.querySelector(e);t&&s(t)});u.observe(document.body,{childList:!0,subtree:!0});const d=document.querySelector(e);d&&s(d)})();</script>



Thanks for the suggestion, I am still a bit new to discourse and will check the theme component, the button placement is better indeed but my other script for event participant limit might soon not be necessary because of this FEATURE: introduce max attendees for events by SamSaffron · Pull Request #34313 · discourse/discourse · GitHub

joo

After upgrading to the latest version of Discourse and the discourse-calendar plugin, I am seeing the following warning as an admin:

⚠️ Posts may not display correctly because one of the post content decorators on your site raised an error.
Caused by plugin 'discourse-calendar'
(this message is only shown to site administrators)
  • The calendar plugin is no longer working: calendar content and events are not displayed in topics.
  • The plugin was working correctly prior to the recent upgrade.
  • My Discourse site and all official plugins are now up-to-date.
cuo_wu

We’re using the Discourse Post Event plugin on our forum.
Currently, when a user joins (RSVPs) an event, the topic is automatically set to “Watching”, which means every new reply to the event topic triggers a notification to all participants.

We’d like to keep the notification level as “Normal” by default, even after someone joins an event.

I’ve checked the site settings but couldn’t find an option that works.
Is there a way to disable or change this auto “Watching” behavior when users RSVP to an event?

nathank

I don’t think so. But this would be a useful feature request.

A useful workaround might be to close the topic to stop replies, but have a chat channel associated with it (these don’t notify by default).

manuel

The label on the “Today” button can be misleading.

The button doesn’t actually navigate to the current day, it navigates to the current view of the active timeframe tab (Day/Week/Month/Year). On Day, Week and Month this does bring the current day into view. But on Year, it only navigates to the current year (which always starts in January).

It should probably be

  • renamed to more accurately describe it’s functionality, like “Current”
  • or, maybe better, not only navigate to the current year, but scroll to the current day on the Year list
Ethsim2

it would make sense to implement Add admin setting to change default Calendar view (Month / Week / Year) after this

elRicharde

I´ve made afeature-Request here and would be happy for any upvotes.

cheers Richarde

gilles

Hello everyone,

I was wondering if there is a way to display a bit more information in the selected event in the calendar (for example, display the description as well as the buttons to participate in the event and a small “more info” link to open the event topic, even though I know the title is a link to the topic)

Thank you :sweat_smile:

tmanpdx

I was looking at what is included as part of the various discourse licenses and am confused as several posts in the past have said that calendars and events are part of the discourse core, but when you look at the pricing plans, calendar is only included at the business tier?

Is this a typo?

RGJ

From a development and self hosting point of view, the calendar plugin is bundled with the core codebase. But not all managed hosting providers offer all functionality and all plugins on all tiers, just like discourse.org limits functionality like webhooks and API on the lower tiers.

tmanpdx

Ok, well that kills my idea of using Discourse for a community I am part of. I’ll abandon the idea of using Discourse. Thanks for the quick answer.

nathank

Have you considered self-hosting? While there is a learning curve, you can access virtually all functionality (including this plugin).

tmanpdx

I lack the technical depth to do this. I was hoping to get the community interested and there may be people in the community who would relish something like this - but while I would be willing to fund a $20/mo for 2-3 months to get it set up & working to try & convince people, and thus might find someone like that, without calendar, there will be no interest.

FYI - it’s a expat community in Mexico. They’re mostly on FB and I quit FB years ago. It’s an uphill climb, and without the community calendar, which is like 90% of what goes on FB, it’s a deal killer.

Moin

Then maybe another hosting provider is an option for you. Maybe you want to take a look at the pricing of Communiteq. They are one of the partners listed on discourse.org if none of their plans fit your budget.

long

Is there a good tutorial on how to actually set this up?

itsbhanusharma

As is the provided documentation is pretty clear to me, it’ll help if you share what’s not clear so it can be improved!

long

Thank you. It’s installed and I see the settings, but how do you actually get the calendar to display? I created an “Events” category. I want that category to be the only one where events are posted. Is this possible or am I way off thinking that it can be done like that?

itsbhanusharma

Did you try asking at ask.discourse.org?

long

Yes, and tried this also:

But this code doesn’t make the calendar show up:

calendar
/calendar
asc

I believe you can only restrict events posting by groups, not by category. On my instance I set it up to have the calendar display on one category, but then have a separate category for posting events which is viewable to all users but can only have topics/replies created by a restricted group. But I believe that group can also post events outside of the designated category, I don’t think there’s anything restricting the category they can post events to if they have the ability to post events.

Andrew_Rowe

I think you can have a category that every post is an event and also create events in other regular categories. You can also restrict which users can create an event…. I think

nathank

Well, here is where the plugin is a bit messy. And that is mostly due to its history.

It started out life as a plugin which enabled Topic calendars. In this case, every reply on the Topic was an event (if it included a date/time). The Holiday calendar is a great example / use-case of this.

Subsequently, the ability to turn the OP of a Topic into an Event (displayed on a sitewide calendar) was bolted on; this has the somewhat odd name of discourse_post_event. This can be controlled per Category (in the Category settings) and restricted to groups via the site setting discourse_post_event_allowed_on_groups.

Additionally, you can elect to display a Calendar of these OP events (‘post events’) above a specified Category (will have just the Events from that Category). You can also enable (via a site setting) some fancy sorting of the Topic list of any Category by Event - this is turned on via a Category setting.

Judging by the recent chatter on meta.discourse.org about it, these per-Topic events now appear to be the dominant way to utilise the Plugin.

Personally, I find the settings that govern all this a bit of a mish-mash, with some confusing cross-over between site settings, category settings, and terminology.

I’d love to see this tidied up / rationalised. As it covers a key functionality for most communities, I’d love to see the plugin made freely accessible to a wider range of Discourse users (currently it is quite paywalled unless you are self-hosting).

Shauny

On mobile there is no nice box around the extra text it adds to the topic title:

(“3 days ago” should be in a box)

Why is it missing? How can I add it in, do I just need to recreate the CSS?

pHneutre

I’m trying to find what the latest version of this core plugin is. As it is included in core, there is no repo link anymore (btw the link here is obsolete). How do I find this information?

manut

@pHneutre, we made our last contribs to this repo : GitHub - discourse/discourse-calendar: Adds the ability to create a dynamic calendar in the first post of a topic. · GitHub

pHneutre

Hey Manuel :slight_smile:
My question is, how do I find the latest version number of this plugin now?
Or does this concept of version number not exist anymore?

RGJ

Exactly. Since the code is included in core, there is no separate version number anymore.

manut

Ahhhh, the version number, not the last version… @RGJ is right, there is no more version numbers for core plugins.

oshyan

Couldn’t agree more! It’s an important area of functionality for many communities but this implementation is, sadly, IMO kind of a mess. I hate to say that, Discourse has really been taking some great strides in usability, design, etc. lately. But this is clearly far behind and seems to need a lot of work, if not a complete overhaul.

So… I decided to try to make my own more event-focused plugin. Here’s a video demonstrating some of its features after 3 days of vibe coding.

All of this stuff works, though I’m sure there are a lot of bugs still (and definitely a ton of layout, styling, and visual polish to do). My hope is to iterate on it for a week or so, with a good portion of that being bug fix and polish (feature freeze planned for tomorrow), after which I hope to deploy it on my own instance for live use. If things work out maybe I’ll be able to share it later, with the giant caveats around it being entirely vibes. :smile:

Here’s a short list of most of what it does:

  • Completely stand-alone events entities, with/without topics or chats (both work)
  • Venue and room handling (rooms within venues)
  • Room reservation with locations (multiple rooms per location), reservation contention handling, dedicated pages for locations and rooms, hours of operation for rooms, capacity, etc.
  • Month, week, day, venue (events per venue), and list views with rich filters across all views
  • Rich Event description editor and settings, repeat, All Day events, time zone support, event capacity, room capacity
  • Location pages with maps, rooms-at-location list, events-at-location list
  • Quick access to full event info from calendar and other views (pop-up details)
  • Drag on day/week view to create events + times (auto-filled in new event form)
  • Auto-filled event creation info depending on where/how the event is created, e.g. from a Room, that room is auto-filled
  • Calendar (ICS) subscriptions at multiple levels (per-calendar, per-location, etc.)
  • Permissions system for a variety of controls (who can create rooms/locations vs. events, etc.)
  • Drafts and publish/unpublish state for events, locations, rooms (and canceled state for events)
  • RSVP, event capacity, etc.
  • Events list widget for sidebar, event list in Categories
  • Most of this also works in mobile, though that’s still heavily WIP in particular
  • Probably other stuff I’m forgetting

Is it too much? Maybe! But I want to see what I’ll find useful before I prune. :smile:

I also hope to have a comprehensive range of settings in the back-end. If I can emulate some of what the existing official Events/Calendar plugin does with e.g. sorting topics by event date, I’ll try to do so.

gilles

I find that interesting :+1:.

In my opinion, it would be better to implement a complete event management system with parameters to enable or disable event modules to meet everyone’s needs. Currently, you always have to add different plugins to fulfill a request, so a very comprehensive plugin can only be beneficial for everyone :sweat_smile:.

Which AI do you use for coding?

oshyan

That’s more or less what I intend. I want to make different functions configurable and enable/disable in settings, within reason. I haven’t designed the plugin as modular from the beginning, perhaps I should have. But the functions are interconnected enough and I didn’t want to have it require its own plugins.

I use both Codex (OpenAI) and Claude (Anthropic, of course), both directly rather than through alternative harnesses/environments like Cursor. I get better use out of my subscription dollars this way, and in general I haven’t found the short-term advantages of other tools to make up for their various downsides. Staying in each respective company’s own native coding tools and ecosystem has served me better and better over time, and I use MCPs and skills to make up the difference (e.g. experimenting with novel memory skills backed by on-disk markdown files, or ygrep for file search, etc.).

nathank

Delighted to see this happening: