Scenic view with a desk showing a cup, a notebook and a NAS (or server)

I Own This Now – Calendar and Contacts

After I migrated my emails to my own mail server, I thought my digital calendar would be the next logical step. It’s also something I rely on every single day, and that is not really under my control. And it has been a solved problem for many years now, if one is willing to go through the initial setup.

The solution: CalDAV

As I said, this is a solved problem. All you need is a CalDAV server. But what is CalDAV? In short, it’s an open protocol that lets calendar clients like your phone or laptop talk to a server to sync, read, and write calendar data. Think of it as the plumbing behind the calendar sync magic you’ve always taken for granted (and probably never thought about, because why would you). The good thing: basically every calendar app out there speaks CalDAV, which means swapping out which server your calendars talk to is mostly a configuration change, not a migration nightmare.

Here we go again: What should I use?

OK, so we know the solution to this problem. We know what to do. But the next question is not about the what, but about the how! Again, it’s a solved problem. Solved by lots and lots of tools out there. There isn’t “the one CalDAV server” everyone is using. Of course, that’s a good thing. We don’t want monoculture. But it also doesn’t help me with my decision. ๐Ÿ™ˆ I’ll spare you the details of my research. We’ll just look at the two main options I considered. But let me tell you that the UberLab was very helpful once again. (What would be a blog post of mine without the usual Uberspace praise? ๐Ÿ˜‰)

Option 1: Nextcloud

The first option I looked at was Nextcloud. If you’ve never heard of it: Nextcloud is a self-hosted collaboration platform – file sync, calendars, contacts, notes, you name it. It’s essentially your own little Google Workspace, running on your server. And yes, it absolutely supports CalDAV. I’ve used Nextcloud before in other contexts, so I knew it would work, and the setup is well-documented. But here’s the thing – I just want calendars and contacts. Nextcloud would feel a little like hiring a full construction crew to hang a picture frame. It works, technically, but it just feels too “heavy” to me.

Option 2: Radicale

The second option – and the one I ended up going with – is Radicale. Where Nextcloud is a Swiss Army knife, Radicale is a scalpel: it’s a lightweight CalDAV and CardDAV server that does exactly one thing, which is serving your calendars and contacts. OK, it’s two things… I know. But “it does exactly one thing” sounded better. You get the drift. ๐Ÿ˜„ And honestly, contacts are a perfect fit for this anyway – if I’m taking back control of my calendar data, why would I leave my address book sitting in someone else’s cloud? But back to Radicale. No file sync, no dashboard, no bells and whistles. The entire thing runs as a single Python process, the config fits in a file you can read in two minutes, and the storage backend is just plain files on disk (which, as someone who likes to know where his data actually is, I appreciate more than I expected ๐ŸŽ‰). It’s not flashy. But for what I needed, it’s basically perfect.

I will not describe the installation in this post. If you are interested, check out the documentation in the UberLab, or the official Radicale docs.

Sharing calendars in Radicale

One of my requirements was the ability to share calendars with my wife and my son – and eventually my daughter, too, as soon as she’s old enough to have her own phone. Radicale doesn’t have a UI for that out of the box: no “share with person@example.com” button, no permissions dialog. If you’re coming from Google Calendar, that might sound like a dealbreaker. But remember how I mentioned the storage backend is just plain files on disk? That’s where it gets fun. Sharing a calendar with another user is literally a symlink – you point a link in one user’s directory at another user’s calendar file, and every CalDAV client just picks it up as if it were always there. It’s the kind of solution that makes you feel either very clever or very old-school, possibly both. ๐Ÿคท

Wrapping it up

And that’s really it. Radicale is running smoothly on my server, the shared family calendar is set up, and my wife, my son, and I have been using it without a single hiccup. The calendar part of this was, in hindsight, surprisingly straightforward. Contacts are a different story. Mine are scattered across Microsoft’s cloud, a small corner of iCloud, and a little PRM (Personal Relationship Management) I built myself a few years ago. So the CardDAV side of things is still work in progress, mostly because I need to wrangle my contacts into shape before I have something worth migrating. But that’s a problem for another day. The important part: I own my calendar now. And it feels good.


Posted

in

by