Development
Use iCloud Calendar and Contacts on Linux

You have three practical ways to reach iCloud Calendar from Linux: subscribe to a public calendar for read-only viewing, connect a desktop client privately through CalDAV for changes in both directions, or use Calendar on iCloud.com. Contacts are separate: use CardDAV in a capable desktop client or Contacts on iCloud.com. A public calendar feed never provides contact sync or the ability to edit events.
Choose the right access mode
| Method | Calendar access | Contacts | Privacy and limits |
|---|---|---|---|
| Public calendar subscription | Read-only events in a client that accepts an ICS subscription | None | Anyone with the URL can view the calendar. Do not use it for private events. |
| Authenticated CalDAV and CardDAV | Potential two-way editing in a supported client | Potential two-way editing through CardDAV | Keeps the calendar private, but the client receives account access. Verify each direction before relying on it. |
| iCloud web apps | View and edit in a Linux browser | View and edit in a Linux browser | No desktop integration; use a supported browser and your normal Apple Account sign-in. |
Read-only public calendar
On the iPhone, open Calendar, tap Calendars, tap the information button beside a calendar, and turn on Public Calendar. Apple explains how to share its subscription link. In Thunderbird, create a calendar On the Network, enter the link in Location, find calendars, and subscribe; Mozilla's calendar instructions describe network ICS subscriptions as generally read-only. Other Linux calendar apps may accept a web calendar URL too, but check whether they refresh the feed and how often.
Making a calendar public exposes its events to anyone who has the link. Treat that URL as sensitive, avoid posting it in screenshots or logs, and disable public sharing when you no longer need it. This route cannot create or change events on the iPhone and cannot sync contacts. If the calendar contains private details, use a private authenticated method or the iCloud web app instead.
Private desktop sync: test with one calendar first
Apple supports third-party access to iCloud Calendar and Contacts. For some supported apps, an Apple Account authorization flow lets you grant access without an app-specific password. If the client does not offer that flow, generate an app-specific password under Sign-In and Security > App-Specific Passwords at account.apple.com. Two-factor authentication is required. Enter the generated password in the desktop client's password prompt, never the primary Apple Account password. You can revoke that one credential later, and changing the primary password revokes all app-specific passwords. Do not put the credential in a command, calendar URL, shell history, or article screenshot.
Thunderbird's New Calendar > On the Network flow accepts an authenticated calendar URL and can discover calendars when the service responds. Enter your Apple Account address as the user name, use the private CalDAV location supplied or discovered for your account, and authenticate in the prompt. Do not paste a public webcal:// or ICS URL here expecting write access. Mozilla documents the network calendar setup, but iCloud account discovery and the exact private URL can differ by client and account. If automatic discovery fails, do not guess a server path from an old forum post; use the client's current iCloud instructions or the web app.
In a Debian 13 VM with Thunderbird 140.16 ESR, this flow discovered private iCloud CalDAV collections. One collection appeared in the calendar list but was absent from the New Event destination menu. A newly created private test calendar was discovered separately, accepted a no-reminder event from Thunderbird, and stored it on the iCloud CalDAV server. The event remained visible after Thunderbird restarted. An edit made on iCloud.com returned to Thunderbird after a calendar refresh. Check that the calendar appears in the event destination menu before testing writes; do not use an automation or shared calendar just because Thunderbird offers it.
After adding a calendar, create a harmless test event on the Linux client and confirm it appears on the iPhone or iCloud.com. Edit it on the iPhone and confirm the change returns to Linux. Check the selected destination calendar before creating real events: a local-only calendar can look identical in the client. Repeat after restarting the client and note the refresh delay. If either direction fails, treat the setup as unverified and use iCloud.com until it is fixed.
Set up contacts separately
CalDAV does not carry contacts. In Thunderbird's Address Book, add a CardDAV Address Book and use the private CardDAV service discovery or location for your iCloud account, with the same authorization method or a separate app-specific password. Evolution has a documented CardDAV address book setup with server discovery; its CalDAV calendar setup is separate. Add a disposable contact from Linux, check it on the iPhone or iCloud.com, edit it there, and check the returned change on Linux. Delete the test contact from both sides only after verifying that deletion also syncs as expected.
The Thunderbird VM loaded the iCloud CardDAV address book and saved a disposable contact into it. The contact acquired a server address and ETag and remained visible after Thunderbird restarted. An edit made in iCloud Contacts returned after using Synchronize on the CardDAV address book in Thunderbird. The test contact was then deleted. When creating a contact, change Add to from the default local Personal Address Book to the CardDAV book. Repeat the two-way check with your own account before relying on the connection.
GNOME Calendar and KDE calendar applications depend on their account services or installed PIM components for remote CalDAV and CardDAV support. Seeing an iCloud calendar in one app does not prove the address book is connected in another. Evolution may expose CardDAV contacts to GNOME Contacts, according to its address book documentation; KDE users should check their installed account and Akonadi integrations. Client versions and distribution packaging differ, so confirm the account type and run the same two-way checks before relying on any desktop integration.
Browser fallback and recovery
When a client cannot discover the private service, prompts repeatedly for credentials, or shows stale items, use iCloud Calendar and iCloud Contacts in the browser. Confirm that the data is correct there first. Recheck the account address, calendar choice, two-factor status, authorization, and whether the app-specific password was revoked. Remove a failed local account before retrying to avoid duplicate calendars or address books. Keep a backup export of important contacts and calendars before experimenting with bulk edits or deletions.
Do not publish a private calendar URL to troubleshoot it. Redact usernames, tokens, event titles, and contact details from any log you share. The safest proof of a working setup is a small event and contact created and edited in both directions, followed by a check after the client restarts.
For other iCloud data on Linux, see the guides to iCloud Photos and iCloud Drive.