---
title: EteSync
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, calendar, contacts, e2ee, chiffrement, python, django, privacite]
confidence: high
contested: false
sources: [https://selfh.st/apps/?tag=calendar]
---

# 🔐 EteSync

> **Le serveur de calendrier et contacts **chiffré de bout en bout** (E2EE)** : ni l'admin du serveur, ni un attaquant ayant accès au serveur ne peuvent lire vos rendez-vous. C'est le **signal/element/proton-calendar** de l'auto-hébergement, conçu par **Tom Joshi**.

| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | [etesync.app](https://www.etesync.app/) |
| **GitHub** | [etesync/etesync-server](https://github.com/etesync/etesync-server) |
| **License** | AGPL-3.0 (serveur) |
| **Langage** | Python 3.11+ / Django 5.x |
| **Étoiles** | 101 ⭐ (toute l'org ettesync) |
| **Dernière MAJ** | 2026-03 (v0.13.x) |
| **Catégorie** | [[cat-calendar]] |

## Description

**EteSync** est né d'un constat : tous les serveurs CalDAV ([[app-radicale]], [[app-baikal]], [[app-davical]]) stockent vos calendriers et contacts **en clair** sur le serveur. Si un attaquant, un administrateur curieux, ou une réquisition légale accède au serveur, il lit tout. EteSync résout ce problème en appliquant un **chiffrement E2E** systématique : tout passe par un **JMAP-like** ou CalDAV adapté, et tout est chiffré côté client avec une clé dérivée du mot de passe de l'utilisateur avant d'atteindre le serveur.

L'architecture repose sur : un **serveur Django** (REST/JMAP-like, plus CalDAV proxy en option), un **modèle crypto** (libsodium, AES-GCM, signed ratchet), des **clients** officiels (Android via DAVx5 + plugin EteSync, iOS via app officielle, Web via l'app web), et une **intégration CalDAV** (EteSync **expose** ses calendriers chiffrés en CalDAV en lecture, via le client web ou un proxy). Le serveur ne voit **jamais** le contenu en clair, seulement des blobs chiffrés + métadonnées (timestamps, tailles).

**Points forts** : **chiffrement E2E authentique** (vraiment, pas du marketing), basé sur **signal-protocol-like** (ratchet), **interopérable CalDAV** en sortie (donc les clients standards peuvent lire), **licence AGPL-3.0** (auditable), client web responsive, **apps mobiles natives** (Android/iOS), **zero-knowledge** côté serveur (le serveur peut être compromis, vos données restent illisibles), **comptage d'invités** pour l'auto-hébergement (compte `john@etesync.local` si DNS mal configuré).

**Points faibles** : **101 étoiles** = signal de niche (mais c'est un signal de qualité vs de quantité), **modèle de menace spécifique** : si l'attaquant est sur le *client* (malware, keylogger), E2EE n'aide pas ; **pas de CalDAV complet en écriture** (le proxy DAV expose seulement en lecture, l'écriture passe par les apps natives) ; **clients tiers limités** (DAVx5 + plugin, pas Thunderbird natif) ; **clé = mot de passe utilisateur** : si l'utilisateur oublie son mot de passe, ses données sont **irrécupérables** (c'est le prix de l'E2E) ; **bus factor faible** (Tom Joshi, quelques contributeurs).

> 📜 **Historique** : EteSync a eu une **offre Cloud** (etesync.com) qui a été reprise par **Proton** (Proton Calendar). Le projet open source reste la version self-hosted, active mais avec un bus factor à surveiller.

## Installation

### Via Docker Compose (recommandé)

```yaml
# docker-compose.yml
services:
  etesync:
    image: etesync/server:latest
    container_name: etesync
    restart: unless-stopped
    ports:
      - "8000:8000"
    environment:
      ETESYNC_DATA_DIR: /data
      ETESYNC_DB: postgres
      ETESYNC_DB_HOST: db
      ETESYNC_DB_PORT: 5432
      ETESYNC_DB_NAME: etesync
      ETESYNC_DB_USER: etesync
      ETESYNC_DB_PASSWORD: changez-moi
      ETESYNC_SITE_URL: https://etesync.example.com
      ETESYNC_ALLOWED_HOSTS: etesync.example.com
      SECRET_KEY: changez-cette-cle-en-50-chars
    volumes:
      - ./data:/data
    depends_on:
      - db

  db:
    image: postgres:16-alpine
    container_name: etesync-db
    restart: unless-stopped
    environment:
      POSTGRES_DB: etesync
      POSTGRES_USER: etesync
      POSTGRES_PASSWORD: changez-moi
    volumes:
      - ./pgdata:/var/lib/postgresql/data
```

### Reverse-proxy (Traefik)

```yaml
# labels Traefik
- "traefik.http.routers.etesync.rule=Host(`etesync.example.com`)"
- "traefik.http.routers.etesync.tls.certresolver=letsencrypt"
- "traefik.http.services.etesync.loadbalancer.server.port=8000"
```

### Installation manuelle

Python 3.11+, Django, PostgreSQL, Redis (optionnel). Cloner le repo, `pip install -r requirements.txt`, `python manage.py migrate`, `gunicorn etesync_server.wsgi:application`. Configuration par variables d'environnement (voir `.env.example`).

## Configuration

1. **Premier lancement** : créer un compte admin via `python manage.py createsuperuser` ou depuis l'UI.
2. **Configurer l'URL publique** : `ETESYNC_SITE_URL` doit pointer sur `https://etesync.example.com` (les apps s'en servent pour les liens d'invitation).
3. **Créer un utilisateur** : soit via l'UI Web, soit via le `createsuperuser` Django.
4. **Côté client Android** : installer **DAVx5** (payant, ~5 €) + **EteSync pour DAVx5** (gratuit). Entrer l'URL `https://etesync.example.com`, son user/password.
5. **Côté iOS** : installer l'app **EteSync** (App Store), même config.
6. **Côté Web** : `https://etesync.example.com` → login, créer des calendriers, contacts.
7. **CalDAV bridge** (optionnel, lecture seule) : `ETESYNC_DAV_ENABLED=true` + proxy DAV.
8. **Backups** : `pg_dump` quotidien, **sans la clé utilisateur** (inutile, c'est E2E).

## Alternatives

### Open Source
- [[app-radicale]] — Serveur CalDAV, **PAS chiffré** (stockage clair)
- [[app-baikal]] — Idem, **PAS chiffré**
- [[app-davical]] — Idem, **PAS chiffré**
- [[app-sabre-dav]] — Idem, **PAS chiffré**
- **Proton Calendar** — Chiffré E2E mais **SaaS** (version commerciale d'EteSync en partie)
- **Tuta (Tutanota) Calendar** — Chiffré E2E, **SaaS**
- **Mailcow** — Inclut SOGo avec CalDAV **non chiffré** (mais on peut chiffrer le disque)
- [[app-nextcloud]] — **E2E pour fichiers** (E2EE) mais pas pour calendriers (chiffrement côté serveur uniquement)

### Propriétaires (ce qu'EteSync remplace)
- **iCloud Calendar** — Chiffré par Apple en transit + at rest, mais Apple a la clé
- **Google Calendar** — Chiffrement at rest, mais Google peut lire
- **Outlook.com Calendar** — Idem
- **Proton Calendar** — E2E authentique, mais **SaaS** (Proton AG)
- **Tutanota Calendar** — E2E, mais **SaaS** (Tuta)

## Sécurité

- ✅ **E2E authentique** : chiffrement côté client avec libsodium, ratchet, AES-GCM
- ✅ **Zero-knowledge** : admin serveur ne peut rien lire (même s'il a accès à la DB)
- ✅ **AGPL-3.0** : auditable, fork = contribution
- ✅ **HTTPS obligatoire** (apps refusent HTTP)
- ⚠️ **Mot de passe = clé de chiffrement** : pas de reset possible, mot de passe faible = données compromises
- ✅ **Pas de télémétrie** (contrairement à Proton Cloud)
- ⚠️ **CalDAV proxy = lecture seule** : l'écriture E2E passe par les apps natives
- ⚠️ **Mises à jour** : suivre `etesync/etesync-server` sur GitHub, releases peu fréquentes
- ✅ **Pas de 2FA native** sur EteSync-server (compensé par l'E2E : pas besoin de 2FA si crypto OK), mais peut être ajoutée via [[app-authelia]] en façade
- ⚠️ **Bus factor** : surveiller les issues GitHub, le projet est petit
- ⚠️ **CVE dépendances** (Django, libsodium) : mises à jour régulières

## Ressources

- [Site officiel](https://www.etesync.app/)
- [Documentation](https://www.etesync.app/docs/)
- [Dépôt GitHub](https://github.com/etesync)
- [Blog Tom Joshi](https://tjoshi.ca/)
- [Client Android DAVx5](https://www.davx5.com/)
- [App iOS App Store](https://apps.apple.com/app/etesync/id1446904545)
- [Reddit r/etesync](https://www.reddit.com/r/etesync/)
- [selfh.st Calendar](https://selfh.st/apps/?tag=calendar)
- [Modèle crypto (whitepaper)](https://www.etesync.app/docs/crypto/)

## Pages Liées

- [[cat-calendar]] — Catégorie Calendar
- [[app-radicale]] — Serveur CalDAV **non chiffré** (alternative non-E2E)
- [[app-baikal]] — Idem, non chiffré
- [[app-davical]] — Idem, non chiffré
- [[app-sabre-dav]] — Idem, non chiffré
- [[app-cal-com]] — Scheduler qui se connecte à EteSync (via DAVx5)
- [[recettes-docker-compose]] — Templates Docker
- [[app-traefik]] — Reverse-proxy HTTPS
- [[app-authelia]] — SSO/2FA en façade (optionnel, E2E = déjà solide)
- [[securisation-home-lab]] — Bonnes pratiques sécu
