iCal calendar push

There’s a common misconception that iCal uses WebDAV to upload calendars to remove servers. This bites me every so often, as I wrote the Dopplr iCal upload code and people tend to assume that if iCal can upload calendars, so should any other local calendar client that uses WebDAV. And they can’t – things break.

iCal actually does the simplest thing that could possibly work, and I love it for this. You give it a upload url, a username, and a password. The calendar you’re uploading has a name. iCal url-encodes the calendar name, and builds a calendar URL that looks like http://upload_url/calendar_name.ics. Then it does an HTTP PUT (authenticated with the username and password) of the contents of the calendar to that URL. Then it gives the url to the user and tells them that their calendar is here.

(As an aside, this means that you can upload more than one calendar into Dopplr, as long as they all have different names.)

That’s it. Exactly one HTTP call, one verb (Well, ok, there’s another verb. When you unpublish something, iCal sends an HTTP DELETE. But you knew that). It’s a subset of WebDAV, which is why iCal can also publish to WebDAV servers. But I was able to implement 60% of the iCal upload feature in Dopplr during the tea break in the middle of the meeting where someone came up with the idea, because adding support for a single extra verb to a single extra path is easy. Implementing WebDAV? Harder to get right.