---
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
