Pourquoi le format .ics est plus sous-estimé du web

Durée: 9m25s

Date de sortie: 20/01/2026

Episode #142 - Derrière les invitations calendrier se cache un format vieux, simple… et redoutablement efficace.
Dans cet épisode, on décortique le fichier .ics, son fonctionnement, ses règles et ses vrais cas d’usage côté développeur.

Salut et bienvenue dans ce nouvel épisode du podcast de Code Garage.
Je m'appelle Nicolas Brondin-Bernard et aujourd'hui, on va parler d'un format que
vous avez peut-être déjà vu passer, mais qui peut vous être très utile si vous
vous penchez un petit peu plus dessus.
Ce format de fichier donc ICS-I s'appelle en réalité iCalendar et c'est un standard
qui est largement utilisé pour échanger des informations de calendriers entre différentes
applications.
Alors le i, je l'ai appris aujourd'hui en faisant cet épisode, le i de iCalendar,
c'est tout simplement pour internet.
Et si vous vous posiez la question de pourquoi est-ce qu'on appelle des iMac, des iPhone,
etc., eh bien à l'origine, même si la signification a un petit peu changé,
c'était aussi par pour internet puisque l'iMac, quand il est sorti,
était censé faciliter la connexion à internet.
Donc revenons à nos moutons.
En fait quand vous utilisez Google Calendar, Outlook, Apple Calendar ou peu importe,
eh bien il y a de fortes chances que vous ayez déjà importé, téléchargé ou synchronisé
des fichiers ICS sans forcément savoir ce qui contenait réellement.
Alors à quoi est-ce que ça sert réellement un fichier ICS ?
Eh bien ça permet tout simplement de décrire un ou plusieurs événements de calendriers,
mais ce qui est important c'est que c'est évidemment un format textuel standardisé.
Son objectif c'est l'interopérabilité, donc un même fichier, il peut être lu et interprété évidemment,
par plein d'applications différentes, peu importe le système de l'exploitation,
le fournisseur du logiciel, si c'est du web, si c'est une appui mobile, peu importe.
Alors on va l'utiliser grosso modo pour partager soit un événement unique,
donc ça peut être une réunion, un rendez-vous, un webinaire, peu importe,
ou alors carrément publier un calendrier complet,
un planning scolaire, un agent d'asportif, des chaufferiers, peu importe.
Ça va nous permettre évidemment de synchroniser automatiquement
des événements entre plusieurs outils, ce qui se passe déjà dans votre écosystème,
il y a de fortes chances, et évidemment toutes les fonctionnalités auxquelles vous allez pouvoir
penser en créant une application, donc ça peut être juste sur votre site web avant un bouton
ajouté à mon calendrier, et bien ça permet de télécharger l'ICS, et il y a même par exemple
sur certains écosystèmes où ça va automatiquement détecter que vous avez téléchargé un ICS
et vous proposez de l'ajouter avant le calendrier téléphone par exemple.
Mais tout simplement, si vous gérer des créations d'événements,
de choses comme ça avec des imports pour faciliter la tâche à des utilisateurs,
et bien au lieu de créer votre propre format, ou xml ou peu importe,
n'importe json, etc. et bien là vous réutilisez le format ICS,
il y a énormément de parceurs disponibles, donc je vous en mettrai quelques uns dans les notes
de l'épisode, mais au lieu de faire ça à la main, vous proposez à l'utilisateur de plodé un ICS,
ça veut dire qu'il peut créer ces événements dans n'importe quelle autre application de calendrier,
exporter ces événements-là et les balancer dans votre appui.
Alors maintenant on va s'intéresser un petit peu à ce que contient réellement un fichier.ics.
Alors contrairement à ce qu'on pourrait penser, un fichier ICS c'est pas un binaire,
c'est pas un xml non plus, c'est réellement un fichier texte,
qui est lisible évidemment avec un éditeur que vous voulez, Vesco, de blocnotes, peu importe,
et en fait il est structuré autour de blocs qui sont bien définis, mais qui sont quand même extensibles,
et ça c'est une des vraies forces aussi du format, c'est que vous allez pouvoir l'adapter à vos besoins,
je vous expliquerai comment un petit peu après.
Alors il y a des blocs, les blocs commencent avec le mot clé begin et terminent avec le mot clé end,
OK, classique.
Et ensuite après begin on a deux points et le nom du bloc, donc par exemple Vcalendar,
tout simplement pour définir un calendrier dans son ensemble,
vous pouvez éventuellement créer plusieurs calendriers dans un fichier ICS.
Et donc vous allez avoir le begin Vcalendar, pardon, end Vcalendar,
et à l'intérieur de ça vous allez avoir un autre type de bloc qui vont être les événements.
Donc on a begin de point Vevent, end de point Vevent.
Et à l'intérieur de ça, en fait on n'utilise pas des blocs,
mais on va utiliser directement des attributs, on peut les appeler des propriétés,
on peut les appeler comme on veut, et qui vont ressembler à un fichier par exemple d'environnement
pour y stocker des variables, sauf que là au lieu d'avoir un égal entre le nom de la variable
et la valeur de la variable, eh bien là ce sont deux points.
Donc en propriété on va avoir DtStart pour dateStart tout simplement,
DtEnd, dateEnd, alors évidemment les heures de début et de fin,
elles sont stockées sous la forme d'un timestamp en UTC.
Mais après donc on a summary, ok, donc là ça correspond au titre de l'événement,
on a description qui va être évidemment la description,
on a location qui va préciser le lieu, alors ça peut être tout et n'importe quoi,
une adresse physique, ça peut être un lien virtuel, peu importe.
On va avoir UID qui est l'identifiant unique de l'événement,
alors là pour le coup celui-là il est super important puisque ça va permettre la synchronisation
des événements entre plusieurs logiciels, donc par exemple si vous importez déjà un premier fichier ICS
dans un calendrier, si vous réimportez un deuxième calendrier,
une deuxième fois ce même calendrier, ou en tout cas qui contient un événement similaire,
et bien si ils ont le même UID, ça ne va pas être répliqué, dupliqué,
on va avoir l'événement qu'une seule fois.
Et enfin on va avoir quelque chose qui s'appelle R-Roule, tout collé R-Roule,
et qui va définir les règles de récurrence, donc tous les lundis, tous les mois, etc.
Et juste avec ces champs-là, ces propriétés, un fichier ICS,
il va pouvoir représenter des situations hyper complexes comme hyper simples,
des événements récurrents, des exceptions, des fusaux horaires, des rappels, des invitations
avec des participants, etc.
Alors ce qu'il faut savoir, c'est que ce format, c'est un format qui est standard,
mais qui est aussi ouvert. Alors qu'est-ce que ça veut dire ?
Il est défini par une spécification officielle, c'est la RFC 5545.
Si jamais, ce que ça vous parle pas, le terme RFC, je vous mettrai dans les liens de cet épisode,
l'épisode que j'ai dédié au RFC.
Et donc tout ça, ça signifie, donc ouvert, ça veut dire qu'il n'a aucune dépendance à un éliteur spécifique.
On peut dire qu'il est pérenne parce que depuis des années, il est utilisé, maintenu, etc.
Et il est évidemment compatible avec la majorité des outils de calendrier qu'on peut trouver.
Alors ce qui est cool, c'est qu'en plus, quand un logiciel vous génère un fichier ICS,
vous pouvez très bien le récupérer, l'ouvrir et vous pouvez le modifier à votre guise,
vous pouvez apprendre à en générer un vous-même depuis une application,
puisque c'est littéralement qu'un fichier texte avec quelques blocs et quelques propriétés,
donc ça se fait super facilement.
Et enfin, la dernière chose, c'est comme je l'ai dit, il est possible.
Donc il existe déjà quelques propriétés supplémentaires que je ne vous ai pas données.
On a par exemple la propriété Related to et ensuite, vous donnez un identifiant unique
et ça permet d'afficher un lien entre deux événements.
Ça peut être une suite d'événements ou ça peut signifier qu'un autre événement
est une instance d'un événement précédent, peu importe.
Et enfin, vous pouvez créer vous-même vos propriétés.
Alors il n'y a pas tellement de règles, vous pouvez un petit peu ajouter les propriétés que vous voulez,
mais il y a quand même une bonne pratique, c'est que le nom de la propriété que vous
créez, il vaut mieux qu'elle soit préfixée par X, qui est un préfix assez courant quand on a
des trucs custom.
Et donc par exemple, moi si je voulais créer une propriété, ça pourrait être X tirer code garage,
tirer module, deux points et là je mets un identifiant, une URL peu importe, vers un module de cours
pour dire, eh bien, cet événement est lié à ce module de cours là.
Eh bien moi ensuite, si je veux faire de l'export ou de l'import d'ICS,
je peux traiter, générer et traiter cette propriété comme bon me semble,
mais surtout, ça ne va pas casser le format tant que vous le mettez au bon endroit dans le bloc Event associé.
Voilà, j'espère que vous aurez appris quelque chose.
Alors évidemment, ce format-là, beaucoup de gens le connaissent,
mais il y a aussi beaucoup de gens qui l'ont vu passer,
mais qui ne se sont jamais préoccupés exactement de savoir comment s'était fait à l'intérieur
et à quel point c'est facile de l'utiliser.
Donc on sait que si vous travaillez avec des dates, avec les fuseaux rares, etc.,
c'est toujours un peu chiant, eh bien là au moins vous avez un format en plus qui fonctionne en UTC
et tout ça, donc il n'y a pas de problème de fuseaux rares comme ça,
tout le monde peut l'utiliser et vous pouvez vous en servir dans vos applications.
Donc eh bien pensez-y la prochaine fois au lieu de réinventer la roue,
comme on a tous et toutes pu le faire une fois dans notre carrière.
Je vous donne rendez-vous la semaine prochaine pour un prochain épisode du podcast.
Évidemment pensez à laisser cinq étoiles, un avis, des commentaires, etc.,
sur vos plateformes de podcasts préférés.
Moi je vous retrouve sur code ThierryGarage.com pour retrouver tous nos épisodes de podcasts,
tous nos articles de blogs et surtout, eh bien tous nos cours complets pour apprendre
JavaScript, Git, Node.js et j'en passe.
Voilà, donc venez faire un tour pour faire un cours, pourquoi pas.
Moi je vous retrouve la semaine prochaine.
Prenez soin de vous, salut !

Les infos glanées

Je suis une fonctionnalité encore en dévelopement

Signaler une erreur

Code-Garage

Découvrons ensemble des sujets passionnants autour du métier de dev et de la programmation en général !
Tags
Card title

Lien du podcast

[{'term': 'Technology', 'label': None, 'scheme': 'http://www.itunes.com/'}]

Go somewhere