ICalendar

iCalendar, or ICS, is a standardized format for storing and transmitting calendar data, including scheduled events and "to-do" lists. People often associate it with Apple's iCal program (now just "Calendar"), but it is a standardized format with an official RFC document (RFC 5545) and the format is supported by many calendar programs including Google Calendar and Mozilla Lightning (plugin for Thunderbird). Microsoft Outlook does the typical Microsoft thing of supporting something vaguely resembling the standard but full of quirky incompatibilities. However, in their defense, what they originally supported was vCalendar, a format which is a predecessor of iCalendar and is very similar in structure; when the iCalendar standard was later developed from it by other vendors, Microsoft only partially supported it at first (though support improved in later versions).

Subscribable calendars can be created by creating and updating a file in this format that is accessible on the Internet via a URL (where the URL stays the same even as the file is modified to reflect updates to the calendar events). Various calendar software (such as the calendar app on iOS or Android devices) will let you subscribe to a calendar URL and will automatically fetch updates so that whenever you view the calendar in your app it will be up-to-date. Read-only access to subscribed calendars can be done with the HTTP protocol, but the CalDAV protocol (based on WebDAV and defined by RFC 4791) permits both reading and writing for full calendar syncing across multiple users (requiring both a client and a server that supports this protocol, and whatever permissions are needed to have access to the particular calendar involved).

Individual event listings can also be provided in iCalendar form to be downloaded, attached to e-mail, and so on. This is often done in websites devoted to particular events, conventions, meetings, concerts, and the like. You can import them into your personal calendar in various calendar apps and programs, though when you do it in this manner it is only a one-time import which does not automatically update to reflect changes in the event as subscribable calendars do.

Identification
An iCalendar file is very similar in format to a vCalendar file; they both even have  as their first line (the file is in a plain-text-based format, often in the UTF-8 encoding), but the second line is   in iCalendar, as opposed to   in vCalendar. The .ics extension is normally used for iCalendar and .vcs for vCalendar.

Subscribing to calendars
These system-specific methods are always subject to change as new versions of the respective software are released.

Apple iOS (iPhone, iPad, etc.)
Open the Settings app, and go to Mail, Contacts and Calendars. Pick Add Account... and then Other, and Add Subscribed Calendar. It then asks for the "Server", and here's where you type or paste in the calendar URL. The calendar will now show up among your other calendars in the Calendar app, color-coded to distinguish it. (Note that, when you leave out the "http" part, or perhaps even if you include it, current iOS versions will try to connect to a "https" (SSL) server first, slowing things down if none exists.)

Apple OSX Calendar (Mac)
In the File menu, pick New Calendar Subscription. Enter the URL of the calendar. You'll get one more screen to set various characteristics of the subscription.

Google Calendar
Click on the arrow to the right of "Other Calendars" in the left column to bring up a pulldown menu. Select Add by URL. Type or paste in the calendar URL.

Microsoft Outlook
Click on Open Calendar (in top button row), and pick "From Internet". Enter the URL of the calendar and click "Yes" on the next screen to confirm adding it. Cross your fingers that it will work, since Microsoft can have quirky ideas of how to implement standards.

Mozilla Sunbird
Pick Subscribe to Remote Calendar from File menu. Choose "On the Network", then "iCalendar (ICS)". Enter the URL in the Location field. You can give the calendar a nickname and color on the next screen.

Opening/Importing Calendars
(to read in the data from an ICS file without subscribing to it through the network)

Apple OSX Calendar (Mac)
The Import... subitem in the Import submenu of the File menu will give you a file picker where you can import data from an ICS file.

Microsoft Outlook
While in the Calendar section, select Open from the File menu, then pick Open Calendar and select the desired file from the file picker. It will be added as a new separate calendar in your setup.

To import into an existing calendar instead, choose Import within the Open section of the File menu, giving you an "Import Wizard" in which you can select "Import an iCalendar (ICS) or vCalendar (VCS) file". This gives you a file picker to select your file.

Mozilla Sunbird
Use Open Calendar File... (from the File menu) and then pick a file in the file-picker that comes up next, to open the file and make it a new calendar in your setup (with a separate colored icon). Any changes you make to the calendar within Sunbird will be saved back out to the same file.

Use Import... (also in the File menu) to load the contents of an ICS file into an existing calendar (including your default one). Any changes you make would then be saved to your regular calendar file, not the one you imported, which remains unchanged.

Specs and standards

 * RFC 5545 - iCalendar spec
 * RFC 4791 - CalDAV spec

Sample files

 * iCalShare - lots of subscribable calendars
 * webcal.fi - subscribable/downloadable calendars

APIs

 * Google CalDAV guide

Programs and utilities

 * PMical -- handle iCalendar files in Pegasus Mail
 * Convert between Outlook and iCal
 * Encode event data as QR bar code

Other links

 * Wikipedia article
 * iCalendar to Appointment Object Conversion Algorithm (Microsoft)
 * Tony Finch - iCalendar is wrong
 * The Art of Keeping Appointments
 * How to Add an iCal or .ICS Calendar to Google Calendar