Start with Nextcloud Calendar If You Want the Full Package
If you already run a NAS or a small server, Nextcloud Calendar is the least painful place to begin. You install the Nextcloud instance, enable the Calendar app, and you get a web interface plus CalDAV access at https://your-server/remote.php/dav. It syncs with the built-in Calendar apps on Android and iOS, and you can share calendars with family using a simple link. No extra services to bolt on.
The trade-off is weight. Nextcloud is a full file-sync platform, so it needs PHP, a database, and a few hundred megabytes of RAM. On a Raspberry Pi 4 with 2 GB or more, it runs fine for a household. If that feels like too much machinery for one calendar, skip to Radicale below.
Radicale: A 100-Line Config for CalDAV Purists
Radicale is a single-purpose CalDAV server written in Python. You install it, point it at a directory, and it stores your calendars as .ics files you can inspect with any text editor. A minimal config file with users, storage folder, and a port is all it takes, and it runs under systemd with about 30 MB of memory. It supports multiple users with htpasswd authentication, which makes it easy to share one calendar with a partner.
The catch is that Radicale has no web interface for editing events. You manage everything through a CalDAV client like Thunderbird, DAVx5 on Android, or the iOS Calendar app. Backups are trivial because every calendar is just a folder of files, and you can move the whole thing to a new machine by copying that folder.
EteSync or Home Assistant for Sync That Survives Server Moves
EteSync is the option to pick if you want end-to-end encryption. Your events are encrypted on the device before they reach your server, so even the server operator cannot read them. Self-hosting the EteSync server takes Docker and a few environment variables for the secret key, and clients are available for Android, iOS, and desktop via a bridge. The privacy benefit is real, but every device needs its own setup, which is a few minutes of work per phone.
If you already live in Home Assistant, skip a dedicated calendar server entirely. The Home Assistant Calendar integration exposes your events to dashboards and automations, and it can talk to an external CalDAV server for two-way sync. It is not a replacement for a Google Calendar clone, but it is ideal when your calendar mostly drives automations like turning off the heating when you mark yourself away. For most people, start with Nextcloud, fall back to Radicale when you want minimal, and add EteSync only when encryption is a hard requirement.