Calendar and Agenda stopped working

After updating to Discourse 3.2.0.beta4-dev with the latest Events version (0.2.11), the Calendar and Agenda views in my Discourse Events stopped rendering.

I’m seeing deprecation events in the console due to the usage of render, renderTemplate, registerUnbound, controller:navigation/category and controler:discovery/topics:

I’m not sure if these errors were already present before or not. Is anyone else having issues or have any solutions?

1 Like

Thanks for the report!

Unfortunately, Events seems to be another casualty of the significant changes in the Discourse core recently.

The Pavilion team are working their way through the impacted plugins, but we aren’t sure when Events will be back to 100% sorry.


I have just rollback from version 3.2.0+beta4 to 3.2.0+beta2 (commit be04154838c2e5a38cd544770d3290a9e2801241).

Everything went well and the calendar is back up and running.

1 Like

I’ve since learned that this isn’t a recommended path, as it introduces risks of database compatibility issues.

I’ve removed it from the post above.

1 Like

Hi - Is there an ETA on 3.2 support?

I’m in the progress of upgrading our Discourse from 2.4 to (hopefully) 3.2 and we use the Events plugin a lot. (in the meantime i’ve rolled back to 3.1.3 while i’m figuring out the plugin, but would love to go live with the latest version)


I’m not sure that there is at the moment sorry.

If you were prepared to sponsor some or all of the work involved, one of our devs might be able to pick it up.

Is there a way to migrate events from this legacy plugin to the new discourse event plugin ?

Your team told about merging the 2 pugins here: Events Plugin 📆 - #740 by angus - plugin - Discourse Meta

But no news since ?
We have a big community using it here:
And still stuck on discourse 3.2.0+beta2 :confused:

Thanks by advance.

Well, it isn’t that simple. The Pavilion plugin isn’t legacy - just hasn’t yet been updated to work nicely with the latest Discourse version.

And the ‘New Discourse Plugin’ isn’t really - it is just the official one. It lacks a lot of functionality, but has been actively improved and maintained / supported by the Discourse team over the past year very effectively.

Migration over

Not a direct way.

But you have a lot of events to move over, you could try an indirect method via the calendar connection functionality of the Pavilion plugin itself if you like. For example:

  1. Subscribe to the calendar for the whole site from a typical email calendar account (e.g. Google Calendar)
  2. In the Google Calendar app, clone the events into a new calendar.
  3. Connect this new calendar using the Connecting external calendars to the Events plugin functionality
  4. Choose to represent this calendar via the official plugin

This is just theoretical, but should work. You might want to try it on a staging server first though as it will create a whole bunch of posts. And you won’t be able to preserve any replies (although you could move them over manually).

I attempted to migrate the modals to Ember 4.x in this commit: wip · poka-IT/discourse-events@9fc7a6e · GitHub

However, this has led to bugs in the Discourse interface. I went over it step by step on the test02 branch. But I am not a web developer; I’m a sys admin.

Would you fancy completing this job, by any chance?
There are some very clear steps detailed here:

1 Like

That’s very cool @poka! What kind of bugs are you running into?

This commit is the most advanced: poka-IT/discourse-events/commit/6a5db9cbb94374d672f3acd9017ff32b7d7043f8

(Test02 branch)

When I click on “Add Event” button on a thread, nothing happen.

To be precise, i log correctly the init of the compnent add-event:

  init() {
    console.log('AddEvent component initialized');

  didInsertElement() {
    console.log('AddEvent component inserted into the DOM');

But no log happen for the update event:

  updateEvent(event, valid) {
    console.log('AddEvent component updateEvent triggered');
      bufferedEvent: event,

The action is trigger this way in add-event-control.js

  showAddEvent() {, {
      model: {
        bufferedEvent: this.event,
        event: this.event,
        update: (event) => {
          this.set("event", event);

edit: I understood this problem, .hbs template was not found, silently.
So i put eveything in the same folder, then i come to next errors…

1 Like

Good to hear that you found this one,

If there is something we can have a look at, let me know!

My biggest problem is, I have to rebuild all discourse container when I change something in the pluggin code.

I mount the pluggin like this in app.yml:

  - volume:
      host: /var/discourse/shared/dev
      guest: /shared
  - volume:
      host: /var/discourse/shared/dev/log/var-log
      guest: /var/log
  - volume:
      host: /path/to/discourse-events
      guest: /var/www/discourse/plugins/discourse-events

Then ./launcher rebuild app when I change just a comma in the pluggin code, so wait for 10 minutes before see the result.
Just a restart doesn’t apply changes.

Is there a faster way to dev a Discourse pluggin ?

Actualy modal pop, but not as expected…


index.js:2071 Uncaught TypeError: h.forEach is not a function
    at ze.didCreateElement (index.js:2071:1)
    at Object.evaluate (runtime.js:2845:1)
    at Object.evaluate (runtime.js:1052:1)
    at It.evaluateSyscall (runtime.js:4204:1)
    at It.evaluateInner (runtime.js:4175:1)
    at It.evaluateOuter (runtime.js:4168:1)
    at (runtime.js:4999:1)
    at Wt._execute (runtime.js:4986:1)
    at Wt.execute (runtime.js:4979:1)
    at Ut.handleException (runtime.js:4313:1)
    at Vt.handleException (runtime.js:4521:1)
    at Dt.throw (runtime.js:4260:1)
    at $e.evaluate (runtime.js:2088:1)
    at Dt._execute (runtime.js:4247:1)
    at Dt.execute (runtime.js:4232:1)
    at qt.rerender (runtime.js:4547:1)
    at hr.render (index.js:4674:1)
    at index.js:4934:1
    at Nt (runtime.js:4080:1)
    at gr._renderRoots (index.js:4916:1)
    at gr._renderRootsTransaction (index.js:4960:1)
    at gr._revalidate (index.js:4992:1)
    at invoke (backburner.js.js:280:1)
    at h.flush (backburner.js.js:197:1)
    at p.flush (backburner.js.js:358:1)
    at B._end (backburner.js.js:798:1)
    at B.end (backburner.js.js:589:1)
    at B._run (backburner.js.js:842:1)
    at B._join (backburner.js.js:819:1)
    at B.join (backburner.js.js:629:1)
    at l (index.js:81:1)
    at index.js:1781:1
    at e.flaggedInstrument (index.js:117:1)
    at index.js:1780:1
    at index.js:1754:1
    at d._triggerAction (d-button.js:117:25)
    at (d-button.js:87:21)

Certainly! Your life can be much easier!

See Set up a local Discourse Development Environment? - developers - Discourse Meta

There’s hot reloading and all.

1 Like

thank you I don’t how i made without hot reloading…

Now I have no scss applied:

But class name didn’t change.

I added this in plugin.rb:

register_asset 'stylesheets/common/event-form.scss'

I don’t know how it could work without…
But this doesn’t fix my problem.

I’m on this branch: GitHub - poka-IT/discourse-events at test02

Hi @poka,

How has your progress on this been going? Do you need any support?