Lightweight CalDAV/CardDAV server
Project description
Xandikos is a lightweight yet complete CardDAV/CalDAV server that backs onto a Git repository.
Xandikos (Ξανδικός or Ξανθικός) takes its name from the name of the March month in the ancient Macedonian calendar, used in Macedon in the first millennium BC.
Extended documentation can be found on the home page.
Implemented standards
The following standards are implemented:
RFC 4918/RFC 2518 (Core WebDAV) - implemented, except for COPY/MOVE/LOCK operations
RFC 4791 (CalDAV) - fully implemented
RFC 6352 (CardDAV) - fully implemented
RFC 5397 (Current Principal) - fully implemented
RFC 3253 (Versioning Extensions) - partially implemented, only the REPORT method and {DAV:}expand-property property
RFC 3744 (Access Control) - partially implemented
RFC 5995 (POST to create members) - fully implemented
RFC 5689 (Extended MKCOL) - fully implemented
RFC 6578 (Collection Synchronization for WebDAV) - fully implemented
The following standards are not implemented:
RFC 6638 (CalDAV Scheduling Extensions) - not implemented
RFC 7809 (CalDAV Time Zone Extensions) - not implemented
RFC 7529 (WebDAV Quota) - not implemented
RFC 4709 (WebDAV Mount) - intentionally not implemented
RFC 5546 (iCal iTIP) - not implemented
RFC 4324 (iCAL CAP) - not implemented
RFC 7953 (iCal AVAILABILITY) - not implemented
See DAV compliance for more detail on specification compliancy.
Limitations
No multi-user support
No support for CalDAV scheduling extensions
Supported clients
Xandikos has been tested and works with the following CalDAV/CardDAV clients:
Dependencies
At the moment, Xandikos supports Python 3 (see pyproject.toml for specific version) as well as Pypy 3. It also uses Dulwich, Jinja2, icalendar, and defusedxml.
E.g. to install those dependencies on Debian:
sudo apt install python3-dulwich python3-defusedxml python3-icalendar python3-jinja2
Or to install them using pip:
python setup.py develop
Docker
A Dockerfile is also provided; see the comments on the top of the file for configuration instructions. The docker image is regularly built and published at ghcr.io/jelmer/xandikos. See examples/docker-compose.yml and the man page for more info.
Running
Xandikos can either directly listen on a plain HTTP socket, or it can sit behind a reverse HTTP proxy.
Testing
To run a standalone (no authentication) instance of Xandikos, with a pre-created calendar and addressbook (storing data in $HOME/dav):
./bin/xandikos --defaults -d $HOME/dav
A server should now be listening on localhost:8080.
Note that Xandikos does not create any collections unless –defaults is specified. You can also either create collections from your CalDAV/CardDAV client, or by creating git repositories under the contacts or calendars directories it has created.
Production
The easiest way to run Xandikos in production is by running a reverse HTTP proxy like Apache or nginx in front of it. The xandikos script can either listen on the local host on a particular port, or it can listen on a unix domain socket.
For example init system configurations, see examples/.
Client instructions
Some clients can automatically discover the calendars and addressbook URLs from a DAV server (if they support RFC:5397). For such clients you can simply provide the base URL to Xandikos during setup.
Clients that lack such automated discovery require the direct URL to a calendar or addressbook. In this case you should provide the full URL to the calendar or addressbook; if you initialized Xandikos using the --defaults argument mentioned in the previous section, these URLs will look something like this:
http://dav.example.com/user/calendars/calendar http://dav.example.com/user/contacts/addressbook
Contributing
Contributions to Xandikos are very welcome. If you run into bugs or have feature requests, please file issues on GitHub. If you’re interested in contributing code or documentation, please read CONTRIBUTING. Issues that are good for new contributors are tagged new-contributor on GitHub.
Help
There is a #xandikos IRC channel on the OFTC IRC network, and a Xandikos mailing list.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.