ICS Calendar

ICS Calendar
  • Features
    • ICS Calendar Pro
    • Feature Comparison
    • Sample Calendars
    • Preview Your Calendar
    • More WordPress Plugins
  • Help
    • User Guide
      • Getting Started
      • General WordPress Settings
      • ICS Calendar Settings
      • Shortcode Overview
      • Shortcode Reference
      • FAQs and Tips
      • CSS Guide
      • Developer Resources
      • GDPR
    • Pro Documentation
      • Calendar Builder
      • ICS Events
      • Manual Calendar Setup
      • Admin Utilities and Settings
      • Customizer
      • Block Editor
      • Parameters Reference
    • Shortcode Builder
    • Support Request Form
    • Translation Suggestions
  • Blog
  • Download
  • Buy Now
  • Cart
  • My Account
Search
More...

Which iCalendar fields should ICS Calendar support?

March 24, 2023

From the beginning, I’ve taken a very pragmatic approach with this plugin: I’ve built it and added new features primarily in response to user demand, trying to keep both the user experience and the code base as simple as possible. Of course over time it has grown quite complex, but I’ve still always tried to adhere to that pragmatic approach of only including features that I know people actually need.

iCalendar is a specification — a set of guidelines that programs are intended to adhere to for interoperability. It’s how you’re able to subscribe to a Google Calendar with your iPhone Calendar app, for instance, or how a collaborator using Microsoft Office 365 can send you a meeting invitation that gets added to your Google Calendar. If these programs weren’t using a common language to communicate, you wouldn’t be able to share data between them, and the specification (or “spec”) is the dictionary for that common language.

But like all languages, iCalendar has numerous dialects. Big tech companies want to do things their own way, both due to the inherent nuances of internal corporate culture but also because ultimately they are competing with each other and want to find an edge. So even though they all ostensibly support the iCalendar spec, they inevitably tend to deviate from the spec in one of three ways:

  1. Choosing not to support certain features
  2. Using certain features in ways other than how they’re defined in the spec
  3. “Extending” the spec with their own custom features

Anyone who was a web developer during the “browser wars” of the late 1990s and early 2000s, before the standards of HTML5 became widespread, will have firsthand, probably painful, knowledge of how this all goes down.

Which brings me to the details of the iCalendar spec, and which fields ICS Calendar needs to support. As an exercise in determining how well ICS Calendar is representing the most commonly used fields, I parsed the data from three sample Google Calendar feeds, three Microsoft Office 365 feeds, and one Airbnb feed. I found that across all seven of these feeds and a variety of types of event data, there were really only a small number of fields getting used on a regular basis. Let’s take a look at how these break down.

General feed data, control structures, and timezone information

BEGIN
CALSCALE
END
METHOD
PRODID
TZID
TZNAME
TZOFFSETFROM
TZOFFSETTO
VERSION

You’ll find BEGIN and END throughout an .ics file, serving a variety of purposes. They’re basically “opening” and “closing” tags in terms of the logical structure of the file, and will always be paired with something else: BEGIN:VCALENDAR for the overall document; BEGIN:DAYLIGHT for details of the beginning and end of Daylight Saving Time within the feed, BEGIN:VEVENT for each individual event, etc.

The fields beginning with TZ are timezone-related, and generally appear inside the BEGIN:DAYLIGHT structures.

The other fields listed here are relevant to the overall configuration of the calendar or information about the source server, but do not pertain to any individual events.

Event “meta data”

ACKNOWLEDGED
ACTION
CLASS
CREATED
DTSTAMP
LAST-MODIFIED
PRIORITY
RELATED-TO
STATUS
TRANSP
TRIGGER
UID

These fields do not contain displayable information about the event, but rather information about how or whether to display the event at all (specifically CLASS, STATUS and TRANSP), or more general information about when the event was created or modified. UID is a unique identifier for the event, and RELATED-TO uses UID values to link related events together.

ICS Calendar uses some of these fields, where relevant, especially CLASS for hiding private events, and UID for manipulating the data of a specific event, such as for generating the individual event download file when eventdl="true" is set in the shortcode. Other meta data fields, e.g. ACKNOWLEDGED or LAST-MODIFIED, do not really have any relevance for ICS Calendar.

Recurring events

Recurring events include some additional “meta data” fields:

EXDATE
RDATE
RECURRENCE-ID
RRULE
SEQUENCE

These fields are primarily used by the parser to calculate the actual dates and times of all of the recurrences.

Event information

Now we get to the heart of ICS Calendar’s displayed output for events. The following fields:

ATTACH
ATTENDEE
DESCRIPTION
DTEND
DTSTART
LOCATION
ORGANIZER
SUMMARY
URL

First, let’s scratch ATTENDEE. That is generally considered private information that would not be relevant to a public calendar, so we do not display it.

The DTSTART and DTEND fields store the date and time that each event begins and ends.

