Files
wiki/Catalogue-Self-Hosted/apps/app-sabre-dav.md
T
2026-06-09 18:40:21 +02:00

7.1 KiB


title: sabre/dav created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, calendar, caldav, carddav, library, php, framework] confidence: high contested: false sources: [https://selfh.st/apps/?tag=calendar]

📚 sabre/dav

La librairie PHP de référence pour bâtir un serveur CalDAV/CardDAV/WebDAV. Ce n'est pas un produit fini : c'est le moteur sur lequel reposent app-baikal et app-davical, et qu'utilisent de nombreuses apps calendriers PHP.

Métadonnée Valeur
Site web sabre.io
GitHub sabre-io/dav
License BSD-3-Clause
Langage PHP 8.1+
Étoiles 369 (dépôt principal) — utilisé par des milliers d'applications en aval
Dernière MAJ 2026-04 (v4.7.x)
Catégorie cat-calendar

Description

sabre/dav (prononcer « sabre-D-A-V ») est une librairie PHP qui implémente les protocoles WebDAV (RFC 4918), CalDAV (RFC 4791) et CardDAV (RFC 6352) avec un soin maniaque de la conformité. Créée par Evert Pot (aussi à l'origine de sabre/uri, sabre/xml et de l'entreprise fruux), c'est le standard de facto pour monter un serveur CalDAV/CardDAV en PHP.

Contrairement à app-radicale ou app-baikal qui sont des applications clés en main, sabre/dav est un framework : vous écrivez le code PHP qui assemble les briques (auth, backend de stockage, plugins CalDAV, plugins CardDAV, etc.). En contrepartie, vous obtenez une intégration native dans votre propre application (CMS, ERP, plateforme SaaS) et un contrôle total sur l'auth, le stockage, les quotas, la facturation. La librairie est découpée en composants réutilisables (sabre/dav, sabre/event, sabre/http, sabre/xml, sabre/uri).

Points forts : conformité RFC excellente (c'est la raison d'exister — passer les tests CalDAV du CalConnect), modularité extrême (vous n'embarquez que ce dont vous avez besoin), documentation énorme, support de long terme (LTS), utilisé en production par Nextcloud, Baïkal (avant fork), et des dizaines d'autres, licence BSD-3 (ultra permissive).

Points faibles : pas une application : il faut coder, donc public dev PHP confirmé ; pas d'UI admin par défaut ; la doc suppose PHP 8+ et Composer ; pas de support CardDAV par défaut (nécessite sabre/dav avec le bon plugin). Pour 95 % des cas, on veut plutôt app-baikal (qui utilise sabre/dav avec une UI).

Installation

sabre/dav est une librairie, pas une app. On l'installe via Composer dans un projet PHP :

composer require sabre/dav ^4.7

Serveur minimal en 30 lignes

<?php
// public/index.php
require '../vendor/autoload.php';

use Sabre\DAV;
use Sabre\CalDAV;
use Sabre\CardDAV;

$nodes = [
    new CalDAV\CalendarRoot(
        $principalBackend = new DAVACL\PrincipalBackend\PDO(
            new PDO('sqlite:data/db.sqlite')
        )
    ),
    new CardDAV\AddressBookRoot(
        $principalBackend
    ),
];

$server = new DAV\Server($nodes);
$server->setBaseUri('/');
$server->addPlugin(new DAV\Browser\Plugin());
$server->addPlugin(new DAVACL\Plugin());
$server->addPlugin(new CalDAV\Plugin());
$server->addPlugin(new CardDAV\Plugin());
$server->exec();

Docker pour un projet utilisant sabre/dav

# docker-compose.yml (PHP-FPM + Nginx + SQLite/Postgres)
services:
  dav:
    build: .
    container_name: sabredav-app
    restart: unless-stopped
    volumes:
      - ./public:/app/public
      - ./data:/app/data
    depends_on:
      - db
    environment:
      DATABASE_URL: pdo-pgsql://dav:dav@db:5432/dav

  db:
    image: postgres:16-alpine
    container_name: sabredav-db
    restart: unless-stopped
    environment:
      POSTGRES_USER: dav
      POSTGRES_PASSWORD: dav
      POSTGRES_DB: dav
    volumes:
      - ./pgdata:/var/lib/postgresql/data

Pas de docker « officiel » : c'est à vous de composer l'image (FROM php:8.3-fpm + composer install + config Nginx).

Schéma de la base

# Création des tables CalDAV/CardDAV
vendor/bin/sabre-cli caldav:principals-create
vendor/bin/sabre-cli caldav:calendar-create principal user
vendor/bin/sabre-cli carddav:addressbook-create principal user

Configuration

  1. Composer : composer require sabre/dav
  2. Backend principal : PDO (SQLite/Postgres/MySQL) ou LDAP.
  3. Authentification : Auth\Backend\PDO (htpasswd-like en DB) ou implémentation custom (LDAP, OAuth, JWT).
  4. Plugins CalDAV : CalDAV\Plugin (cœur), CalDAV\ICSExportPlugin (export), CalDAV\Schedule\Plugin (IMIP).
  5. Plugins CardDAV : CardDAV\Plugin (cœur), CardDAV\VCARDExport.
  6. ACL : DAVACL\Plugin (par défaut).
  7. Quota / Partage / Notifications : plugins optionnels, à brancher.

Alternatives

Open Source

  • app-baikalConstruit sur sabre/dav, mais avec une UI admin (le plus proche cousin « clé en main »)
  • app-davical — Anciennement construit sur sabre/dav, maintenant réécrit en PDO natif
  • app-radicale — Équivalent Python, plus simple à déployer
  • app-etesync — CalDAV-compatible mais avec chiffrement E2E
  • simpleCalDAV (Python) — Librairie Python plus modeste
  • DAVMail (Java) — Passerelle CalDAV IMAP/SMTP
  • node-caldav (Node.js) — Librairie CalDAV côté client

Propriétaires (ce que sabre/dav remplace comme brique)

  • iCloud Calendar — fermé
  • Google Calendar API — pas CalDAV, mais concurrent fonctionnel
  • Microsoft Graph Calendar — idem
  • Exchange / EWS — Microsoft

Sécurité

  • Conformité RFC stricte = moins de surface pour les CVE
  • Licence BSD-3 : utilisable dans des projets propriétaires
  • CSRF / XSS : la couche HTTP (sabre/http) gère les en-têtes
  • ⚠️ Auth custom = vous êtes responsable de la robustesse (bcrypt, pas MD5, rate limit)
  • Chiffrement at-rest = à votre charge (chiffrement de la DB ou filesystem)
  • ⚠️ Mises à jour : suivre sabre-io/dav sur GitHub, LTS = releases paires
  • Pas de dépendances exotiques : Composer + PDO suffisent
  • ⚠️ Sécurité du code client = votre code, votre responsabilité (c'est une lib !)

Ressources

Pages Liées