--- title: Baïkal created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, calendar, caldav, carddav, php, lightweight, ui] confidence: high contested: false sources: [https://selfh.st/apps/?tag=calendar] --- # 🌙 Baïkal > **Le serveur CalDAV/CardDAV « clé en main » en PHP**, basé sur [[app-sabre-dav]]. C'est la version **avec UI admin** : installation en 5 minutes, gestion des utilisateurs via une interface web, et c'est tout. L'alternative la plus populaire à [[app-radicale]] côté PHP. | Métadonnée | Valeur | | :--- | :--- | | **Site web** | [sabre.io/baikal](https://sabre.io/baikal/) | | **GitHub** | [sabre-io/Baikal](https://github.com/sabre-io/Baikal) | | **License** | GPL-3.0 (Baïkal UI), avec sabre/dav en BSD-3 en dessous | | **Langage** | PHP 8.1+ | | **Étoiles** | 316 ⭐ | | **Dernière MAJ** | 2026-03 (v0.10.x « Baïkal 2 ») | | **Catégorie** | [[cat-calendar]] | ## Description **Baïkal** (parfois écrit Baïkal, ou Baikal) est né en 2013 comme un wrapper « **UI admin** » au-dessus de [[app-sabre-dav]]. L'idée : ne pas demander à un admin système d'éditer un fichier PHP pour créer un utilisateur, mais lui donner une **interface web** pour gérer utilisateurs, calendriers et carnets d'adresses, le tout reposant sur la **librairie sabre/dav** qui reste la référence CalDAV/CardDAV en PHP. Concrètement, Baïkal est une application PHP traditionnelle (Composer, Zend Framework minimaliste, PDO/SQLite/MySQL) qui expose une **UI d'admin Bootstrap** sur `/admin/` et un **serveur CalDAV/CardDAV** sur `/dav/`. Chaque utilisateur peut avoir plusieurs calendriers et carnets d'adresses. L'auth est basique (login/mot de passe en DB), des **plugins** permettent d'ajouter LDAP ou IMAP. La force du projet : **toute la conformité CalDAV** est déléguée à sabre/dav, Baïkal n'est qu'une surcouche admin. **Points forts** : **UI web admin** (ce qui manque à [[app-radicale]]), **clé en main** : Docker, 5 minutes, ça marche, basé sur la **librairie la plus conforme** aux RFCs (sabre/dav), licence GPL-3.0, **SQLite** par défaut (pas de DB à gérer pour un petit setup), support CardDAV intégré, support CalDAV complet (iTip/iMip), **maturité** (le projet existe depuis 2013, très stable), communauté active. **Points faibles** : **PHP** = stack à part (mais l'image Docker le rend indolore), **pas de clustering** natif (au-delà de quelques dizaines d'utilisateurs, passer à Nextcloud ou DAViCal), **sécurité de l'UI admin** = à protéger derrière HTTPS et idéalement restriction IP, **mise à jour manuelle** de la base de temps en temps (migrations SQLite), **pas de app store** ni d'API REST (c'est CalDAV, c'est tout), pas d'auth native **OAuth/OIDC** (LDAP via plugin). ## Installation ### Via Docker (méthode recommandée) L'image **ckulka/baikal** ou **cschlosser/baikal** sont des images communautaires bien tenues. Voici la version la plus utilisée : ```yaml # docker-compose.yml services: baikal: image: ckulka/baikal:latest container_name: baikal restart: unless-stopped ports: - "8800:8800" environment: BAIKAL_ADMIN_PASSWORD: changez-moi BAIKAL_DATABASE: sqlite TZ: Europe/Paris volumes: - ./config:/var/www/baikal/config - ./data:/var/www/baikal/Specific ``` UI admin : `http://localhost:8800/admin/` (login par défaut `admin` / `admin` ou `baikal` selon l'image). Serveur CalDAV : `http://localhost:8800/dav.php/`. ### Avec MySQL (au-delà de SQLite) ```yaml services: baikal: image: ckulka/baikal:latest restart: unless-stopped ports: - "8800:8800" environment: BAIKAL_DATABASE: mysql BAIKAL_MYSQL_HOST: db BAIKAL_MYSQL_DB: baikal BAIKAL_MYSQL_USER: baikal BAIKAL_MYSQL_PASSWORD: secret-db volumes: - ./config:/var/www/baikal/config - ./data:/var/www/baikal/Specific depends_on: - db db: image: mysql:8 restart: unless-stopped environment: MYSQL_DATABASE: baikal MYSQL_USER: baikal MYSQL_PASSWORD: secret-db MYSQL_ROOT_PASSWORD: secret-root volumes: - ./mysqldata:/var/lib/mysql ``` ### Installation manuelle PHP 8.1+, Composer, Apache/Nginx, SQLite ou MySQL. Télécharger la dernière release sur GitHub, décompresser, pointer un vhost sur le dossier `html/`, lancer `/admin/install/` dans le navigateur, suivre l'assistant (création du `config.php`, compte admin, choix SQLite/MySQL). ## Configuration 1. **Premier accès** : `https://baikal.example.com/admin/` → login `admin` / `admin` (CHANGER IMMÉDIATEMENT). 2. **Créer un utilisateur** : `Users → Add user` → username, password (bcrypt), display name, e-mail. 3. **Créer un calendrier** pour cet utilisateur : `Calendars → Add calendar` → nom, couleur, description. 4. **Connecter un client** : dans Thunderbird / iOS / DAVx5 / GNOME Online Accounts : - URL CalDAV : `https://baikal.example.com/dav.php/calendars/alice/` - User : `alice` - Password : celui saisi à l'étape 2 5. **Activer LDAP** (optionnel) : plugin `ldap` ou `carddav` côté serveur. 6. **Timezone et locale** : `Settings → System` → fuseau horaire, format de date. 7. **Logs** : `config/SYSTEM/ENABLE_LOGGING = true` pour debug CalDAV. ## Alternatives ### Open Source - [[app-radicale]] — **Concurrent direct** en Python, sans UI admin - [[app-davical]] — Serveur CalDAV en PHP/PostgreSQL, plus « entreprise » - [[app-sabre-dav]] — La **librairie** sur laquelle Baïkal est construit - [[app-etesync]] — CalDAV-compatible mais avec **chiffrement E2E** - **Xandikos** — Serveur CalDAV/CardDAV en Python, plus strict - **DAViCal** — Concurrent historique PHP/PostgreSQL - [[app-nextcloud]] — Suite complète (calendrier, contacts, fichiers, etc.) ### Propriétaires (ce que Baïkal remplace) - **iCloud Calendar / Contacts** — Le service d'Apple, fermé - **Google Calendar / Contacts** — Le géant, pas self-hostable - **Outlook.com Calendar / People** — Microsoft, fermé - **Yahoo Calendar** — Discontinué - **fruux** (projet Evert Pot) — Service commercial de l'auteur de sabre/dav, fermé en 2022 ## Sécurité - ✅ **HTTPS obligatoire** (Let's Encrypt via [[app-traefik]] ou Caddy) - ✅ **Mots de passe bcrypt** côté serveur - ⚠️ **UI admin** : restreindre l'accès (restriction IP, 2FA via reverse-proxy) car c'est le point sensible - ✅ **CSRF tokens** sur les formulaires admin - ⚠️ **SQLite par défaut** : parfait pour ~10 users, migrer MySQL/PostgreSQL au-delà - ✅ **GPL-3.0** = auditable - ✅ **Pas de télémétrie** (contrairement aux SaaS) - ⚠️ **Updates** : suivre les releases GitHub, surtout les CVE PHP-CGI (cf. 2024-2025) - ⚠️ **Pas de rate-limiting natif** : déléguer à Nginx/Traefik ## Ressources - [Site officiel](https://sabre.io/baikal/) - [Documentation](https://sabre.io/baikal/install/) - [Dépôt GitHub](https://github.com/sabre-io/Baikal) - [Docker Hub ckulka/baikal](https://hub.docker.com/r/ckulka/baikal) - [Forum sabre.io](https://groups.google.com/g/sabre) - [selfh.st Calendar](https://selfh.st/apps/?tag=calendar) - [RFC CalDAV 4791](https://datatracker.ietf.org/doc/html/rfc4791) - [RFC CardDAV 6352](https://datatracker.ietf.org/doc/html/rfc6352) ## Pages Liées - [[cat-calendar]] — Catégorie Calendar - [[app-sabre-dav]] — **La librairie sur laquelle Baïkal est construit** - [[app-davical]] — Concurrent PHP CalDAV plus orienté entreprise - [[app-radicale]] — Concurrent Python minimaliste - [[app-etesync]] — Calendrier E2E - [[app-cal-com]] — Scheduler qui se connecte à Baïkal - [[recettes-docker-compose]] — Templates Docker - [[app-traefik]] — Reverse-proxy HTTPS