• Stars
    star
    301
  • Rank 138,451 (Top 3 %)
  • Language
    Python
  • License
    GNU General Publi...
  • Created almost 8 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A CalDAV/CardDAV server

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:

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 setup.cfg 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 (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.

More Repositories

1

dulwich

Pure-Python Git implementation
Python
1,943
star
2

prometheus-xmpp-alerts

XMPP Web hook for Prometheus
Python
31
star
3

silver-platter

Automate the creation of merge proposals for scriptable changes
Python
26
star
4

python-fastimport

Git Fastimport parser and generator in Python
Python
21
star
5

ognibuild

Detect and invoke build systems
Rust
20
star
6

awesome-codemods

Curated list of tools that can fix your code for you
18
star
7

subvertpy

Alternative Python bindings for Subversion
C
14
star
8

setuptools-protobuf

protobuf support for setuptools
Python
14
star
9

upstream-ontologist

discover information about upstream projects
Rust
13
star
10

janitor

Platform for making incremental changes to code in VCSes
Python
10
star
11

redirect-webfinger

Simple webfinger redirect implementation (to e.g. another Mastodon server)
Python
9
star
12

ptabtools

Library for reading PowerTab and GuitarPro files, and related conversion tools
C
7
star
13

subversion-rs

Rust bindings for Subversion
Rust
6
star
14

disperse

Automatic repository releasing
Rust
6
star
15

makefile-lossless

Lossless makefile parser
Rust
6
star
16

buildlog-consultant

Build log parser and analyser
Rust
6
star
17

samba-gtk

GTK+ frontends for Samba
Python
5
star
18

litegpodder

Minimal implementation of the gpodder API
Python
5
star
19

deb822-lossless

Rust parser for the Deb822 file format
Rust
5
star
20

sftp-rs

Rust implementation of SFTP
Rust
5
star
21

lintian-brush

Mirror of https://salsa.debian.org/jelmer/lintian-brush
Python
4
star
22

ctrlproxy

IRC bouncer
C
4
star
23

awesome-merge-drivers

List of great merge drivers for git and other version control tools
3
star
24

action-debianize

GitHub action for debianizing a repository
Shell
3
star
25

dissolve

Python
3
star
26

debian-changelog-rs

Debian Changelog parser in rust
Rust
3
star
27

debmutate

Manipulate Debian packages while preserving formatting
Python
2
star
28

debversion-rs

Rust parser/validator for Debian version strings
Rust
2
star
29

ftdi-cil

CIL (.NET) bindings for the FTDI library
C#
2
star
30

valhalla-client-rs

An API client for the Valhalla API
Rust
2
star
31

dystros

Tools for managing iCalendar and vCard files in Git
Python
2
star
32

wadl

Wadl parser for rust
Rust
2
star
33

debian-watch-rs

Rust parser for debian/watch files
Rust
2
star
34

apr-rs

Rust bindings for APR
Rust
2
star
35

iptable-rs

Rust datastructure for easy IP prefix traversal / manipulation
Rust
1
star
36

debbugs-rs

Rust client for the Debian bug tracking system
Rust
1
star
37

dirty-tracker-rs

Track which files have changed under a directory
Rust
1
star
38

r-description-rs

Rust parser and editor for R DESCRIPTION files and R versions
Rust
1
star
39

action-disperse-validate

GitHub action for validating disperse configuration
Dockerfile
1
star
40

upstream-ontologist-py

Python bindings for the upstream ontologist
Python
1
star
41

prometheus-splitwise-exporter

Prometheus exporter for Splitwise.com
Python
1
star
42

aiohttp-openmetrics

OpenMetrics endpoint provider for aiohttp
Python
1
star
43

build-farm

The Samba Build-Farm
Python
1
star
44

pam-krb5-migrate

PAM module for migrating to Kerberos
C
1
star
45

tdb-rs

Rust bindings for TDB
Rust
1
star
46

nagios-mit-krb5

Nagios plugins for checking MIT Kerberos servers
Python
1
star
47

nagios-heimdal

Nagios plugins for checking Heimdal servers
Python
1
star
48

at89prog

command-line programmer for AT89S8252 and similar processors connected via the serial port
C
1
star
49

brouter-client-rs

Rust client for the BRouter engine
Rust
1
star
50

launchpadlib-rs

Rust library for accessing launchpad
Rust
1
star
51

debcargo

Debcargo
Rust
1
star
52

pyo3-filelike

Rust wrapper for Python file-like objects
Rust
1
star