i have successfully rebuild my Discourse instance🥲
Discourse’s official discourse-calendar plugin already supports .ics export, which is extremely useful for sharing Discourse events externally. However, many communities — particularly in education, government, or enterprise — rely on external iCal feeds to publish event information (e.g. from Moodle, Office365, Google Calendar, or institutional CMS platforms).
At present, there is no built-in way to import or sync from .ics sources. This limits Discourse’s use as a true calendar hub for communities that already publish important schedules elsewhere.
Feature Proposal
Add iCal feed sync (import from .ics URLs) to the Discourse Calendar plugin.
Core Features
Configure an .ics feed URL for a calendar-enabled category or topic.
Automatically import events into the calendar, matching the .ics feed.
Specify a sync interval (e.g. hourly, daily) or allow a manual “Sync now” button.
Use the event UID field to prevent duplicates and update modified events cleanly.
Optional Configs
Tag or label imported events to show their external source.
Choose between:
One-way sync (external → Discourse only),
or two-way sync (editing synced events inside Discourse pushes changes back — future scope).
Support multiple .ics feeds per calendar, merged into one view.
Visual indication that an event is externally synced (e.g. “Synced from: outlook.university.edu”).
Use Cases
Sector
Example Use Case
Education
Auto-populate student forums with term dates, course schedules, exams, etc.
Government
Sync official events from CMS or intranet to a public-facing community calendar
Companies
Mirror internal meeting calendars (from Outlook or Google Calendar)
Events forums
Integrate speaker lists or session schedules from external providers
Security and Privacy
Calendar feeds could support public or tokenized access (e.g. URL containing secret token).
Support for OAuth2 / Basic Auth could be a future enhancement.
Similar need discussed in older threads, e.g. here
Compatibility
This feature would not require discourse-events (now deprecated), and would work natively with the existing Discourse Calendar syntax ([calendar] and [event]). Users would still be able to create native Discourse events manually — iCal sync would just augment these calendars.
Would love to hear if this feature is already on the roadmap — or if others in the community would find it valuable.
@Ethsim2 This would be a huge feature, and I’ve been digging into how feasible it is now that Discourse is switching to FullCalendar.
@sam linked directly to fullcalendar.io recently, and it turns out FullCalendar now has first-class support for .ics feeds via their official plugin system — so the heavy lifting is already done by the library.
Proposal: Enable .ics Feed Sync Using FullCalendar’s Native Support
With the upcoming FullCalendar v6 integration into Discourse, the groundwork is in place to support this feature natively.
FullCalendar’s @fullcalendar/icalendar plugin (with ical.js under the hood) allows you to load public .ics feeds like so:
Sorry @Halden42 but I’m a bit confused about your post.
I understand that Discourse is “fixing the foundations” of the calendar system with the FullCalendar upgrade, but I’m worried about how much time it would take me to manually populate a busy calendar. I use the Discourse GUI every day for everything, and having to duplicate content outside the interface is a non-starter.
I noticed you mentioned a feature I really miss from Angus’s plugin, which I think captures the main point of syncing events into Discourse:
This part would be essential for my use case.
But I’m concerned because you didn’t go into any detail about how that could be implemented. Could you explain what that would look like in practice? Would Discourse create one topic per event? Would it support updates or deletions if the source calendar changes?
That’s the part I’d need to rely on most, and I’m just not sure yet how close we are to it.
תודה @Ethsim2 — זוהי המשך מעולה, ואני חושב שהדאגה שלך היא בדיוק הדבר הנכון: זה לא רק עניין של הצגת אירועים מפיד .ics, אלא של שילובם בדיסקורס בצורה שימושית וניתנת למעקב.
כשאמרתי “לקשר אירועים לנושאים או ליצור חדשים”, דמיינתי הגדרה דומה לאופן שבו הפלאגין של אנגוס עבד בעבר — שבו כל אירוע בפיד היה תואם לנושא בדיסקורס, ועדכונים לפיד היו משתקפים בנושא לאורך זמן.
כרגע, FullCalendar בפני עצמו אינו שומר אירועים — הוא רק מציג אותם מהפיד בטעינת הדף. לכן, אם אירוע נעלם מהפיד (כלומר, הוא בוטל או נמחק חיצונית), הוא פשוט נעלם בשקט מממשק המשתמש של לוח השנה.
אבל זה לא מספיק טוב עבור רוב זרימות העבודה מבוססות הפורום, במיוחד כאשר פוסטים של אירועים משמשים לדיון, אישורי הגעה או הודעות.
הנה מה שהייתי מציע עבור זה:
במקום להסיר את הנושא כאשר אירוע נעלם מהפיד, דיסקורס יכול:
להשאיר את הנושא במקומו
להוסיף שורה בראש כמו: ⚠️ אירוע זה בוטל או הוסר מלוח השנה המקור.
אופציונלית לנעול או להסיר את הנושא מהרשימה, בהתאם להעדפת המנהל.
זה ישמר את ההקשר, יאפשר תגובות, ויהפוך את הביטול לנראה לעין — מבלי למחוק דבר. מבחינה טכנית, זה בר ביצוע למדי: פשוט נסמן שה-UID כבר לא קיים בקובץ ה-.ics ונעדכן את הסטטוס של הנושא התואם.
אז כן — בעוד ש-FullCalendar עצמו אינו מנהל את הסטטוס הזה, דיסקורס יכול לטפל בזה בשכבת הסנכרון. המשימה שמביאה את הפיד (למשל, דרך Sidekiq) תעקוב אחר אילו אירועים היו קיימים בעבר וכבר לא, ותסמן את הנושא המתאים בהתאם.
אם מספיק אנשים יתעניינו בזה, אני חושב שנוכל לבנות מפרט מתאים. לא יהיה קשה ליצור אב-טיפוס.
Thanks for the thoughtful reply @Halden42 — this clears up a lot.
What you described here…
…is exactly the core use case I’ve been trying to recover since moving off Angus’s plugin. For me, the most critical part is not just rendering events visually, but syncing a live external calendar into the forum, where each event has a topic, and changes to that event (e.g. cancellation, reschedule) are reflected in that topic over time.
I’d be happy with a one-way sync model to start—read-only from .ics to Discourse—and even just basic update detection would cover 90% of my use cases. A “cancelled” status showing in the event topic if it’s removed from the feed would be ideal too, rather than deleting the topic outright.
If there’s a preferred place to propose a spec for this—perhaps once the FullCalendar upgrade stabilises—I’d be very interested in contributing or testing.
אנו מתחזקים מספר לוחות שנה של Office 365 — כל אחד עם עדכון .ics משלו — לסוגים שונים של פגישות: הוועדה הבכירה, מפגשי מעורבות ציבורית, קבוצות עבודה פנימיות וכן הלאה. עדכונים אלו כבר מובנים היטב ומתוחזקים באופן קבוע על ידי פקידים וצוותי אדמיניסטרציה.
מה שאנו זקוקים לו בדחיפות הוא דרך ל:
להירשם לעדכוני .ics שונים לפי קטגוריה (למשל, עדכון אחד לכל סוג פגישה)
ליצור אוטומטית נושא חדש בקטגוריית Discourse המתאימה
לוודא שהנושא מגיע לקטגוריה הנכונה, בדומה לאופן שבו התוסף של אנגוס איפשר לנו לסנן לפי תגיות או מטא-דאטה אחרים
לשקף שינויים (שעה, כותרת) בנושא אם אירוע הלוח שנה מתעדכן
לסמן או לסגור את הנושא באופן אופציונלי אם האירוע מבוטל או מוסר מהעדכון
עבור מועצות כמו שלנו, קטגוריות משמשות לניהול נראות גרנולרית — פגישות מסוימות הן פרטיות (למשל, בכירים או תכנון), אחרות הן ציבוריות. נושא שמועבר באופן שגוי עלול לגרום לחשיפת נתונים רגישים, ולכן אימות ברמת הקטגוריה הוא חובה.
נשמח לראות תמיכה כזו באופן רשמי בעדכון הקרוב של FullCalendar. זה יפחית משמעותית עבודה ידנית ויהפוך את Discourse לאפשרות הרבה יותר בת קיימא כמקור אמת יחיד לתיאום פגישות ושקיפות.
אני סטודנט לרוקחות בארה"ב, והאוניברסיטה שלנו מספקת את כל לוחות הזמנים של הסיבובים, הבחינות והתרגולים שלנו דרך פורטל לוח שנה. כתובות ה-URL של הפיד אינן מסתיימות ב-.ics, אך כאשר אני פותח אותן בכרום, הן מורידות מיד קובץ .ics תקין. אז הן בהחלט פידי iCal סטנדרטיים - רק עם מבנה URL שונה.
עד לאחרונה, השתמשתי בתוסף של אנגוס, והוא טיפל בפידים האלה בצורה מושלמת. כל אירוע יצר נושא, ויכולתי לנתב פידים שונים לקטגוריות שונות (למשל, “תרפויטיקה”, “סיבובים”, “בחינות”), מה שעזר לקבוצת הלימוד שלנו להישאר מאורגנת.
אבל מאז ששגיאת this.router האחרונה שברה את התוסף, נאלצתי להשבית אותו - כמו Ethsim2 - ועכשיו אין דרך קלה לשמור על לוח השנה שלנו מסונכרן.
אם התוסף הרשמי יוכל לתמוך ב:
פידי .ics נכנסים (גם אם ה-URL לא מסתיים ב-.ics)
יצירת נושאים עם מיקוד קטגוריה
תצורה ספציפית לפיד (למשל, פיד אחד → קטגוריה אחת)
זיהוי עדכונים וטיפול אופציונלי בביטול אירועים
…זה יהפוך את Discourse לכלי רב עוצמה לשיתוף פעולה אקדמי. זה עבד לנו בצורה מושלמת לפני שהתוסף נשבר - אז אשמח לראות את הפונקציונליות הזו מגיעה באופן מקורי.
אשמח לשתף כתובת URL של לוח שנה לדוגמה באופן פרטי אם זה יעזור בבדיקות.