The last few weeks I’ve been looking into the open calendar, tasks and notes space with the goal of finding or building a privacy-conscious and still practical system.
This post is an exploration of the available technology in that space, its problems and how to solve them. For context: I use Windows, MacOS and Linux on my computers on a daily basis, my daily driver phone is an iPhone. I don’t care much for collaboration with other people using these tools, my focus is to keep control over my personal data and build a workflow that works well for my day to day work.
When I set out on my journey I had the following goals in mind:
- I control the source of truth for all calendars, tasks and notes data by means of a self-hosted solution.
- I can view and edit the data on all my machines (MacOS, Windows, Linux, iOS, Android) in a consistent manner.
- Use standard protocols (CalDAV/iCalendar for calendars and tasks, WebDAV for notes).
- Preference for FOSS software but not a hard requirement: for example it’s OK to use a proprietary app like the iOS Calendar app if it supports pulling data from my datastore and is consistent with other clients.
- Easy to work with multiple calendar and task sets so I can logically group data by project and still have a combined view available.
- For tasks specifically I would like to have subtask support so I can divide a large task into multiple subtasks and track completion of the whole.
- Ideally I want to be able to hook into task lifecycle events so I can execute my own logic when tasks are created or finished.
- Notes in markdown format
My ideal solution would be an open source CalDAV/WebDAV server storing data, and a cross-platform client that works on all desktop/mobile platforms. I can live with a different desktop and mobile app but I do not want to have 3 different desktop GUIs. CalDAV and iCalendar are the established standard protocols for synchronizing calendars and tasks but these protocols have some issues:
- They are very old and have accrued quite a bit of legacy
- There is a lack of libraries implementing these protocols, there are libraries for languages like PHP, Java and C but these implementations are typically unmaintained and because of the nature of these languages they are not very suitable for the modern cross-platform world.
- Because of the lack of libraries in modern languages there are no fully cross-platform clients
- Things like subtasks are not originally in the RFC, there is support for related references in iCalendar objects but clients use wildly different implementations of this so getting consistent subtask behavior across clients is a challenge.
It’s not all bad, CalDAV has good support for synchronizing resources and limiting sync to only objects that have changed by using etags metadata and sync tokens.