Baïkal
Lightweight CalDAV and CardDAV server with web admin
Baïkal is a lightweight CalDAV and CardDAV server built on the sabre/dav library, providing calendar and contact synchronization with a simple web admin panel. It suits individuals and small teams.
Key features
- CalDAV and CardDAV server
- Web-based administration
- SQLite or MySQL storage
- Standards-compliant sync
Pros & cons
Strengths
- Simple and lightweight
- Easy admin interface
Trade-offs
- No web calendar interface
- Admin tool, not full groupware
Baïkal replaces
Last reviewed Sep 13, 2026 · 765 words
Baïkal has no calendar view, no contacts page, and no user-facing interface at all beyond an admin panel, and that absence is exactly why I recommend it. It is a CalDAV and CardDAV server and nothing else: your phone, your desktop mail client and your partner's iPad talk to it using the same protocols they would use with iCloud, and the data sits in one SQLite file you can copy with cp. For a household or a 5-person team that wants to leave Google Calendar without adopting a whole Nextcloud, it is the lightest option that still has a web admin.
What it is: sabre/dav with an admin page bolted on
Under the hood is sabre/dav, the same PHP library that powers calendar and contacts sync in Nextcloud and several commercial products, so the protocol implementation is mature and boring in the best sense. Baïkal wraps it with an admin panel at /admin/ where you create users, set their passwords, and create address books and calendars for them. That is the whole feature list, and it has been stable since 2012. It uses about 100 MB with PHP-FPM idling; the catalogue's 128 MB figure is honest.
Install: one container, one volume, five minutes
The community image ckulka/baikal is what nearly everyone runs:
services:
baikal:
image: ckulka/baikal:nginx
ports:
- "8080:80"
volumes:
- ./config:/var/www/baikal/config
- ./data:/var/www/baikal/Specific
restart: unless-stopped
Open http://host:8080/admin/, walk through the 2-page setup wizard (choose SQLite unless you already run MySQL for something else), set the admin password, and create a user. Back up config/ and data/ and you have backed up everything. Put a reverse proxy with TLS in front before any phone touches it, because every client sends the password on every request and Basic auth over plain HTTP on a coffee-shop network is a credential leak.
Clients: Apple native, Thunderbird native, Android needs DAVx5
iOS and macOS speak CalDAV and CardDAV natively; in Settings, add an account of type Other, pick CalDAV, and enter the server as https://dav.example.com/dav.php/principals/username/. Thunderbird finds calendars and address books through its own account wizard. Android has no built-in support at all, so install DAVx5 (free on F-Droid, paid on Play as a way to fund the project), which then feeds the stock Calendar and Contacts apps. Outlook desktop does not speak either protocol without a paid plugin; if your household lives in Outlook, Baïkal is the wrong server.
The URL trap that generates half the support threads
Baïkal exposes two endpoints: /dav.php serves both CalDAV and CardDAV, and the older /card.php and /cal.php still exist for compatibility. Clients that do service discovery want the well-known redirects, so your reverse proxy must forward /.well-known/caldav and /.well-known/carddav to /dav.php. The container image handles this for nginx inside, but if you terminate at Caddy or Traefik and rewrite paths, check it with curl -u user:pass -X PROPFIND https://dav.example.com/dav.php/ before blaming the phone. Also set the Baïkal admin's "Invite from" address and the server's base URI correctly in the admin settings, or shared-calendar invitations carry a localhost link.
Radicale or Nextcloud instead?
Radicale is the closest sibling in the groupware category: Python instead of PHP, stores calendars as plain .ics files on disk instead of SQLite, and has no admin UI at all (users come from an htpasswd file). Pick Radicale if you want git-diffable storage and never want to open a browser to manage it; pick Baïkal if you want the admin page and MySQL as an option. Nextcloud is the bigger project and the safer pick if you also want a web calendar people can look at, sharing with external people, or file sync; it costs 1 GB of RAM and a database rather than 100 MB and a file. The mistake is picking Nextcloud only for CalDAV and then maintaining a full PHP app suite for two calendars.
What I'd do
Baïkal in the ckulka container behind Caddy on dav.example.com, SQLite, one user per person, calendars named per purpose (home, work, kids) rather than one big one. Nightly sqlite3 data/db/db.sqlite ".backup ..." to the same place your other backups go. DAVx5 on Android, native accounts on Apple devices. Then forget it exists, which is the highest compliment I can pay a server.
Compare Baïkal
3 head-to-head comparisons.
Similar groupware apps
Rallly
GroupwareSelf-hosted meeting and event scheduling polls
Replaces Doodle, When2meet
Colanode
GroupwareCollaboration suite with real-time messaging, rich text pages, file
Radicale
GroupwareSimple, lightweight CalDAV and CardDAV server
Replaces Google Calendar, iCloud
Easy!Appointments
GroupwareOpen-source web appointment scheduler
Replaces Calendly, Acuity Scheduling
SOGo
GroupwareScalable groupware server with webmail, calendar and contacts
Replaces Microsoft Exchange, Microsoft 365
ZenTao
GroupwareOpen-source project and team collaboration platform
Replaces Jira, Confluence