The SUMMARY field could be considered the “title” or “label” for the event, and it’s the text that displays next to the event’s start time in the calendar.

The DESCRIPTION field can contain a large block of text and even HTML. It is the text that gets displayed in the hover box or lightbox when a user hovers over or clicks on an event in the calendar to get more information. Popular systems like Google Calendar and Office 365 put almost all of the event’s information into this field, even if there are dedicated fields where it would be more appropriate.

The remaining fields, ATTACH, LOCATION, ORGANIZER and URL are also commonly used, when relevant, and ICS Calendar supports optionally displaying or hiding them.

…and the rest

Remember how I said individual vendors like to extend the spec to suit their purposes? In iCalendar, these are the X- fields, vendor-specific fields that serve a purpose within their systems, but most likely are totally ignored by any other software, including ICS Calendar.

Across the seven feeds I tested, here’s the full list of vendor-specific fields that appeared. Brace yourself.

X-ALARM-TRIGGER
X-ALT-DESC
X-APPLE-DEFAULT-ALARM
X-APPLE-NEEDS-REPLY
X-APPLE-STRUCTURED-LOCATION
X-APPLE-SUGGESTION-INFO-CHANGED-FIELDS
X-APPLE-SUGGESTION-INFO-CHANGES-ACKNOWLEDGED
X-APPLE-SUGGESTION-INFO-OPAQUE-KEY
X-APPLE-SUGGESTION-INFO-UNIQUE-KEY
X-APPLE-TRAVEL-ADVISORY-BEHAVIOR
X-BUSYMAC-LASTMODBY
X-ENTOURAGE_UUID
X-ENTOURAGEUUID
X-GOOGLE-CONFERENCE
X-GOOGLE-HANGOUT
X-KERIO-ORIGINAL-PRODID
X-LABEL
X-LIC-LOCATION
X-MICROSOFT-CDO-ALLDAYEVENT
X-MICROSOFT-CDO-APPT-SEQUENCE
X-MICROSOFT-CDO-BUSYSTATUS
X-MICROSOFT-CDO-IMPORTANCE
X-MICROSOFT-CDO-INSTTYPE
X-MICROSOFT-CDO-INTENDEDSTATUS
X-MICROSOFT-CDO-OWNERAPPTID
X-MICROSOFT-DISALLOW-COUNTER
X-MICROSOFT-DONOTFORWARDMEETING
X-MICROSOFT-EVENTPROPERTIESTODELETE
X-MICROSOFT-LATITUDE
X-MICROSOFT-LOCATIONCITY
X-MICROSOFT-LOCATIONCOUNTRY
X-MICROSOFT-LOCATIONDISPLAYNAME
X-MICROSOFT-LOCATIONPOSTALCODE
X-MICROSOFT-LOCATIONS
X-MICROSOFT-LOCATIONSOURCE
X-MICROSOFT-LOCATIONSTATE
X-MICROSOFT-LOCATIONSTREET
X-MICROSOFT-LOCATIONURI
X-MICROSOFT-LONGITUDE
X-MICROSOFT-ONLINEMEETINGCONFERENCEID
X-MICROSOFT-ONLINEMEETINGCONFLINK
X-MICROSOFT-ONLINEMEETINGINFORMATION
X-MICROSOFT-ONLINEMEETINGTOLLNUMBER
X-MICROSOFT-SCHEDULINGSERVICEUPDATEURL
X-MICROSOFT-SKYPETEAMSMEETINGURL
X-MICROSOFT-SKYPETEAMSPROPERTIES
X-MS-OLK-APPTSEQTIME
X-MS-OLK-AUTOSTARTCHECK
X-MS-OLK-CONFTYPE
X-NEXT-ALARM
X-WR-ALARMUID
X-WR-CALDESC
X-WR-CALNAME
X-WR-TIMEZONE

What about other fields in the iCalendar spec that aren’t listed here?

The weird thing about specifications is that they’re somewhat idealistic documents. The hope is that the vendors building software around these specs will honor them to the letter, but the reality is, that doesn’t happen. So we’re left with a number of well-considered fields that are nonetheless completely (or at least typically) ignored by the major vendors. I turned up these fields defined in the spec but not appearing in any of the sample feeds I reviewed:

CATEGORIES
COMMENT
COMPLETED
CONTACT
DUE
DURATION
FREEBUSY
GEO
PERCENT-COMPLETE
REPEAT
REQUEST-STATUS
RESOURCES
TZURL

Of these, CATEGORIES is definitely the most requested. Google Calendar and Office 365 let you color-code or otherwise “categorize” events, but that data is not passed through in the .ics file at all, and the CATEGORIES field would be a perfect place for it. I am aware that some less commonly used calendar programs do use this field though, so ICS Calendar has rudimentary support for it, in the form of HTML data attributes. There is no automatic visual styling of events based on CATEGORIES, but with access to these data attributes, site developers can add their own CSS or JavaScript to take advantage of it. Here’s how.

