ICS

Wat is een ICS-bestand?

Het uitwisselingsformaat voor agenda’s. Elke uitnodiging die je hebt gekregen is zo’n bestand.

Wat ICS is

ICS is een puur tekstformaat dat in elke editor opengaat. Het wordt gebruikt voor gegevens tussen programma’s verplaatsen.

De extensie is .ics en de volledige naam iCalendar. Allebei zeggen ze minder dan wat het bestand kan bevatten, en daar gaat de rest van deze pagina over.

Waar ICS vandaan komt

Het gaat terug tot 1998. De specificatie is RFC 5545.

Aan een formaat dat zo lang leesbaar is gebleven kun je iets toevertrouwen dat je over tien jaar terug wilt hebben.

De specificatie is openbaar

Ze is volledig gepubliceerd, dus wie het formaat wil uitvoeren kan dat uit het document doen in plaats van door te kijken hoe anderen het doen. Daarom duikt het in zo veel programma’s op, en daarom gaan bestanden van twintig jaar geleden nog steeds open. Openbaar is niet hetzelfde als royaltyvrij: waar een formaat een codec omhult, is de octrooilicentie een aparte vraag waarop de standaard geen antwoord geeft.

Er wordt niets weggegooid

ICS bewaart zijn inhoud precies. Opnieuw opslaan verandert niets, dus je kunt het zo vaak openen, bewerken en wegschrijven als je wilt zonder dat er schade opstapelt — en dat is wat er een werkformaat van maakt in plaats van een afleverformaat.

Wat ICS opent

Google Calendar, Apple Calendar en Microsoft Outlook lezen het, en de meeste programma’s van dezelfde soort ook.

Als een bestand niet opengaat ligt het zelden aan het formaat — vaker is het programma ouder dan het formaat. Converteren naar iets ouders is de betrouwbare weg eromheen, en daarvoor is de rest van deze site bedoeld.

Het in de browser openen

Geen enkele browser leest het.

Dat is veruit de meest voorkomende reden om het te converteren: niet dat het formaat slecht is, maar dat de plek waar je het bestand wilt tonen het niet kan lezen.

Het is een werkformaat

ICS is bedoeld om te openen en te wijzigen. Houd het bestand in dit formaat zolang het werk loopt, en exporteer eruit wanneer er een afgeronde versie nodig is.

Twee verschillende bestanden, één extensie

Een ICS-bestand is ofwel een afspraak die je toegestuurd kreeg, ofwel een agenda waarop je geabonneerd bent, en bijna elk probleem met het formaat begint met die twee door elkaar halen.

Het eerste is de uitnodiging bij een e-mail, bedoeld om eenmalig geopend en geïmporteerd te worden. Het tweede is een feed op een webadres dat een agenda-app herhaaldelijk ophaalt. Het is dezelfde bestandsstructuur in beide gevallen, en het verschil in gebruik is totaal. Een abonnement dat gedownload en geïmporteerd wordt, wordt een bevroren kopie die nooit meer bijwerkt — de meest voorkomende fout.

Wat er in het bestand zit

Platte tekst, in een structuur oud genoeg om er zo uit te zien: één eigenschap per regel, allemaal hoofdletters, afgebroken op 75 tekens met een vervolgconventie. Elke gebeurtenis staat tussen BEGIN- en END-markeringen met een start, een eind, een samenvatting en een unieke identifier.

Die identifier gedraagt zich onverwacht. Hij bepaalt of een agenda een update als bijwerking van een bestaande afspraak herkent of als een nieuwe. Een uitnodiging opnieuw versturen met dezelfde identifier verplaatst het origineel; met een nieuwe identifier heeft iedereen nu twee afspraken.

Tijdzones, waar bijna alles misgaat

Een gebeurtenis kan zijn tijd op drie manieren vastleggen. Een lokale tijd zonder zone betekent "tien uur waar je ook bent" — goed voor een verjaardag, fout voor een vergadering. Een tijd in UTC, gemarkeerd met een Z, is een vast moment dat elke agenda omzet naar de eigen zone van de lezer. Een tijd met een benoemde zone draagt een hele tijdzonedefinitie mee.

Een afspraak die voor sommige deelnemers een uur mis is, is bijna altijd dit: een gebeurtenis geschreven als lokale tijd door een systeem dat aannam dat iedereen in één land zat.

Terugkerende gebeurtenissen en de uitzonderingenlijst

Herhaling wordt beschreven met een regel in plaats van elke gebeurtenis apart uit te schrijven: elke tweede dinsdag, de laatste vrijdag van de maand. Het is compact en exact, en de reden dat een jaar stand-ups een paar honderd bytes is.

Wat het complex maakt zijn uitzonderingen. Een geannuleerde gebeurtenis en een verplaatste enkele vergadering worden beide opgeslagen als aanvullingen op de reeks, en toepassingen verschillen in hoe volledig ze dat implementeren.

Importeren in Google Agenda, Outlook en Apple Agenda

Voor een eenmalig bestand doen alle drie hetzelfde: een import die de gebeurtenissen eenmalig kopieert. Kies vooraf welke agenda de gebeurtenissen ontvangt, want ze achteraf scheiden is vervelend.

Voor een feed gebruik je in plaats daarvan de abonneeroptie met het adres, niet een gedownload bestand. De agenda haalt dan zelf op zijn eigen schema opnieuw op — Google en Outlook meten dat in uren; Apple laat een auto-verversing tot vijf minuten toe.

Uitnodigingen genereren vanuit een toepassing

Elk systeem dat iets boekt, moet uiteindelijk een ICS bijvoegen. Drie details scheiden een werkende van een die supporttickets genereert.

Gebruik een benoemde tijdzone in plaats van kale lokale tijd, of een UTC-moment bij een vast tijdstip. Houd de unieke identifier stabiel over bevestiging, herinnering en wijzigingsbericht. En voeg het bestand toe met het juiste mediatype.

Er eentje met de hand lezen en bewerken

Het is tekst, dus elke editor opent het, en voor één gebeurtenis is dat vaak de snelste manier om te zien wat een agenda echt te horen krijgt. De regelafbrekingsconventie is het enige om te respecteren: een vervolgregel begint met één spatie.

Bewerken is redelijk voor een snelle correctie. Voor iets structureels, vooral herhalingsregels, laat een agenda-app het schrijven. De regelsyntax is precies, en het faalmodus is een gebeurtenis die een jaar lang op de verkeerde dagen verschijnt.

De gegevens, op één plek

Kenmerken en herkomst van het formaat ICS.
Extensie.ics, .ical
Mediatypetext/calendar
Voor het eerst gepubliceerd1998
SpecificatieRFC 5545