Tree @v0.0.2 (Download .tar.gz)
Xandikos is a 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.
Implemented standards
The following standards are implemented:
- RFC4918/RFC2518 (Core WebDAV) - implemented, except for COPY/MOVE/LOCK operations
- RFC4791 (CalDAV) - fully implemented
- RFC6352 (CardDAV) - fully implemented
- RFC5397 (Current Principal) - fully implemented
- RFC3253 (Versioning Extensions) - partially implemented, only the REPORT method and {DAV:}expand-property property
- RFC3744 (Access Control) - partially implemented
- RFC5995 (POST to create members) - fully implemented
- RFC7809 (CalDAV Time Zone Extensions) - not implemented
- RFC6638 (CalDAV Scheduling Extensions) - not implemented
- RFC5689 (Extended MKCOL) - fully 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 clients:
- vdirsyncer
- caldavzap/carddavmate
- evolution
- davdroid
- sogo connector for Icedove/Thunderbird
- aCALdav syncer for Android
- pycardsyncer
Clients that are known not to work:
Dependencies
At the moment, Xandikos supports Python 3.5 and higher as well as Pypy 3. It also uses dulwich, icalendar and defusedxml.
E.g. to install those dependencies on Debian:
sudo apt install python3-dulwich python3-defusedxml python3-icalendar
Or to install them using pip:
pip install -r requirements.txt
Running
Testing
To run a standalone (low-performance, 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 by default. You can 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 using uWSGI.
One option is to setup uWSGI with a server like Apache, Nginx or another web server that can authenticate users and forward authorized requests to Xandikos in uWSGI. See examples/uwsgi.ini for an example uWSGI configuration.
Alternatively, you can run uWSGI standalone and have it authenticate and directly serve HTTP traffic. An example configuration for this can be found in examples/uwsgi-standalone.ini.
This will start a server on localhost:8080 with username user1 and password password1.
mkdir -p $HOME/dav
uwsgi examples/uwsgi-standalone.ini
Help
There is a #xandikos IRC channel on the Freenode IRC network, and a xandikos mailing list.
Commit History
@v0.0.2
git clone https://www.jelmer.uk/code/xandikos/
- Release 0.0.2. Jelmer Vernooij 1 year, 11 months ago
- Fix license field (GPLv3) Jelmer Vernooij 1 year, 11 months ago
- Make pip/setup.py install dependencies Hugo Osvaldo Barrera (commit: Jelmer Vernooij) 1 year, 11 months ago
- Update AUTHORS. Jelmer Vernooij 1 year, 11 months ago
- Run python 3.6 on travis Hugo Osvaldo Barrera (commit: Jelmer Vernooij) 1 year, 11 months ago
- Use short-version for travis' cache definition Hugo Osvaldo Barrera (commit: Jelmer Vernooij) 1 year, 11 months ago
- Ensure that hrefs for collections have a trailing slash. Jelmer Vernooij 1 year, 11 months ago
- TODO: Cross-check UIDs for vcard files. Jelmer Vernooij 1 year, 11 months ago
- Add Store(check_for_duplicate_uids=True). Jelmer Vernooij 1 year, 11 months ago
- Remove public lookup_uid. Jelmer Vernooij 1 year, 11 months ago