Several of the rest of these are probably not relevant to most uses of ICS Calendar, such as COMMENT, COMPLETED, DUE, PERCENT-COMPLETE or REQUEST-STATUS, all of which seem to pertain primarily to to-do lists. Likewise REPEAT is specific to alarms, so it is not relevant to ICS Calendar.

While FREEBUSY may seem to be relevant, it does not appear to be commonly used in feeds, so ICS Calendar does not (currently) support it. Likewise, TZURL does not appear to be used at this time — though my best interpretation of the spec is that it is designed to allow timezone/DST-related information to be updated in the future from an external URL… which may turn out to be useful if the United States passes laws currently under consideration to make Daylight Saving Time permanent year-round, for instance.

This leaves the following fields which ICS Calendar does not currently support, but may be worth consideration, and which we’ll look at individually:

CONTACT: This field is intended to contain contact information for the event. This certainly sounds like a useful field! But in practice I have yet to find a feed that is actually using it; instead, this data seems to generally be included in the ORGANIZER field. I am considering enhancing the existing organizer="true" parameter to include CONTACT as well, if it’s present in the feed.

GEO: This field is intended to include latitude and longitude coordinates for the event. Sounds great, but again I have not seen any feeds that actually include this. At present, ICS Calendar supports an option to auto-generate a Google Maps link based on the address held in the LOCATION field. It would not be a stretch to add support for GEO using the coordinates, although since I have yet to see a feed that includes this field, it will be difficult to test. (Related: I am also looking into adding an option to use OpenStreetMap as an alternative to Google Maps. That would apply to either LOCATION or GEO, once implemented.)

An interesting side note about GEO: Look at that vendor-specific list above. It includes X-MICROSOFT-LATITUDE and X-MICROSOFT-LONGITUDE, which should be put into the GEO field. Why doesn’t Microsoft use that field? I have only cynical answers to that question. (Even more interesting: Those fields did not appear in the Office 365 feeds I tested, but rather in a Google Calendar feed… on an event that was created from an invitation by an Office 365 user.)

RESOURCE: This is a field for information about resources needed for an event, such as intra-office room and equipment reservations. It makes perfect sense to include this as an option in ICS Calendar, but once again, I have not seen any feeds that actually contained this data, yet.

Conclusion

It does appear that there are three currently unsupported fields that are worthy of consideration for addition to ICS Calendar: CONTACT, GEO and RESOURCEs. The biggest challenge with adding any of these new types of features is that I really like to have real-world examples of feeds to work with for testing any functional changes, so I can be sure that the actual data ICS Calendar’s users have in their calendars is getting handled properly.

These options are now available as of version 10.9.0. CONTACT and GEO are integrated with the existing functionality of organizer="true" and location="maplinks" respectively. RESOURCES is a new option that you can display by adding resources="true" to your shortcode. You can also now choose Bing or OpenStreetMap as alternatives to Google when using location="maplinks", by adding mapsource="bing" or mapsource="openstreetmap" to your shortcode.

If your feed includes these fields, I’d like to hear from you! Please use the Pro Support Form to let me know.

—Scott

Category: New Features • Deep Dives

Categories

  • Uncategorized
  • New Features
  • Bug Squashing
  • Just for Fun
  • Web Design & Development
  • Translation
  • Deep Dives

Recent Posts

  • ICS Calendar Pro 5.10.0 and ICS Calendar 11.5.9 updates April 24, 2025
  • Big improvements to ICS Events in versions 5.9.0 and 5.9.1 February 26, 2025
  • Happy Holidays from Room 34! December 8, 2024
  • Update to version 5.6.1.1 ASAP to resolve possible database performance issues introduced in 5.6.0 November 14, 2024
  • ICS Calendar Block is officially deprecated in version 5.6, will be removed in version 6.0 November 7, 2024

Related Links

  • Room 34 Creative Services
    Developer of ICS Calendar
  • Underdog of Perfection
    Room 34’s general blog
  • More Plugins by Room 34
    Available in the WordPress Plugin Directory

Room 34 Creative Services, LLC

  • Facebook
  • YouTube
  • Bandcamp
  • Room 34 Creative Services, LLC
  • Minneapolis, Minnesota 55406 USA
  • info@icscalendar.com
  • More WordPress Plugins
  • Privacy Policy
  • Terms & Conditions

Copyright © 2025 Room 34 Creative Services, LLC. All rights reserved.
"ICS Calendar", "ICS Calendar Pro", "ICS Events", the ICS Calendar logo and ICS icon are trademarks of Room 34 Creative Services, LLC.

https://icscalendar.com/which-icalendar-fields-should-ics-calendar-support

This website uses cookies solely for necessary functions, such as accessing your account orders and license details. Accept to continue or find out more in our Privacy Policy.

Accept & Continue