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:
- Vdirsyncer
- caldavzap/carddavmate
- evolution
- DAVx5 (formerly DAVDroid)
- sogo connector for
Icedove/Thunderbird - aCALdav syncer for
Android - pycardsyncer
- akonadi
- CalDAV-Sync
- CardDAV-Sync
- Calendarsync
- Tasks
- AgendaV
- CardBook
- Apple's iOS
- homeassistant's CalDAV
integration
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]{.title-ref}). For
such clients you can simply provide the base URL to Xandikos during
setup.
Clients that lack such automated discovery (e.g. Thunderbird Lightning)
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.