Skip to content

Roadmap 2025/2026 #474

@tobixen

Description

@tobixen

Note: Roadmap updates in #599

Python CalDAV Client Library - Roadmap

Hopefully I will have some time to work on the Python CalDAV library in the upcoming months. I'm now trying to make this "super issue" to prioritize the outstanding work, throw some estimates on the work tasks and break down the projects.

Summary first

Estimated outstanding work:

  • Close outstanding pull requests - 12h
  • Outstanding issues slated for v1.5 - 8h
  • Outstanding issues slated for v1.6 - 12h
  • Documentation work - 20h
  • Server checker and server compatibility hints project - 28h
  • Outstanding issues slated for v2.0 - 23h
  • New interface + asyncio projects - 50h
  • Outstanding issues slated for v3.0 - 12h
  • Maintain and expand the test server list - 8h
  • JMAP project - 40h

I do believe I can manage to contribute somewhere between 5 and 30 hours per month to the caldav project over the upcoming year. That's between 60 and 360 hours. In the very best scenario it will be possible to get everything above done. Most likely something has to go out, most likely many outstanding issues slated for v1.5 will be procrastinated, same with the JMAP project and quite some of the v2.0-issues.

This being open source, I'm not doing everything alone, there is a steady stream of contributions from other contributors ticking in - but most of those contributions are related to new issues - unknown bugs and features I haven't thought about. Generally community contributions improve the overall quality of the project, but contributes negatively to the roadmap progress. Most reported issues comes iwthout pull-requests, even when there are pull-requests it takes some time to do QA on the contributions, add missing test code, documentation and changelog entries.

Funding

This aggressive roadmap was made possible due tofunding through NGI Zero Core, a fund established by NLnet with financial support from the European Commission's Next Generation Internet program, as a part of the OpenWebCalendar project. Learn more at the NLnet project page.

NLnet foundation logo
NGI Zero Logo

The higher goals

For all work that is done, it's important to consider if it's bringing the project in the right direction or not, defined as such:

  • The library should offer high-level easy-to-use methods for doing interaction with CalDAV servers (but it should also offer lower-level methods).
  • The library should just work - with a bare minimum of configuration (but it should also be possible to do advanced configuration).
  • The high-level methods should be accessible for people who know nothing about the CalDAV standard nor the iCalendar standard (while the low-level methods should give power-users unlimited possibilities).
  • The CalDAV standard is currently the only widely adopted standard for calendar access, though it's not a very good standard - when newer standards are evolving, the scope for the library may change.
  • The library should work consistently towards different server implementations

Outstanding pull requests

It's important to get done with some pull requests - many of them is work that I've started on and got partly or mostly done, but I never had time to complete it. Some of it may be considered "low hanging fruit" as most or parts of the work is already done.

Outstanding issues not related to the projects

I try to prioritize the issues in the github tracker by using the "milestone" concept. The milestones correspond to some future release. It's a very optimistic estimate on what release the issue will be fixed in, so in the end I freqeuently push the milestone target.

1.5 milestone

New "bonus issues" not included in the original roadmap:

1.6 milestone

Those items were originally included in the 1.5-milestone. I expected it would take me too long time to get through this list, hence I procrastinated those and released 1.5. In the end it took me less time than expected, and 1.6 was released just some few days after 1.5.

2.0 milestone

3.0 milestone

Later

Documentation work

The documentation is not much good nor intuitive for new users. People are encouraged to check some example code inside the repository, but this example code is not tested regularly. The code should be embedded in the documentation and executed by the test suite.

