iCalendar : définition et explication du format d’échange de données
Avec iCalendar, chacun peut regrouper ses rendez-vous issus de différents programmes dans un format unique. Ces événements peuvent ensuite être gérés et modifiés sous forme de fichiers dans un format standardisé. Étant un standard largement répandu, le format iCalendar, souvent utilisé sous forme de fichiers ICS, peut être manipulé par pratiquement tout le monde, quel que soit le logiciel ou l’appareil utilisé.
- Éditeur de site intuitif avec fonctions d'IA
- Générateur d'images et de textes avec optimisation SEO
- Domaine, SSL et boîte email inclus
Qu’est-ce que le format iCal ?
iCalendar est un format d’échange de calendrier pour la diffusion d’éléments de calendrier, normalisé dans le RFC 5545. Il permet de regrouper, gérer et partager les rendez-vous issus de différentes applications sur PC et smartphone dans un seul calendrier. Le format est l’évolution du vCalendar, un format de calendrier électronique antérieur. Avec le format iCal, il est donc possible de gérer et partager de manière pratique tous les rendez-vous de différentes fonctions de calendrier dans un format clair en temps réel.
Les informations contenues dans un fichier iCalendar ne se limitent pas uniquement aux simples dates. Des listes de tâches ou des réunions peuvent également être organisées avec ce format.
Qu’est-ce que l’iCal ?
Selon le système d’exploitation, les fichiers iCalendar ont une abréviation différente et beaucoup de gens se demandent, lors d’une recherche, ce que iCAL, ICS ou iFBF signifie. Il s’agit en fait toujours d’extensions de fichiers iCalendar. .ics, .ifb, .ical et .ifbf désignent toujours des fichiers au format iCal, mais présentent certaines différences.
- ical : extension de nom pour macOS
- ics : extension de nom de fichier pour tous les autres systèmes d’exploitation
- ifbf : contient des informations sur la disponibilité pour macOS
- ifb : contient des informations sur la disponibilité pour les autres systèmes d’exploitation
Si vous souhaitez envoyer une entrée de rendez-vous, vous devez sélectionner le type de fichier du format iCalendar pour l’enregistrer et l’envoyer. Créer un fichier .ics est souvent le meilleur choix, car la structure ou le format ICS est compatible avec la plupart des systèmes d’exploitation. Lorsque la personne destinataire ouvre le fichier, elle peut ensuite décider elle-même d’accepter ou non le rendez-vous reçu.
Les fichiers iCalendar sont principalement de simples fichiers texte, ce qui facilite leur échange entre différents systèmes.
Quels sont les avantages de l’iCalendar ?
iCalendar n’est pas limité à l’échange de fichiers. Le format des entrées iCalendar est étroitement lié au standard des emails et suit l’extension Multipurpose Internet Mail (MIME), plus précisément le type « text/calendar ». Grâce à cette conception ouverte, les entrées de calendrier peuvent être utilisées presque partout et même intégrées dans des sites Web. Il est ainsi possible de partager des événements ou de publier des rendez-vous importants. Avec les serveurs WebDAV, utilisés pour fournir des fichiers sur Internet, les rendez-vous peuvent être synchronisés à tout moment.
Le format permet également d’échanger des rendez-vous directement via Bluetooth ou via un réseau personnel entre appareils mobiles. Lors d’une réunion professionnelle, il devient par exemple très simple de transmettre un nouveau rendez-vous à tous les participants. De plus, iCalendar permet d’utiliser les informations enregistrées dans plusieurs applications et de les synchroniser en temps réel grâce au format.
Le format iCalendar est accepté par les programmes de calendrier courants qui intègrent les données Web du calendrier :
- Google Agenda
- Calendrier Android
- Microsoft Outlook
- Calendrier BlackBerry
- Calendrier macOS/iOS
Que signifie la normalisation par RFC 5545 ?
La RFC 5545 détermine comment les informations de calendrier doivent être structurées et codées afin qu’elles puissent être lues et traitées correctement par différentes applications utilisant le format iCalendar. Cette normalisation garantit ainsi une interprétation cohérente du format ICS, quel que soit le logiciel ou le système.
L’élément central est la structure de données unifiée basée sur des composants de calendrier appelés VEVENT, VTODO, VJOURNAL ou VTIMEZONE. Chacun de ces composants suit une structure clairement définie avec des champs obligatoires et optionnels, contenant des propriétés comme le début, la fin, le lieu ou la description d’un rendez-vous. Cette approche assure la cohérence de l’ensemble des fichiers créés au format iCalendar, qu’il s’agisse d’un simple fichier ICS ou d’un échange automatisé via Apple iCalendar.
En outre, la RFC 5545 règle également les propriétés suivantes :
- La syntaxe (format de texte UTF-8, longueur des lignes, sauts de ligne)
- Les formats de date et d’heure (y compris les indications de fuseaux horaires)
- Le codage des événements récurrents, par exemple avec la propriété
RRULE
Cela garantit qu’un fichier .ics créé une fois peut être interprété de la même manière, quel que soit le programme ou le système d’exploitation utilisé, et assure ainsi la compatibilité durable du format iCalendar.
Comment créer un fichier iCalendar ?
Créer un rendez-vous fonctionne comme suit :
- Ouvrez un nouveau document dans un éditeur de texte de votre choix. Avec la bonne application, cela fonctionne aussi sur un smartphone.
- Remplissez ensuite le fichier selon la structure habituelle du format iCalendar, que nous expliquons plus en détail à l’étape suivante.
- Après avoir correctement complété le document, exportez-le au format iCal. Pour cela, enregistrez le fichier avec l’extension .ics.
- Ouvrez un programme de calendrier de votre choix et importez le fichier .ics en tant que rendez-vous. Un simple clic dans le menu correspondant suffit pour charger automatiquement l’entrée.
- Le rendez-vous apparaît alors comme une nouvelle entrée dans votre calendrier.
Pour que le partage fonctionne correctement et que la personne destinataire puisse importer le rendez-vous dans son propre calendrier, il est nécessaire de transmettre les informations selon un format prédéfini. Chaque ligne correspond à un élément précis du format iCalendar :
| Ligne iCal | Signification |
|---|---|
BEGIN:VCALENDAR
|
Ouvre chaque fichier iCalendar |
VERSION
|
Indique la version du format, actuellement « 2.0 » |
PRODID
|
Mentionne le nom ou l’adresse de la personne ou de l’application ayant créé le fichier |
METHOD
|
Indique le mode de transmission : avec PUBLISH, l’entrée apparaît directement ; avec REQUEST, elle est envoyée sous forme de demande
|
BEGIN:VEVENT
|
Marque le début de la section contenant les données du rendez-vous |
UID
|
Identifiant unique nécessaire pour chaque fichier .ics et chaque entrée |
LOCATION
|
Indique le lieu de l’événement, avec le niveau de précision souhaité |
SUMMARY
|
Fournit un bref résumé du rendez-vous |
DESCRIPTION
|
Contient une description détaillée, visible lorsque l’entrée est ouverte |
CLASS
|
Définit si l’entrée est publique (PUBLIC) ou privée (PRIVATE)
|
DTSTART
|
Indique l’heure de début |
DTEND
|
Indique l’heure de fin prévue |
DTSTAMP
|
Indique le moment où l’entrée a été créée |
END:VEVENT
|
Clôt la section contenant les informations du rendez-vous |
END:VCALENDAR
|
Termine le fichier |
Les indications temporelles suivent également un format standardisé :
- Les quatre premiers chiffres correspondent à l’année (AAAA) : 2019
- Les deux suivants indiquent le mois (MM) : 201910
- Les deux derniers définissent le jour (JJ) : 20191027
- La lettre T sépare la date de l’heure : 20191027T
L’heure est composée de 6 chiffres :
- Deux pour l’heure : 20191027T15
- Deux pour la minute : 20191027T1559
- Deux pour la seconde : 20191027T155954
- Un Z clôture l’entrée de la date : 20191027T155954Z
Dans l’exemple suivant, toutes les lignes sont correctement remplies.
BEGIN:VCALENDAR
VERSION:2.0
PRODID:Cal_App//Daily@Planet
METHOD:PUBLISH
BEGIN:VEVENT
UID:123456789@example.com
LOCATION:Metropolis
SUMMARY:Meeting
DESCRIPTION:Kick-off Meeting
CLASS:PUBLIC
DTSTART:20191101T100000Z
DTEND:20191101T120000Z
DTSTAMP:20191027T155954Z
END:VEVENT
END:VCALENDARtxtChaque destinataire du rendez-vous peut désormais, en ouvrant le fichier, ajouter l’événement à son calendrier et ainsi recevoir toutes les informations pertinentes, de la nature du rendez-vous aux heures de début et de fin, tout automatiquement. Le format iCalendar permet ainsi un gain de temps notable, surtout dans la vie professionnelle.
Comment intégrer iCalendar dans le frontend ?
Au lieu de créer un fichier .ics, vous pouvez rediriger les utilisateurs via des URL spéciales directement vers un fournisseur de calendrier en ligne tel que Google Agenda, Outlook.com ou Yahoo Agenda. Ces liens ouvrent une nouvelle fenêtre « Ajouter un événement » dans le navigateur du service concerné, déjà préremplie avec les informations liées au titre, au lieu, à la description et aux horaires de début et de fin.
<a href="https://calendar.google.com/calendar/render?action=TEMPLATE
&text=Release%20Meeting
&details=Status-Update%20%26%20Milestones
&location=Remote%20(Google%20Meet)
&dates=20251010T080000Z/20251010T090000Z
&ctz=Europe/Berlin"
target="_blank" rel="noopener">
Ajouter à Google Agenda
</a>htmlComment générer des fichiers ICS par code ?
Vous trouverez ci-dessous des exemples de code pratiques montrant comment générer des fichiers .ics avec quelques lignes de code. Tous les exemples créent un rendez-vous « Réunion de lancement » le 15/10/2025, de 10:00 à 11:00 Europe/Paris, avec des fins de ligne correctes (CRLF) et un traitement approprié des caractères spéciaux.
Exemple PHP
Dans l’exemple PHP suivant, la fonction utilitaire ics_escape() est d’abord définie. Cette fonction permet de masquer correctement les caractères spéciaux tels que les virgules, points-virgules, barres obliques inverses ou sauts de ligne. Ensuite, la structure du fichier .ics est définie dans un tableau. Chaque ligne représente un attribut spécifique de l’entrée de calendrier, comme le titre (SUMMARY), la description (DESCRIPTION) ou la période (DTSTART, DTEND). implode("\r\n", [...]) rassemble les lignes individuelles en un bloc de texte.
Ensuite, deux commandes header() suivent pour indiquer au navigateur comment le fichier doit être traité :
Content-Type: text/calendar; charset=utf-8indique qu’il s’agit d’un fichier de calendrier au format iCalendar.Content-Disposition: attachment; filename="event.ics"indique au navigateur de ne pas afficher le fichier dans la fenêtre, mais de le télécharger automatiquement sous le nom spécifié.
Enfin, avec echo $ics, le texte final assemblé est affiché. Dès que le script PHP (par exemple event.php) est appelé dans le navigateur, le téléchargement du fichier event.ics démarre et peut être immédiatement importé dans Outlook, Google Calendar ou Apple Calendar.
function ics_escape($s) {
return str_replace(
["\\", ";", ",", "\n"],
["\\\\","\\;", "\\,", "\\n"],
$s
);
}
$ics = implode("\r\n", [
"BEGIN:VCALENDAR",
"PRODID:-//example.com//ics-php//FR",
"VERSION:2.0",
"CALSCALE:GREGORIAN",
"METHOD:PUBLISH",
"BEGIN:VEVENT",
"UID:event-123@example.com",
"DTSTAMP:20251010T080000Z",
"DTSTART;TZID=Europe/Paris:20251015T100000",
"DTEND;TZID=Europe/Paris:20251015T110000",
"SUMMARY:" . ics_escape("Réunion de lancement"),
"DESCRIPTION:" . ics_escape("Mise à jour du statut et jalons"),
"LOCATION:" . ics_escape("À distance (Google Meet)"),
"END:VEVENT",
"END:VCALENDAR",
""
]);
header('Content-Type: text/calendar; charset=utf-8'); // Indique au navigateur : il s’agit d’un fichier .ics
header('Content-Disposition: attachment; filename="event.ics"'); // Déclenche le téléchargement
echo $ics; // Envoie le contenu au navigateurphpExemple Python
Ici, la fonction ics_escape() permet également de s’assurer que les caractères spéciaux comme les virgules, points-virgules ou sauts de ligne sont correctement masqués. Avec datetime.now(timezone.utc), un horodatage actuel (DTSTAMP) au format UTC est créé automatiquement. Les différentes lignes de l’événement, comme le titre (SUMMARY), sont ensuite combinées en un bloc de texte avec "\r\n".join([...]). Les sauts de ligne CRLF (\r\n) sont toujours obligatoires dans le format ICS.
La commande Path("event-python.ics").write_text(ics, encoding="utf-8", newline="") écrit ensuite le contenu en tant que fichier UTF-8 dans le répertoire actuel. Après l’exécution du script, le fichier final event-python.ics est prêt et peut être immédiatement importé dans Outlook, Google Calendar ou Apple Calendar.
from datetime import datetime, timezone
from pathlib import Path
def ics_escape(s: str) -> str:
return s.replace("\\", "\\\\").replace(";", "\\;").replace(",", "\\,").replace("\n", "\\n")
ics = "\r\n".join([
"BEGIN:VCALENDAR",
"PRODID:-//example.com//ics-python//FR",
"VERSION:2.0",
"CALSCALE:GREGORIAN",
"METHOD:PUBLISH",
"BEGIN:VEVENT",
"UID:event-123@example.com",
f"DTSTAMP:{datetime.now(timezone.utc):%Y%m%dT%H%M%SZ}",
"DTSTART;TZID=Europe/Paris:20251015T100000",
"DTEND;TZID=Europe/Paris:20251015T110000",
f"SUMMARY:{ics_escape('Réunion de lancement')}",
f"DESCRIPTION:{ics_escape('Mise à jour du statut et jalons')}",
f"LOCATION:{ics_escape('À distance (Google Meet)')}",
"END:VEVENT",
"END:VCALENDAR",
""
])
Path("event-python.ics").write_text(ics, encoding="utf-8", newline="")
print("écrit : event-python.ics")pythonExemple JavaScript
Le code JavaScript suivant génère le contenu du calendrier directement dans le navigateur. Dans un premier temps, le texte iCalendar est assemblé dans la variable ics. La fonction icsEscape() garantit de nouveau que les caractères spéciaux comme les virgules ou les sauts de ligne sont correctement masqués. Avec Blob(), un fichier virtuel est créé en mémoire à partir de ce texte. URL.createObjectURL() génère ensuite une URL de téléchargement temporaire que le navigateur traite comme un véritable fichier.
Un élément <a> invisible avec l’attribut download est généré dynamiquement, puis déclenché automatiquement par a.click(). Cela lance le téléchargement du fichier event-browser.ics, sans qu’aucune connexion au serveur ne soit nécessaire.
<button id="dl">Télécharger .ics</button>
<script>
function icsEscape(s){
return s
.replace(/\\/g,"\\\\")
.replace(/;/g,"\\;")
.replace(/,/g,"\\,")
.replace(/\n/g,"\\n");
}
const ics = [
"BEGIN:VCALENDAR",
"PRODID:-//example.com//ics-browser//FR",
"VERSION:2.0",
"CALSCALE:GREGORIAN",
"METHOD:PUBLISH",
"BEGIN:VEVENT",
"UID:event-123@example.com",
"DTSTAMP:20251010T080000Z",
"DTSTART;TZID=Europe/Paris:20251015T100000",
"DTEND;TZID=Europe/Paris:20251015T110000",
"SUMMARY:" + icsEscape("Réunion de lancement"),
"DESCRIPTION:" + icsEscape("Mise à jour du statut et jalons"),
"LOCATION:" + icsEscape("À distance (Google Meet)"),
"END:VEVENT",
"END:VCALENDAR",
""
].join("\r\n");
document.getElementById("dl").addEventListener("click", () => {
const blob = new Blob([ics], { type: "text/calendar;charset=utf-8" });
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = "event-browser.ics";
document.body.appendChild(a);
a.click();
a.remove();
URL.revokeObjectURL(url);
});
</script>javascriptExemple Node.js
Ce code lance un petit serveur Web Express qui fournit un fichier .ics directement via le navigateur. Lorsqu’une personne accède à http://localhost:3000/event.ics, le texte iCalendar est généré dans le gestionnaire app.get(...) et envoyé au client. La fonction icsEscape() garantit, comme dans les autres exemples, que les caractères spéciaux sont correctement masqués. Avec res.setHeader("Content-Type", "text/calendar; charset=utf-8"), le serveur indique au navigateur qu’il s’agit d’un fichier de calendrier. L’en-tête Cache-Control: public, max-age=300 permet aux clients de mettre le fichier en cache pendant 5 minutes.
res.send(ics) envoie ensuite le fichier final directement au navigateur, qui le télécharge automatiquement ou l’ouvre avec l’application de calendrier. Le serveur fonctionne ensuite localement sous http://localhost:3000/event.ics.
import express from "express";
const app = express();
function icsEscape(s){
return s
.replace(/\\/g,"\\\\")
.replace(/;/g,"\\;")
.replace(/,/g,"\\,")
.replace(/\n/g,"\\n");
}
app.get("/event.ics", (req, res) => {
const ics = [
"BEGIN:VCALENDAR",
"PRODID:-//example.com//ics-node//FR",
"VERSION:2.0",
"CALSCALE:GREGORIAN",
"METHOD:PUBLISH",
"BEGIN:VEVENT",
"UID:event-123@example.com",
"DTSTAMP:20251010T080000Z",
"DTSTART;TZID=Europe/Paris:20251015T100000",
"DTEND;TZID=Europe/Paris:20251015T110000",
"SUMMARY:" + icsEscape("Réunion de lancement"),
"DESCRIPTION:" + icsEscape("Mise à jour du statut et jalons"),
"LOCATION:" + icsEscape("À distance (Google Meet)"),
"END:VEVENT",
"END:VCALENDAR",
""
].join("\r\n");
res.setHeader("Content-Type", "text/calendar; charset=utf-8"); // Le navigateur reconnaît le type MIME
res.setHeader("Cache-Control", "public, max-age=300"); // Mise en cache (5 minutes)
res.send(ics); // Envoi de la réponse
});
app.listen(3000, () => console.log("http://localhost/event.ics"));javascriptLes fichiers ICS dans différents clients de calendrier
Bien que l’iCalendar soit une norme ouverte, chaque application de calendrier interprète les fichiers .ics à sa manière. Selon l’environnement, il existe des différences dans la façon dont les événements sont importés, synchronisés et mis à jour.
Google Agenda
Dans Google Agenda, les utilisateurs peuvent soit importer manuellement des fichiers .ics, soit s’abonner à un flux de calendrier via une URL.
Lors de l’importation, les événements contenus sont intégrés une seule fois dans le calendrier choisi. Les modifications ultérieures apportées au fichier sur votre serveur ne sont pas prises en compte automatiquement. Google traite donc cette option comme un instantané.
La souscription par URL fonctionne différemment et n’est disponible que dans la version Web de Google Agenda. On sélectionne « Autres calendriers » > « Ajouter par URL » et l’on saisit l’adresse d’un fichier .ics, comme https://example.com/calendar.ics. Google récupère ensuite ce fichier régulièrement, généralement toutes les 12 à 24 heures, et met à jour automatiquement les événements en cas de modification. Il est important de noter que Google n’accepte pas les liens webcal://. Si vous souhaitez proposer un lien d’abonnement sur votre site, vous devriez donc utiliser une URL en HTTPS.
Apple Calendrier
Apple Calendrier prend très bien en charge le format iCalendar (.ics). Lorsque les utilisateurs téléchargent ou ouvrent un fichier ICS par email, le système le reconnaît automatiquement et demande dans quel calendrier les événements doivent être importés. Comme pour Google Agenda, il s’agit d’un import unique, sans mise à jour automatique.
En revanche, la fonction d’abonnement est nettement plus performante, car Apple prend en charge le schéma webcal:// de manière native. Si vous proposez un lien de type webcal://example.com/calendar.ics, un clic ouvre automatiquement le dialogue permettant de s’abonner. Le calendrier abonné est ensuite synchronisé automatiquement, par défaut toutes les quelques heures. Les modifications des événements existants (même UID, nouveau DTSTAMP) sont prises en compte, tandis que les événements supprimés disparaissent lors de la prochaine synchronisation.
Outlook
Microsoft Outlook peut lui aussi importer une fois ou s’abonner à un fichier .ics. Lorsqu’un fichier est ouvert ou importé manuellement, Outlook ajoute simplement les événements au calendrier choisi. Ces événements restent statiques, sans mise à jour ultérieure.
Lors d’un abonnement, Outlook fonctionne de manière similaire à Apple Calendrier. Les utilisateurs peuvent saisir l’URL du flux sous « Ouvrir le calendrier » > « À partir d’Internet » (par exemple https://example.com/calendar.ics ou webcal://...). Outlook s’abonne alors au calendrier et le synchronise automatiquement à intervalles réguliers, généralement entre 30 minutes et 3 heures.
Outlook.com, la version Web, fonctionne de manière comparable, mais peut être plus lent au niveau des mises à jour que l’application de bureau.

