Radicale vs Baikal: CalDAV/CardDAV Servers Compared
Quick Verdict
Baikal is the better choice for most people. Its web admin interface makes managing users, calendars, and address books straightforward without touching config files. Radicale wins if you want the absolute smallest footprint and prefer file-based storage you can version-control with git.
Overview
CalDAV and CardDAV are open protocols for syncing calendars and contacts between devices. Every major client supports them — Apple Calendar, Thunderbird, GNOME Calendar, DAVx5 on Android. Self-hosting a CalDAV/CardDAV server means your calendar events and contacts live on hardware you control instead of sitting on Google’s or Apple’s servers.
Radicale and Baikal are the two most popular lightweight options. Both implement the CalDAV and CardDAV specs, both run in Docker, and both are licensed under GPL-3.0. The difference comes down to philosophy: Radicale strips everything to the minimum, while Baikal adds a web interface and database backend that make administration easier at the cost of slightly more resource usage.
Feature Comparison
| Feature | Radicale | Baikal |
|---|---|---|
| Language | Python | PHP |
| Web Admin UI | User management only | Full calendar/contact/user management |
| Storage Backend | File-based (flat files) | SQLite or MySQL |
| CalDAV Support | Full | Full |
| CardDAV Support | Full | Full |
| Authentication | htpasswd, LDAP, PAM, custom | Basic Auth, Apache Auth |
| Multi-user | Yes | Yes |
| Calendar Sharing | Yes (via ACL) | Yes (via delegation) |
| Docker Image Size | ~25 MB | ~80 MB |
| RAM Usage (idle) | ~20 MB | ~40 MB |
| License | GPL-3.0 | GPL-3.0 |
| Active Development | Yes (GitHub) | Yes (GitHub) |
| Configuration | Single .conf file | Web UI + config file |
| Backup Complexity | Copy a directory | Export SQLite DB or mysqldump |
Docker Compose: Radicale
Create a docker-compose.yml:
services:
radicale:
image: tomsquest/docker-radicale:3.3.3.0
container_name: radicale
ports:
- "5232:5232"
volumes:
- radicale_data:/data
- ./config:/config:ro
environment:
# Set to your desired log level: info, warning, error, debug
RADICALE_CONFIG: /config/config
restart: unless-stopped
volumes:
radicale_data:
driver: local
Create a config/config file alongside it:
[server]
hosts = 0.0.0.0:5232
[auth]
type = htpasswd
htpasswd_filename = /data/users
htpasswd_encryption = bcrypt
[storage]
filesystem_folder = /data/collections
[logging]
level = info
Generate a user password file:
# Install htpasswd (part of apache2-utils on Debian/Ubuntu)
apt install -y apache2-utils
# Create the users file with your first user
htpasswd -B -c ./users youruser
Copy the users file into the Radicale data volume or mount it directly. Then start the stack:
docker compose up -d
Access the admin interface at http://your-server:5232. Log in with the credentials you created. From there, CalDAV/CardDAV clients connect to http://your-server:5232/youruser/ to discover calendars and address books.
Docker Compose: Baikal
Create a docker-compose.yml:
services:
baikal:
image: ckulka/baikal:0.10.1
container_name: baikal
ports:
- "8080:80"
volumes:
- baikal_config:/var/www/baikal/config
- baikal_data:/var/www/baikal/Specific
restart: unless-stopped
volumes:
baikal_config:
driver: local
baikal_data:
driver: local
Start the stack:
docker compose up -d
Open http://your-server:8080 in your browser. Baikal walks you through a setup wizard on first launch:
- Set an admin password
- Choose SQLite (default, no extra setup) or MySQL as the database backend
- Create your first user account
Once setup is complete, the admin panel lets you create users, calendars, and address books through the web interface. CalDAV/CardDAV clients connect to http://your-server:8080/dav.php/ for autodiscovery.
Installation Complexity
Baikal is simpler to get running. You start the container, open the web UI, click through the setup wizard, and you have a working CalDAV/CardDAV server with user accounts. No config files to write, no htpasswd commands to run.
Radicale requires creating a configuration file and manually generating an htpasswd file before your first login. It is not difficult, but it is an extra step that Baikal eliminates. On the other hand, Radicale’s config file is roughly 15 lines long and easy to understand — there is no hidden complexity.
Performance and Resource Usage
Both servers are lightweight by any reasonable standard, but Radicale is notably leaner.
| Metric | Radicale | Baikal |
|---|---|---|
| Idle RAM | ~20 MB | ~40 MB |
| Docker image size | ~25 MB | ~80 MB |
| CPU at idle | Negligible | Negligible |
| Storage overhead | Flat files only | SQLite DB + flat files |
| Startup time | <1 second | ~2 seconds |
For a calendar and contacts server handling a household or small team, neither will stress even the cheapest VPS or a Raspberry Pi. The difference only matters if you are extremely resource-constrained or running dozens of other services on the same machine.
Storage and Backup
Radicale stores everything as .ics and .vcf files in a directory tree. Backing up means copying that directory. You can even version-control it with git, which gives you a full history of every calendar change. This is Radicale’s strongest feature for the backup-conscious.
Baikal stores data in a SQLite database by default (or MySQL if you configured it that way). Backing up means copying the SQLite file or running mysqldump. It works fine, but you lose the human-readable flat-file advantage. You cannot meaningfully diff a SQLite binary.
Client Compatibility
Both servers work with every standard CalDAV/CardDAV client:
- iOS/macOS: Built-in Calendar and Contacts apps (add as “CalDAV” or “CardDAV” account)
- Android: DAVx5 (the standard open-source sync adapter)
- Thunderbird: Built-in CalDAV/CardDAV support
- GNOME Calendar / Contacts: Native support
- Evolution: Native support
- Outlook: Via CalDAV Synchronizer plugin
Both support autodiscovery via .well-known URLs, so most clients can find calendars and address books automatically once you provide the server URL and credentials.
Community and Support
| Aspect | Radicale | Baikal |
|---|---|---|
| GitHub Stars | ~3,000 | ~2,500 |
| Last Release | 2024 | 2024 |
| Documentation | Good, concise | Good, with screenshots |
| Community Size | Medium | Medium |
| Issue Response | Reasonable | Reasonable |
Both projects have stable, mature codebases. Neither is at risk of abandonment — they solve a well-defined problem and do not require frequent updates. CalDAV and CardDAV are stable protocols.
Use Cases
Choose Radicale If…
- You want the smallest possible resource footprint
- You prefer flat-file storage you can back up with
cporrsync - You want to version-control your calendar data with git
- You are comfortable editing a config file for setup
- You are running on extremely constrained hardware (e.g., old Raspberry Pi with limited RAM)
- You prefer fewer moving parts — no database, no PHP runtime
Choose Baikal If…
- You want a web interface for managing users, calendars, and address books
- You are setting this up for family members or a small team who should not need CLI access
- You prefer database-backed storage with SQLite or MySQL
- You want the easiest possible first-time setup (web wizard)
- You might scale to MySQL later for a larger deployment
- You want to manage everything through a browser
Final Verdict
Baikal is the right pick for most self-hosters. The web admin panel eliminates the need to SSH into your server every time you want to add a user or create a new calendar. For a household or small team, that convenience matters more than the 20 MB of RAM you save with Radicale.
Choose Radicale if you specifically value file-based storage — being able to git init your calendar directory and have a full version history of every event is genuinely useful, and no other CalDAV server offers that as cleanly. It is also the right choice if you are stacking dozens of services on minimal hardware and every megabyte counts.
Both are solid, mature, and reliable. You will not regret either choice.
Related
Get self-hosting tips in your inbox
New guides, comparisons, and setup tutorials — delivered weekly. No spam.