[GH-ISSUE #24909] feat: import & subscribe to external calendars (ICS/CalDAV/Google/Outlook/Zimbra) in Calendar workspace #123739

Closed
opened 2026-05-21 03:13:24 -05:00 by GiteaMirror · 3 comments
Owner

Originally created by @CallSohail on GitHub (May 19, 2026).
Original GitHub issue: https://github.com/open-webui/open-webui/issues/24909

Check Existing Issues

  • I have searched for all existing open AND closed issues and discussions for similar requests. I have found none that is comparable to my request.

Verify Feature Scope

  • I have read through and understood the scope definition for feature requests in the Issues section. I believe my feature request meets the definition and belongs in the Issues section instead of the Discussions.

Problem Description

Check Existing Issues

  • Searched open + closed issues. #9310 (google calendar sync) was closed
    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

  • Belongs in Issues, not Discussions.

Feature Description

Allow users to bring events from external calendars into the EveGPT/OpenWebUI
Calendar workspace. Three modes, ranked by usefulness:

  1. ICS URL subscription (read-only, auto-refresh)

    • Add Calendar → "Subscribe from URL" → paste ICS link → refresh interval.
    • Covers Google (secret iCal URL), Outlook published calendars, Zimbra
      (/dav/<user>/Calendar?fmt=ics), Nextcloud, university LDAP/SOGo, etc.
  2. One-time ICS file import (.ics upload → events copied into a chosen calendar).

  3. CalDAV two-way sync (full read/write — Google, Zimbra, Nextcloud, iCloud).

  4. 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 on
Scheduled 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 sources
  • DELETE /api/v1/calendar/sources/{id}
  • Background scheduler refreshes ICS sources on CALENDAR_SOURCE_REFRESH_INTERVAL.
  • Imported events stored with source_id + external_uid (idempotent upserts
    on RFC 5545 UID, dedup on re-sync, deletes propagate).
  • New permission calendar.external_sources + per-group toggle.

Env vars

  • ENABLE_CALENDAR_EXTERNAL_SOURCES (default True)
  • CALENDAR_SOURCE_REFRESH_INTERVAL (default 3600)
  • CALENDAR_ALLOWED_SOURCE_TYPES (default ics_url)

Alternatives considered

  • Community tools (Google Calendar tool, Zimbra SOAP pipe) — work for read-only
    context injection inside chat, but events don't appear in the workspace UI
    or feed automation reminders.
  • n8n bridge writing via POST /api/v1/calendar/events/create — works today
    but requires admin glue per user, no UI, no dedup logic.

Willing to contribute

  • PR available if maintainers green-light the design.

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:

  1. ICS URL subscription (most useful, easiest to ship)

    • Calendar sidebar → "Add Calendar" → new tab "Subscribe from URL"
    • User pastes an ICS feed URL (Google secret iCal, Outlook published link,
      Zimbra /dav/<user>/Calendar?fmt=ics, Nextcloud, SOGo, etc.)
    • Configurable refresh interval (default 1h, min 15m)
    • Events appear read-only in the workspace, color-coded per source
    • Idempotent re-sync on RFC 5545 UID (no duplicates, deletes propagate)
  2. One-time ICS file upload

    • "Import .ics file" option → user picks target calendar → events copied in as
      normal editable events
  3. CalDAV two-way sync (read/write, covers Google Calendar, Zimbra, Nextcloud,
    iCloud, mailbox.org, SOGo)

    • Profile: server URL + username + password (or app password)
    • Changes made in EveGPT push back to the upstream calendar
  4. Provider OAuth shortcuts for Google and Microsoft Graph as a polished
    happy-path on top of CalDAV / Graph API.

Proposed backend

  • New table calendar_source(id, user_id, calendar_id, type, url, credentials_encrypted, refresh_interval, last_sync_at, etag, sync_token, status)
  • New endpoints:
    • POST /api/v1/calendar/sources
    • GET /api/v1/calendar/sources
    • POST /api/v1/calendar/sources/{id}/refresh
    • DELETE /api/v1/calendar/sources/{id}
  • Background sync runs inside the existing scheduler loop (reuse
    SCHEDULER_POLL_INTERVAL); imported events store source_id + external_uid
    for idempotent upserts.
  • New permission calendar.external_sources (per-group toggle).

Proposed env vars

  • ENABLE_CALENDAR_EXTERNAL_SOURCES (default True)
  • CALENDAR_SOURCE_REFRESH_INTERVAL (default 3600)
  • CALENDAR_ALLOWED_SOURCE_TYPES (default ics_url,ics_file; admin opts into
    caldav, google, microsoft)
  • CALENDAR_SOURCE_MAX_PER_USER (default 10)

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

Originally created by @CallSohail on GitHub (May 19, 2026). Original GitHub issue: https://github.com/open-webui/open-webui/issues/24909 ### Check Existing Issues - [x] I have searched for all existing **open AND closed** issues and discussions for similar requests. I have found none that is comparable to my request. ### Verify Feature Scope - [x] I have read through and understood the scope definition for feature requests in the Issues section. I believe my feature request meets the definition and belongs in the Issues section instead of the Discussions. ### Problem Description ### Check Existing Issues - [x] Searched open + closed issues. #9310 (google calendar sync) was closed 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 - [x] Belongs in Issues, not Discussions. ### Feature Description Allow users to bring events from external calendars into the EveGPT/OpenWebUI Calendar workspace. Three modes, ranked by usefulness: 1. **ICS URL subscription** (read-only, auto-refresh) - Add Calendar → "Subscribe from URL" → paste ICS link → refresh interval. - Covers Google (secret iCal URL), Outlook published calendars, Zimbra (`/dav/<user>/Calendar?fmt=ics`), Nextcloud, university LDAP/SOGo, etc. 2. **One-time ICS file import** (`.ics` upload → events copied into a chosen calendar). 3. **CalDAV two-way sync** (full read/write — Google, Zimbra, Nextcloud, iCloud). 4. **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 on Scheduled 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 sources - `DELETE /api/v1/calendar/sources/{id}` - Background scheduler refreshes ICS sources on `CALENDAR_SOURCE_REFRESH_INTERVAL`. - Imported events stored with `source_id` + `external_uid` (idempotent upserts on RFC 5545 UID, dedup on re-sync, deletes propagate). - New permission `calendar.external_sources` + per-group toggle. ### Env vars - `ENABLE_CALENDAR_EXTERNAL_SOURCES` (default `True`) - `CALENDAR_SOURCE_REFRESH_INTERVAL` (default `3600`) - `CALENDAR_ALLOWED_SOURCE_TYPES` (default `ics_url`) ### Alternatives considered - Community tools (Google Calendar tool, Zimbra SOAP pipe) — work for read-only context injection inside chat, but events don't appear in the workspace UI or feed automation reminders. - n8n bridge writing via `POST /api/v1/calendar/events/create` — works today but requires admin glue per user, no UI, no dedup logic. ### Willing to contribute - [x] PR available if maintainers green-light the design. ### 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: 1. **ICS URL subscription** (most useful, easiest to ship) - Calendar sidebar → "Add Calendar" → new tab "Subscribe from URL" - User pastes an ICS feed URL (Google secret iCal, Outlook published link, Zimbra `/dav/<user>/Calendar?fmt=ics`, Nextcloud, SOGo, etc.) - Configurable refresh interval (default 1h, min 15m) - Events appear read-only in the workspace, color-coded per source - Idempotent re-sync on RFC 5545 UID (no duplicates, deletes propagate) 2. **One-time ICS file upload** - "Import .ics file" option → user picks target calendar → events copied in as normal editable events 3. **CalDAV two-way sync** (read/write, covers Google Calendar, Zimbra, Nextcloud, iCloud, mailbox.org, SOGo) - Profile: server URL + username + password (or app password) - Changes made in EveGPT push back to the upstream calendar 4. **Provider OAuth shortcuts** for Google and Microsoft Graph as a polished happy-path on top of CalDAV / Graph API. ### Proposed backend - New table `calendar_source(id, user_id, calendar_id, type, url, credentials_encrypted, refresh_interval, last_sync_at, etag, sync_token, status)` - New endpoints: - `POST /api/v1/calendar/sources` - `GET /api/v1/calendar/sources` - `POST /api/v1/calendar/sources/{id}/refresh` - `DELETE /api/v1/calendar/sources/{id}` - Background sync runs inside the existing scheduler loop (reuse `SCHEDULER_POLL_INTERVAL`); imported events store `source_id` + `external_uid` for idempotent upserts. - New permission `calendar.external_sources` (per-group toggle). ### Proposed env vars - `ENABLE_CALENDAR_EXTERNAL_SOURCES` (default `True`) - `CALENDAR_SOURCE_REFRESH_INTERVAL` (default `3600`) - `CALENDAR_ALLOWED_SOURCE_TYPES` (default `ics_url,ics_file`; admin opts into `caldav`, `google`, `microsoft`) - `CALENDAR_SOURCE_MAX_PER_USER` (default `10`) ### 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_
Author
Owner

@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:

  1. 🟣 #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

  2. 🟣 #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.

<!-- gh-comment-id:4488097147 --> @owui-terminator[bot] commented on GitHub (May 19, 2026): <!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟣 [#9310](https://github.com/open-webui/open-webui/issues/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* 2. 🟣 [#24490](https://github.com/open-webui/open-webui/issues/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.
Author
Owner

@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

  • CalDAV clients exposed to agents (so the LLM can read mail and calendars
    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:

  • No way to add an ICS feed URL in the Calendar workspace
  • No .ics file upload path into a workspace calendar
  • No CalDAV source type on calendar_source (the table doesn't exist)
  • No background refresh tied to SCHEDULER_POLL_INTERVAL for external feeds
  • No dedup-on-UID logic for re-syncs
  • Imported events don't flow into Scheduled Tasks view or reminder toasts

Both 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.

<!-- gh-comment-id:4488146667 --> @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 + CalDAV *clients* exposed to agents (so the LLM can read mail and calendars 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: - No way to add an ICS feed URL in the Calendar workspace - No `.ics` file upload path into a workspace calendar - No CalDAV source type on `calendar_source` (the table doesn't exist) - No background refresh tied to `SCHEDULER_POLL_INTERVAL` for external feeds - No dedup-on-UID logic for re-syncs - Imported events don't flow into Scheduled Tasks view or reminder toasts Both 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.
Author
Owner

@Classic298 commented on GitHub (May 19, 2026):

https://github.com/open-webui/open-webui/issues/24079

<!-- gh-comment-id:4488402313 --> @Classic298 commented on GitHub (May 19, 2026): https://github.com/open-webui/open-webui/issues/24079
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/open-webui#123739