Files
2026-06-09 18:40:21 +02:00

175 lines
7.2 KiB
Markdown

---
title: Radicale
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, calendar, caldav, carddav, python, lightweight]
confidence: high
contested: false
sources: [https://selfh.st/apps/?tag=calendar]
---
# 🗓️ Radicale
> **Le serveur CalDAV/CardDAV minimaliste en Python** : pas de base de données, configuration en une ligne, parfait pour un usage familial ou un petit labo. C'est le « Pi-hole du calendrier ».
| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | [radicale.org](https://radicale.org/) |
| **GitHub** | [Kozea/Radicale](https://github.com/Kozea/Radicale) |
| **License** | GPL-3.0 (avec exception AGPL-compat) |
| **Langage** | Python 3.11+ |
| **Étoiles** | 513 ⭐ |
| **Dernière MAJ** | 2026-04 (v3.2.x) |
| **Catégorie** | [[cat-calendar]] |
## Description
**Radicale** est un **serveur CalDAV/CardDAV** minimaliste écrit en Python. Son crédo : un seul exécutable, **pas de base de données** (tout est stocké sur disque en fichiers `.ics` / `.vcf` ou via un backend stockage), un fichier de config lisible, et basta. Lancé en 2008 par **Kozea** (fabrique française de logiciels libres), c'est l'un des plus anciens serveurs CalDAV encore actifs.
Côté fonctionnalités, Radicale expose les **endpoints CalDAV RFC 4791** et **CardDAV RFC 6352** : vos clients (Thunderbird, GNOME Evolution, KDE KOrganizer, iOS/macOS Calendar, Android DAVx5, GNOME Online Accounts) s'y connectent en HTTPS et synchronisent calendriers + carnets d'adresses. Les droits sont granulaires (par utilisateur, par calendrier, droits en lecture/écriture pour des utilisateurs tiers). Le **stockage** par défaut est filesystem (chaque calendrier = un dossier), mais des backends existent : filesystem, Database (SQLite/MySQL/PostgreSQL), LDAP, et divers (Nextcloud-like). Une couche **TLS** intégrée évite d'avoir à mettre un reverse-proxy devant pour chiffrer.
**Points forts** : **vraiment léger** (peut tourner sur Raspberry Pi), pas de DB à administrer, configuration en un seul fichier `config`, **pluginable** (auth, storage, rights, web), **CLI** `radicale` pour l'admin, **TLS intégré** (optionnel mais bien pratique pour les petits déploiements sans reverse-proxy), logs clairs, support CalDAV/CardDAV strict, et c'est français 🇫🇷. La documentation est excellente.
**Points faibles** : l'**UI web** est volontairement basique (il n'y en a presque pas, c'est voulu), la **scalabilité** n'est pas le sujet (au-delà de quelques dizaines d'utilisateurs, regarder Baïkal/DAViCal), pas de **clustering** natif, pas de gestion native des **calendriers partagés** complexes, le **bus factor** est limité (Kozea c'est 1-2 personnes historiques), pas de App Store ni d'API REST moderne.
## Installation
### Via Docker (recommandé)
L'image officielle `tomsquestdocker/radicale` (maintenue par le créateur, `tomsquest`) ou `radicale/radicale` (upstream Docker) existent. Voici la version officielle :
```yaml
# docker-compose.yml
services:
radicale:
image: radicale/radicale:3.2
container_name: radicale
restart: unless-stopped
ports:
- "5232:5232"
environment:
RADICALE_CONFIG: /config/config
TZ: Europe/Paris
volumes:
- ./config:/config
- ./data:/data
command: --config /config/config
```
### Option TLS intégrée (sans reverse-proxy)
```yaml
services:
radicale-tls:
image: radicale/radicale:3.2
container_name: radicale-tls
restart: unless-stopped
ports:
- "5232:5232"
volumes:
- ./config:/config
- ./data:/data
- ./certs:/certs
command: >
--config /config/config
--certificates /certs
```
Générer un certificat avec `mkcert` ou Let's Encrypt (via certbot en host).
### Installation manuelle
```bash
# Debian/Ubuntu
sudo apt install radicale
# Ou via pip
pip install --user 'radicale[auth,storage,rights]'
~/.local/bin/radicale --config ~/.config/radicale/config
```
Systemd unit fourni dans le paquet Debian.
## Configuration
Exemple de `config` (INI) typique :
```ini
[server]
hosts = 0.0.0.0:5232
max_connections = 20
max_content_length = 100000000
timeout = 30
[auth]
type = htpasswd
htpasswd_filename = /data/users.htpasswd
htpasswd_encryption = bcrypt
[storage]
type = multifilesystem
filesystem_folder = /data/collections
[rights]
type = owner_only
[logging]
level = info
```
1. **Créer un utilisateur** : `htpasswd -B -c data/users.htpasswd alice` (la première fois, `-c`).
2. **Premier accès client** : dans Thunderbird / iOS / DAVx5, ajouter un compte CalDAV `https://rad.example.com:5232/alice/` (le slash final est important).
3. **Droits** : `owner_only` = chaque user ne voit que ses calendriers. Pour du multi-user avec partage, passer à `authenticated` ou installer le plugin `radicale-rights` (de Kozea).
4. **Plugin App** : `radicale-imap` pour authentifier via IMAP, `radicale-webui` (en dehors de l'upstream) pour une UI web.
5. **Logs** : niveau `info` en prod, `debug` pour diagnostiquer CalDAV.
## Alternatives
### Open Source
- [[app-baikal]] — Serveur CalDAV/CardDAV en PHP, plus UI
- [[app-davical]] — Serveur CalDAV entreprise en PHP/PostgreSQL
- [[app-sabre-dav]] — La **librairie PHP** sur laquelle reposent Baïkal et DAViCal
- [[app-etesync]] — Calendrier **chiffré E2E** (et donc CalDAV-compatible en lecture)
- **Xandikos** — Serveur CalDAV/CardDAV en Python, alternative à Radicale, plus strict sur les standards
- **DAViCal** — équivalent historique en PHP/PostgreSQL
- [[app-nextcloud]] — Suite complète (calendrier, contacts, fichiers, etc.)
### Propriétaires (ce que Radicale remplace)
- **iCloud Calendar / Contacts** — Le service d'Apple, fermé
- **Google Calendar / Contacts** — Le géant, pas self-hostable
- **Outlook.com Calendar** — Microsoft, fermé
- **Yahoo Calendar** — Discontinué en 2024 pour certains marchés
## Sécurité
-**TLS** intégrable (mais un reverse-proxy type [[app-traefik]] est souvent préféré)
-**Auth htpasswd** avec bcrypt/argon2
-**Droits granulaires** via plugin
- ⚠️ **Pas de rate-limiting natif** : comptez sur le reverse-proxy
- ⚠️ **Auth par défaut = htpasswd** : pour LDAP, il faut le plugin `radicale-auth-ldap`
-**Pas de DB** = moins de surface d'attaque
- ✅ GPL-3.0 = auditable
- ⚠️ Le mot de passe passe en clair sur le **port 5232 non-TLS** si TLS n'est pas activé — ne jamais exposer le port 5232 brut sur Internet
-**Logs structurés** utiles pour détecter du brute-force
## Ressources
- [Site officiel](https://radicale.org/)
- [Documentation](https://radicale.org/v3.2.html)
- [Dépôt GitHub](https://github.com/Kozea/Radicale)
- [Docker Hub](https://hub.docker.com/_/radicale)
- [Wiki plugins](https://github.com/Kozea/Radicale/wiki/Plugins)
- [selfh.st Calendar](https://selfh.st/apps/?tag=calendar)
- [Forum Kozea](https://github.com/Kozea/Radicale/discussions)
## Pages Liées
- [[cat-calendar]] — Catégorie Calendar
- [[app-baikal]] — Alternative PHP avec UI
- [[app-davical]] — Alternative PHP entreprise
- [[app-sabre-dav]] — Librairie CalDAV sous-jacente à Baïkal
- [[app-etesync]] — Calendrier chiffré E2E
- [[app-cal-com]] — Scheduler qui se connecte à Radicale en CalDAV
- [[recettes-docker-compose]] — Templates Docker
- [[app-traefik]] — Reverse-proxy HTTPS recommandé