Best Self-Hosted Calendar & Contacts in 2026
Self-hosted calendar and contacts servers use CalDAV and CardDAV protocols — open standards supported by nearly every calendar and contacts app on every platform. Replace Google Calendar and Google Contacts with a server you control, and your existing apps (Apple Calendar, Thunderbird, DAVx5 on Android) connect without any special configuration.
Quick Verdict
| Situation | Best Choice | Why |
|---|---|---|
| Simplest possible setup | Radicale | Single Python file, zero config, just works |
| Web UI for management | Baikal | Browser-based calendar/contact management |
| Multiple protocols | Davis | CalDAV + CardDAV + WebDAV in one server |
| Maximum compatibility | Baikal | Most tested with diverse clients |
For most people: Radicale. It requires zero configuration, starts in seconds, uses 5 MB of RAM, and works with every CalDAV/CardDAV client. You won’t manage calendars through its web UI (there isn’t one) — you’ll use your phone or desktop app. That’s fine, because that’s where you use calendars anyway.
Understanding CalDAV and CardDAV
Before comparing servers, a quick clarification on what these tools actually do:
CalDAV is the protocol for syncing calendars. Your phone creates an event → sends it to the CalDAV server → your laptop fetches it from the server. The server is the source of truth.
CardDAV is the same concept for contacts. Add a phone number on your laptop → synced via CardDAV → available on your phone.
All three servers on this list support both protocols. The differences are in setup complexity, resource usage, and management features — not protocol support.
Client setup: On iOS, CalDAV/CardDAV is built into Settings → Accounts. On Android, use DAVx5 (free on F-Droid). On desktop, Thunderbird has native support. All you need is the server URL, username, and password.
Radicale — Simplest Setup
Radicale is a CalDAV/CardDAV server written in Python. The entire application is a single package with no database dependency — it stores data as flat files (.ics for calendars, .vcf for contacts). Configuration is a single INI file with sensible defaults.
Start Radicale, point your phone at it, and calendars sync. There’s no setup wizard, no database migration, no initial configuration required. The default config works for personal use and small households.
The trade-off is management. Radicale has a minimal web interface for browsing calendars and address books, but you can’t create events or edit contacts through it. All interaction happens through CalDAV/CardDAV clients (your phone, Thunderbird, etc.). For most users, this is exactly right — you don’t manage your Google Calendar through a separate web UI either.
Pros:
- Zero configuration required — works out of the box
- ~5 MB RAM, instant startup
- File-based storage — trivial to backup (copy the directory)
- No database dependency
- LDAP authentication support
- Supports calendar sharing between users
- Mature and stable (10+ years)
Cons:
- Minimal web UI — no calendar/contact editing in browser
- File-based storage doesn’t scale to thousands of users
- No built-in web-based calendar view
- Limited admin tooling
Docker Compose:
services:
radicale:
image: tomsquest/docker-radicale:3.3.2.1
container_name: radicale
ports:
- "5232:5232"
volumes:
- radicale-data:/data
restart: unless-stopped
volumes:
radicale-data:
Resources: ~5 MB RAM. Negligible CPU. Storage grows only with calendar/contact data.
[Read our full guide: How to Self-Host Radicale]
Baikal — Best Web UI
Baikal adds what Radicale deliberately omits: a web administration interface. Through the browser, you can manage users, create calendars and address books, configure settings, and view sync status. The setup wizard walks you through initial configuration, including database selection (SQLite or MySQL).
For households where multiple people need calendar access and the admin (you) needs to manage accounts, Baikal’s web UI saves time. Creating a new user is a form submission, not a config file edit.
Baikal’s compatibility is excellent — it’s been around since 2012 and has been tested with virtually every CalDAV/CardDAV client. If you’re running into sync issues with an obscure client, Baikal is the safest bet.
Pros:
- Web-based admin interface for user and calendar management
- Setup wizard for initial configuration
- Broad client compatibility (tested with many clients over 10+ years)
- SQLite or MySQL backend
- Lightweight (~30 MB RAM)
- PHP-based — runs on shared hosting too
Cons:
- PHP dependency
- Web UI is for administration only — no calendar viewing/editing
- Development pace is slow (stable but infrequent releases)
- No LDAP authentication (htpasswd or database auth only)
Docker Compose:
services:
baikal:
image: ckulka/baikal:0.9.5-nginx
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:
baikal-data:
Resources: ~30 MB RAM. SQLite default.
[Read our full guide: How to Self-Host Baikal] | Radicale vs Baikal
Davis — CalDAV + CardDAV + WebDAV
Davis is a Symfony-based server that adds WebDAV (file sync) alongside CalDAV and CardDAV. If you want one server handling calendars, contacts, and basic file sync, Davis consolidates three protocols.
The admin panel is the most capable of the three options — you can manage users, calendars, address books, and delegations (sharing a calendar with another user with specific permissions). Davis also supports calendar invitations via email and a delegation system for shared calendars.
The setup is more involved than Radicale or Baikal — Davis requires a database (MySQL, PostgreSQL, or SQLite) and runs database migrations on first start. Once configured, it’s stable and performant.
Pros:
- CalDAV + CardDAV + WebDAV in one server
- Admin panel with delegation management
- Calendar invitation support
- LDAP and IMAP authentication
- Database-backed (MySQL, PostgreSQL, or SQLite)
- Symfony framework — well-structured codebase
Cons:
- More complex setup than Radicale or Baikal
- Requires database migrations on first start
- PHP/Symfony dependency — heavier than Radicale
- Smaller community
- WebDAV file sync is basic compared to Nextcloud
Docker Compose:
services:
davis:
image: ghcr.io/tchapi/davis-standalone:5.3.0
container_name: davis
ports:
- "8080:80"
environment:
- APP_ENV=prod
- DATABASE_DRIVER=mysql
- DATABASE_URL=mysql://davis:davis_password@davis-db/davis
- ADMIN_LOGIN=admin # Change this
- ADMIN_PASSWORD=changeme # Change this
- AUTH_REALM=Davis
depends_on:
- davis-db
restart: unless-stopped
davis-db:
image: mariadb:11
container_name: davis-db
environment:
- MYSQL_ROOT_PASSWORD=root_pass # Change this
- MYSQL_DATABASE=davis
- MYSQL_USER=davis
- MYSQL_PASSWORD=davis_password # Match DATABASE_URL above
volumes:
- davis-db:/var/lib/mysql
restart: unless-stopped
volumes:
davis-db:
Resources: ~40 MB RAM (app) + ~80 MB (MariaDB). More with active WebDAV file sync.
[Read our full guide: How to Self-Host Davis] | Davis vs Radicale | Davis vs Baikal
Feature Comparison
| Feature | Radicale | Baikal | Davis |
|---|---|---|---|
| CalDAV | Yes | Yes | Yes |
| CardDAV | Yes | Yes | Yes |
| WebDAV | No | No | Yes |
| Web admin UI | Minimal | Yes | Yes |
| Calendar viewing in browser | No | No | No |
| User management | Config file | Web UI | Web UI |
| LDAP auth | Yes | No | Yes |
| Database | File-based | SQLite / MySQL | SQLite / MySQL / PostgreSQL |
| Calendar sharing | Yes | Yes | Yes (with delegations) |
| Email invitations | No | No | Yes |
| RAM usage | ~5 MB | ~30 MB | ~40 MB (+80 MB DB) |
| Setup complexity | None | Wizard | Database migration |
| Docker containers | 1 | 1 | 2 (app + DB) |
| License | GPL-3.0 | GPL-3.0 | MIT |
| Language | Python | PHP | PHP (Symfony) |
Connecting Your Devices
Regardless of which server you choose, client setup is the same:
iOS: Settings → Calendar → Accounts → Add Account → Other → CalDAV. Enter server URL, username, password. Contacts: Settings → Contacts → Accounts → Add Account → Other → CardDAV.
Android: Install DAVx5 from F-Droid (free) or Play Store (paid). Add account with server URL. DAVx5 syncs both calendars and contacts.
Thunderbird: Settings → Calendar → New Calendar → On the Network → CalDAV. Enter server URL.
macOS: System Preferences → Internet Accounts → Add Other Account → CalDAV.
Related
Get self-hosting tips in your inbox
New guides, comparisons, and setup tutorials — delivered weekly. No spam.