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

173 lines
7.1 KiB
Markdown

---
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](https://sabre.io/) |
| **GitHub** | [sabre-io/dav](https://github.com/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](https://www.calconnect.org/)), 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 :
```bash
composer require sabre/dav ^4.7
```
### Serveur minimal en 30 lignes
```php
<?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
```yaml
# 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
```bash
# 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-baikal]] — **Construit 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
- [Documentation officielle](https://sabre.io/dav/)
- [Dépôt GitHub](https://github.com/sabre-io/dav)
- [API Reference](https://sabre.io/dav/caldav/)
- [Sabre Faking Server (pour tests)](https://github.com/sabre-io/dav/tree/master/tests/Sabre/CalDAV/Backend)
- [Site fruux (entreprise)](https://fruux.com/)
- [selfh.st Calendar](https://selfh.st/apps/?tag=calendar)
- [Evert Pot — blog](https://evertpot.com/)
## Pages Liées
- [[cat-calendar]] — Catégorie Calendar
- [[app-baikal]] — Application CalDAV **basée** sur sabre/dav
- [[app-davical]] — Autre serveur PHP, historiquement basé sur sabre/dav
- [[app-radicale]] — Équivalent Python
- [[app-etesync]] — Calendrier E2E
- [[app-cal-com]] — Scheduler qui consomme CalDAV
- [[recettes-docker-compose]] — Templates Docker
- [[app-traefik]] — Reverse-proxy HTTPS