mirror of
https://github.com/open-webui/open-webui.git
synced 2026-05-24 11:58:31 -05:00
[GH-ISSUE #24909] feat: import & subscribe to external calendars (ICS/CalDAV/Google/Outlook/Zimbra) in Calendar workspace #123739
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @CallSohail on GitHub (May 19, 2026).
Original GitHub issue: https://github.com/open-webui/open-webui/issues/24909
Check Existing Issues
Verify Feature Scope
Problem Description
Check Existing Issues
with the Calendar workspace ship, but external import/sync was never delivered.
#23974 (calendar creation) shipped. No issue covers external source import.
Verify Feature Scope
Feature Description
Allow users to bring events from external calendars into the EveGPT/OpenWebUI
Calendar workspace. Three modes, ranked by usefulness:
ICS URL subscription (read-only, auto-refresh)
(
/dav/<user>/Calendar?fmt=ics), Nextcloud, university LDAP/SOGo, etc.One-time ICS file import (
.icsupload → events copied into a chosen calendar).CalDAV two-way sync (full read/write — Google, Zimbra, Nextcloud, iCloud).
Provider OAuth (Google / Microsoft Graph) as the polished happy-path.
Why
Calendar workspace is useful, but users already have a calendar of record
(university Zimbra, Google Workspace, Outlook 365). Without import, the
workspace is a parallel silo — they won't move events in by hand. Sync makes
the AI scheduling features (
"remind me about X", automations onScheduled Tasks) actually reflect the user's real day.
Proposed minimal API surface
POST /api/v1/calendar/sources— { type: "ics_url"|"caldav"|"google", config }GET /api/v1/calendar/sources— list user's sourcesDELETE /api/v1/calendar/sources/{id}CALENDAR_SOURCE_REFRESH_INTERVAL.source_id+external_uid(idempotent upsertson RFC 5545 UID, dedup on re-sync, deletes propagate).
calendar.external_sources+ per-group toggle.Env vars
ENABLE_CALENDAR_EXTERNAL_SOURCES(defaultTrue)CALENDAR_SOURCE_REFRESH_INTERVAL(default3600)CALENDAR_ALLOWED_SOURCE_TYPES(defaultics_url)Alternatives considered
context injection inside chat, but events don't appear in the workspace UI
or feed automation reminders.
POST /api/v1/calendar/events/create— works todaybut requires admin glue per user, no UI, no dedup logic.
Willing to contribute
Desired Solution you'd like
Add native support in the Calendar workspace for importing and subscribing to external
calendars. Three import modes, in priority order:
ICS URL subscription (most useful, easiest to ship)
Zimbra
/dav/<user>/Calendar?fmt=ics, Nextcloud, SOGo, etc.)One-time ICS file upload
normal editable events
CalDAV two-way sync (read/write, covers Google Calendar, Zimbra, Nextcloud,
iCloud, mailbox.org, SOGo)
Provider OAuth shortcuts for Google and Microsoft Graph as a polished
happy-path on top of CalDAV / Graph API.
Proposed backend
calendar_source(id, user_id, calendar_id, type, url, credentials_encrypted, refresh_interval, last_sync_at, etag, sync_token, status)POST /api/v1/calendar/sourcesGET /api/v1/calendar/sourcesPOST /api/v1/calendar/sources/{id}/refreshDELETE /api/v1/calendar/sources/{id}SCHEDULER_POLL_INTERVAL); imported events storesource_id+external_uidfor idempotent upserts.
calendar.external_sources(per-group toggle).Proposed env vars
ENABLE_CALENDAR_EXTERNAL_SOURCES(defaultTrue)CALENDAR_SOURCE_REFRESH_INTERVAL(default3600)CALENDAR_ALLOWED_SOURCE_TYPES(defaultics_url,ics_file; admin opts intocaldav,google,microsoft)CALENDAR_SOURCE_MAX_PER_USER(default10)UX
The existing "+" calendar modal gets a tab strip:
[ Local ] [ Subscribe URL ] [ Upload .ics ] [ Connect Provider ]Subscribed calendars get a small 🔗 icon in the sidebar and a "Last synced X ago"
tooltip; failed syncs show a red dot + error message on hover.
Alternatives Considered
No response
Additional Context
No response
@owui-terminator[bot] commented on GitHub (May 19, 2026):
🔍 Related Issues Found
I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions:
🟣 #9310 feat: calendar
This is the original calendar feature request and explicitly mentions Google Calendar sync. The new issue extends that same calendar integration area with external subscriptions/import/sync.
by tjbck
🟣 #24490 feat: IMAP and CalDAV on User Level
This request asks for CalDAV integration at the user level, which overlaps directly with the new issue’s proposed CalDAV two-way sync for external calendars.
by TomHGitHub
💡 If your issue is a duplicate, please close it and add any additional details to the existing issue instead.
This comment was generated automatically. React with 👍 if helpful, 👎 if not.
@CallSohail commented on GitHub (May 19, 2026):
Thanks @owui-terminator — I checked both:
#9310 is the original Calendar feature request and was closed when the
Calendar workspace shipped (#23880). The body literally just says "google
calendar sync", but the closing scope only delivered the local workspace —
external sync was never built. So #9310 was closed-as-implemented for the
workspace, not for sync.
#24490 ("IMAP and CalDAV on User Level") is closed and overlaps with the
CalDAV slice of this request, but the framing is different: it asks for IMAP
as tools), not for external calendars to appear inside the Calendar workspace
UI. That's a related but separate surface — an agentic tool integration vs. a
first-class workspace data source with reminders, recurrence, color-coding,
and dedup.
This issue is specifically about the Calendar workspace consuming external
sources: ICS URL subscriptions (covers Google secret iCal, Outlook published
links, Zimbra, Nextcloud, SOGo with zero credentials), one-time .ics upload,
and CalDAV two-way sync — surfaced through the existing "Add Calendar" modal
and the existing reminder/scheduler pipeline.
Concretely, none of these exist today:
.icsfile upload path into a workspace calendarcalendar_source(the table doesn't exist)SCHEDULER_POLL_INTERVALfor external feedsBoth prior issues being closed without this shipping is exactly why I opened
#24909 — the gap is real and user-visible. Happy to scope it tighter if
maintainers prefer (e.g. ICS-URL-only as a v1, CalDAV in a follow-up), and
willing to send the PR.
@Classic298 commented on GitHub (May 19, 2026):
https://github.com/open-webui/open-webui/issues/24079