-
-
Notifications
You must be signed in to change notification settings - Fork 1
CalDAV
Two-way calendar sync with any CalDAV server — Nextcloud, Radicale, Baïkal, SOGo, Synology Calendar, Fastmail, iCloud, mailbox.org. Events you create or edit in Kinboard are written back to the server; changes made on a phone flow down at the next sync.
Configure it at Settings → Calendar → CalDAV.
Kinboard has supported .ics feeds since v1.0.19, and they cover a lot of ground — but a published .ics URL is a one-way, unauthenticated snapshot. CalDAV is the protocol those calendars are actually served over, and using it directly buys three things:
| ICS feed | CalDAV | |
|---|---|---|
| Authentication | None — the URL is the secret | Username + password |
| Direction | Server → Kinboard only | Both ways |
| Editing in Kinboard | No | Yes |
| Discovery | You paste one URL per calendar | Connect once, pick from the list |
If you're not in the Google ecosystem, CalDAV is the recommended way to connect a calendar to Kinboard.
-
Settings → Calendar → CalDAV → Add server.
-
Enter the server URL. The root is enough — Kinboard walks
current-user-principal→calendar-home-setto find your calendars, exactly like a native calendar client does. Common starting points:Provider Server URL Nextcloud https://cloud.example.com/remote.php/davRadicale https://radicale.example.com/Baïkal https://dav.example.com/dav.phpFastmail https://caldav.fastmail.comiCloud https://caldav.icloud.comSynology Calendar https://nas.example.com:5001/caldav.phpmailbox.org https://dav.mailbox.org/ -
Enter your username and password. Use an app-specific password wherever the provider offers one — Nextcloud (Settings → Security → Devices & sessions), Fastmail and iCloud all do. An app password can be revoked on its own without changing your account password, and several providers require one when 2FA is on.
-
Click Connect. Kinboard lists every calendar the account can see, marking which are read-only.
-
Tick the ones you want and click Add. Each becomes a calendar row in Kinboard, syncs immediately, and then re-syncs every 30 minutes.
Per-calendar colour, the assigned family member, and the holidays/waste-pickup flags are set afterwards with the pencil icon — same options as any other calendar.
- Window — events from 30 days ago through 60 days ahead, the same slice ICS feeds use. Multi-year calendars don't bloat the events table.
-
Schedule — every 30 minutes (
sync-caldavinwebapp/docker/ofelia.ini, at :15 and :45), plus Sync now in the settings page. - Change detection — Kinboard reads the collection's CTag first and skips the full fetch when nothing has changed, so a quiet calendar costs one cheap request per cycle.
- Recurring events — expanded locally, capped at 200 instances per series. Server-side expansion is optional in RFC 4791 and implemented inconsistently, so Kinboard does it the same way for every provider.
-
Writes — sent the moment you save, not on the sync cycle. Creating, editing or deleting an event in Kinboard issues a
PUT/DELETEagainst that event's resource straight away.
Every write carries the ETag Kinboard last saw for that event. If the event changed on another device in the meantime, the server rejects the write with 412 and Kinboard tells you instead of silently discarding the other change. Re-run Sync now to pull the newer version, then make your edit again.
Calendars the server reports as read-only — someone else's calendar shared with you, a subscribed holiday collection — get a Read-only badge and are never written to. If a server doesn't publish privilege information at all, Kinboard assumes the calendar is writable and lets a failed write be the authority; that's the safer direction to guess in.
Passwords go into the integration_secrets table, which is revoked from the anon and authenticated database roles and reachable only by the server. They are never included in an API response and never reach the browser — which is why the edit dialog asks you to re-enter a password to change it rather than showing the stored one.
Removing a calendar deletes its events and forgets its password. The calendar on the server is untouched.
A CalDAV server on a private address (https://192.168.1.10/..., https://nas.local:5001/...) is fine — Kinboard deliberately does not apply the public-URL guard it uses for recipe imports, because self-hosted-on-the-LAN is the main use case. The trust boundary is the same one Home Assistant and Immich sit behind: an admin-configured URL in a PIN-gated settings page.
A self-signed certificate will be rejected. Either use a certificate the Kinboard container trusts (a LAN CA, or a real certificate via your reverse proxy), or reach the server over plain http:// inside a trusted network.
-
Editing a single occurrence of a repeating event. A recurring series is one resource on the server; changing one occurrence needs a
RECURRENCE-IDoverride that Kinboard's event model has nowhere to store. Kinboard declines the edit and points you at your calendar app. Whole series still sync and display normally. - Creating recurring events. Same reason — add them in your calendar app and they'll sync in.
-
Attendees and invitations. Kinboard writes no
ATTENDEElines and does not RSVP; these are your household's own events, not meeting invites. -
Tasks (
VTODO) and journals. Calendars that hold only tasks are filtered out of the picker. Kinboard's Tasks feature is separate and not CalDAV-backed. - Creating new calendars on the server. Kinboard subscribes to calendars that already exist; make new ones in your provider's UI.
"Authentication failed" — with 2FA enabled, your normal password won't work; generate an app-specific password. On Nextcloud, check that the account isn't restricted to specific apps.
"No CalDAV service at that URL" — you likely gave a calendar URL rather than the server root. Both usually work, but the root is more reliable; for Nextcloud that's /remote.php/dav, not /remote.php/dav/calendars/<user>/personal/.
"TLS certificate rejected" — see the self-signed certificate note above.
A calendar stopped updating — the settings page shows the last error under the calendar's name. Expired app passwords are the usual cause and are otherwise invisible: the calendar just quietly stops changing.
Events appear twice — the same calendar was probably added both as a CalDAV calendar and as an .ics feed. Remove one; they're independent subscriptions and Kinboard has no way to tell they're the same upstream calendar.
- Calendar — the calendar surface itself
- Google-Calendar — the OAuth-based alternative
- Security-and-Threat-Model — how integration credentials are stored
Kinboard on GitHub · Sponsor · Buy me a coffee · Report a bug · MIT-licensed
Getting started
Operations
Integrations
Kiosk hardware
Built-in features
- Dashboard
- Calendar
- Shopping
- Recipes & meal planning
- Tasks & todos
- Notes
- News
- Birthdays
- School schedule
- Smart home & energy
- Screensaver
- People & devices
- Notifications
- Themes
Plugins (per-family on/off)
Contributing