Original plan:

  • Make a way to embed code in the documentation and have it executed by functional tests. Estimate: 2h
  • Move the existing example code into documentation and improve it (I changed my mind. Example doc has been brushed up a bit, some of it is now covered by unit tests, and it's listed and commented in the documentation) Estimate: 3h
  • Look through the documentation, reorganize it, write more and better doc. Estimate: 6h
  • Look through all the outstanding documentation issues. Estimate: 3h
  • Update the documentation again, after fixing all other issues mentioned here. Estimate: 4h

Revised plan:

  • Consider Dietaxis
    • Make a tutorial
    • Make some how-tos - procrastinated and split out into a new issue Documentation howtos #513
    • Make a reference
    • Make some explanations
  • Consider manuel
    • Set up tests
  • Consider https://pydata-sphinx-theme.readthedocs.io/en/stable/
  • Consider making things slightly similar to how things are done at the iCalendar doc
  • Consider what to do with the examples. As a bare minimum, they have to be executed by the test framework
  • Look through the documentation again and see if there are any improval points

Related issues and pull requests

Project: Server compatibility hints

There is a jungle of calendar servers out there, the RFCs are sometimes ambiguous, and quite a lot in the RFCs is optional to implement. Ideally, a python program using the caldav library should behave the same even if the calendar servers behaves differently - for instance, if the calendar server does not support search, the search operation may work by downloading the whole calendar and do a client-side search. A side-project (and requisite) here is a server-checker script that may run various tests towards a calendar server to check for compatibility issues. The server checker script is partially done, but got derailed due to lack of time.

Subtasks

  • The current "quick list" is a mess and needs to be cleanded up and reorganized. After doing that, the functional tests and the server checker script must be rewritten to comply with the new list. Estimate: 5h
  • The server checker script needs to be refactored - currently it's only possible to run all checks or nothing, it should be possible to check one quirk without running the full test suite. This is slightly non-trivial as the current script sometimes needs data from one quirk test run before it can run another quirk test. Estimate: 6h
  • The server configuration for caldav should be improved
    • In "auto-mode" (default) the client should do a quick effort on figuring out compatibility quirks, guessing the correct URL, etc. Estimate: 2h
    • In "probe-mode", the client should do extensive probing to figure out of things. Estimate: 2h
    • In "manual" mode, the client should assume the configuration it gets is correct.
    • It should accept a parameter telling it what kind of server is in use ... i.e. server_impementation=nextcloud and it would know that all nextcloud-quirks should be applied. It's complicated as version numbers also has to be taken into consideration. Alternatively, it should be possible to pass a complete quirk-list. Estimate: 3h
    • It should be possible to configure some few other things. Estimate: 1h
      • Is it allowed to download the full calendar i.e. to do a client text search?
      • If an operation is known to fail due to the quirk-list, should the server raise an error, or should it try anyway?
      • Should we do work-arounds to ensure consistency across different calendar servers? (this may break consistency towards elder versions of the library)
      • ... probably more options as well ..
    • Now that we have a quirk-list, it should be utilized:
      • Try to identify all the points in the code where we should do differently dependent on the quirk list and configuration. Estimate: 3h
      • Try to mitigate as many of the quirks as possible, and raise errors when the server does not support the operation. Estimate: 6h

Related issues and pull requests

Project: New interface

The current interface has grown organically and without much thought. Method names are inconsistent, the workflow is inconsistent, in some places a property is in use while other places a method is in use. The library was also made back when "Python 3k" was a long-in-the-future project, and while async operation meant one would have to understand the twisted "Twisted" framework. I think it may be useful to think through things and make a new application interface from scratch. I deem backward compatibility high, so the new and old application interface will live side by side (but eventually with deprecation warnings) for a while. This involves quite a lot of thinking and documentation, some refactoring of current code, but should not involve duplicating code nor "writing things from scratch".

This should be done a bit in lockstep with the asyncio project. One idea may be to create the new interface for async usage and leave the old interface for sync usage. The estimate is set low because much of the actual work is done in the asyncio project.

Estimate: 10h

Related issues and pull requests

Project: asyncio

Modern Python applications should work asynchronously.

I haven't thought much about how to achieve this - but I give a very rough estimate that it will take me one working week to figure it out and implement it.

Estimate: 40h

Related issues and pull requests

Project: JMAP

JMAP is a new email protocol intended to replace IMAP - at FOSSDEM 2025 it appeared that both server developers and client developers found it superior compared to IMAP. The JMAP protocol also supports the exchange of calendaring data.

I think it would be nice with a library where the high-level methods would work seamlessly for the end user no matter if the CalDAV protocol or the JMAP protocol is used. The first step of this project would be to investigate if this is at all possible - if not, we may need to make changes to the high-level API.

Supporting JMAP may not be intuitive considering the naming of the library, but it may be important for future-proofing the library.

It's prerequisite to find calendar servers supporting JMAP for testing.

Related issues and pull requests

Estimate: 40h

Increase the list of test servers

This involves signing up at different cloud providers, begging for test accounts from people who are running calendar servers, setting up my own self-hosted servers, etc. Trying to keep an overview at #45 and in my own private config file.

Estimate: 8h

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions