An XDA writer replaced Google Calendar with a free self-hosted app this month and said, on the record, they are not going back. The story got traction because it echoed something a lot of readers were already testing quietly. Self-hosted calendar servers moved past the “runs but painful” stage a couple of years ago. We tested seven self-hosted calendar options for Windows, macOS, and Linux so a swap doesn’t sit on your to-do list for another quarter.
What to look for in a self-hosted calendar app
- CalDAV support. It’s the protocol that lets Thunderbird, Fantastical, Apple Calendar, and mobile clients talk to your server. Anything non-CalDAV is a walled garden with fewer walls.
- Contacts and tasks alongside events. Most people want one server for calendars, address books, and to-dos. Separate servers per data type doubles the maintenance.
- Docker image, native package, or both. A one-line install matters more than which language it’s written in.
- Backup that’s actually simple. Calendar data is small. If a plain filesystem or SQLite dump doesn’t work, the design is over-engineered.
- Sane defaults for authentication. HTTPS with a real cert, per-user accounts, and rate limits should be one config file away.
Quick comparison
| App | Best for | Platforms | Free plan | Starting price |
|---|---|---|---|---|
| Radicale | Minimal Python CalDAV server | Linux, Windows, macOS, Docker | Yes, fully | Free |
| Baikal | PHP CalDAV with a real admin UI | Linux, Windows, macOS, Docker | Yes, fully | Free |
| Nextcloud Calendar | Full suite with calendar as one feature | Linux, Windows, macOS, Docker | Yes, fully | Free |
| EteSync | Encrypted client-server calendar | Linux, Windows, macOS, Docker | Yes (self-host) | Free (self-host) or $2/mo hosted |
| SOGo | Groupware-grade CalDAV plus web UI | Linux, Docker | Yes, fully | Free |
| Thunderbird | Local-first client for CalDAV servers | Linux, Windows, macOS | Yes, fully | Free |
| DAVx5 Server | Reference DAV server, kept small | Linux, Docker | Yes, fully | Free |
The 7 best self-hosted calendar apps for desktop
1. Radicale, best minimal server
Radicale is 3,000 lines of Python and does one job: serve CalDAV and CardDAV. Point it at a directory, add HTTPS, and you have a working calendar server in an afternoon. Storage is plain files, which means the backup story is rsync. That simplicity is the pitch and, for most solo households, the right answer.
Where it falls short: No admin UI. User management is a config file. Multi-tenant scenarios need reverse-proxy work.
Platforms: Linux, Windows, macOS, Docker, any host with Python 3.
Download: Radicale
Bottom line: The right pick for a single household that wants a calendar server they can understand end-to-end.
2. Baikal, best PHP option with an admin UI
Baikal wraps the sabre/dav library in a PHP admin panel that lets non-CLI users add accounts, adjust quotas, and audit connections through a browser. Any host that already runs PHP (a lot of home NAS units do) can add Baikal in a few minutes.
Where it falls short: PHP dependency chain is a lift for hosts that don’t already have it. Web UI is functional, not beautiful.
Platforms: Linux, Windows via Docker, macOS, Docker, shared PHP hosts.
Download: Baikal
Bottom line: The pick when the household already has a LAMP or Docker PHP host and wants a web admin.
3. Nextcloud Calendar, best all-in-one suite
Nextcloud Calendar ships as one app inside Nextcloud, which also handles files, contacts, tasks, notes, and photos. Households that want a single self-hosted stack for everything end up here. The mobile clients (iOS, Android via DAVx5) sync cleanly, and the web calendar covers the standard scheduling flows.
Where it falls short: Nextcloud is a heavy install. PHP-FPM, a database, a reverse proxy, and a hardening checklist. Calendar performance depends on how well you tuned everything else.
Platforms: Linux, Windows via Docker, macOS, Docker, Nextcloud AIO container.
Download: Nextcloud
Bottom line: The right pick when the household wants one server for every self-hosted data type.
4. EteSync, best encrypted calendar
EteSync encrypts event content client-side before it ever touches the server. The self-hosted server is Python-based and stores ciphertext only. Even a full server compromise leaves the calendar data unreadable.
Where it falls short: Client support is narrower than CalDAV. EteSync’s own apps are the main path; standard clients like Apple Calendar don’t talk directly to it.
Platforms: Linux, Windows via Docker, macOS, Docker.
Download: EteSync
Bottom line: The pick when the threat model includes the calendar server itself.
5. SOGo, best groupware-grade server
SOGo is the mature groupware server that ships CalDAV, CardDAV, and a Roundcube-style web UI in one install. Households or small teams that also want a shared address book and web mail integration lean here. The install is heavier than Radicale, but the feature ceiling is higher.
Where it falls short: Installation is a lift. Not casual-user friendly. Web UI feels enterprise.
Platforms: Linux (primary), Docker.
Download: SOGo
Bottom line: The pick for a small team or a household that wants Exchange-style capability without Exchange.
6. Thunderbird, best local-first CalDAV client
Thunderbird isn’t a server, but any conversation about self-hosted calendars on desktop must include it. It’s the client that talks to every server on this list, runs on every desktop OS, and stores events locally so a network blip doesn’t erase your view of tomorrow. The 2025 rewrite of the calendar backend fixed a lot of the old sync annoyances.
Where it falls short: Client only. You still need a server. UI is functional, not aspirational.
Platforms: Windows, macOS, Linux.
Download: Thunderbird
Bottom line: The default desktop client for any CalDAV setup.
7. DAVx5 Server, best reference DAV
DAVx5 Server is a small Kotlin-based CalDAV/CardDAV server maintained by the team behind the popular Android DAVx5 client. It’s designed to be an easy-to-run reference for testing, but plenty of users end up leaving it running as their real server.
Where it falls short: Smaller community than Radicale or Baikal. Docker image is the primary distribution path.
Platforms: Linux, Docker, any JVM host.
Download: DAVx5 Server
Bottom line: The pick for JVM-comfortable homes that already use the DAVx5 mobile client.
How to pick the right one
- If you want the smallest possible server you can still understand: Radicale.
- If you already run PHP and want a web admin: Baikal.
- If you want one server for every self-hosted data type: Nextcloud Calendar.
- If the threat model includes the server itself: EteSync.
- If you want groupware capability for a small team: SOGo.
- Whichever server you pick, run Thunderbird on the desktop clients.
- If you’re a DAVx5 user on Android and want a matching server: DAVx5 Server.
FAQ
What is the best free self-hosted calendar for desktop?
Radicale is the smallest and cleanest starting point for solo households. Baikal adds a web admin UI for the same effort. Both are open-source, Docker-friendly, and speak standard CalDAV so any desktop client can connect.
Can I sync a self-hosted calendar to my iPhone?
Yes. iOS supports CalDAV natively in Settings → Calendar → Accounts. Add a CalDAV account, point it at your server’s URL, and events sync in both directions. The same works on Android via the DAVx5 client.
Do I need a public server or can I run this at home?
You can run any of these at home behind a reverse proxy like Caddy, Traefik, or Nginx Proxy Manager. Users who don’t want to expose the server to the internet run it on the home network only and connect via VPN or Tailscale when away.
Is Nextcloud Calendar better than Radicale?
Different answers for different households. Nextcloud does more (files, contacts, notes) but costs more to run and maintain. Radicale does one job well and costs almost nothing to run. Pick based on how many other self-hosted services you want in one place.
How do I migrate from Google Calendar?
Export your Google Calendars as ICS files (Google Calendar Settings → Import & export → Export). Import each ICS into your new server via the client (Thunderbird, Apple Calendar, or Nextcloud’s web UI). Existing recurring events, attendees, and reminders come across cleanly. Stop syncing Google Calendar to your clients once the new server is live.