Pour les applications de navigation et de mobilité
La couche des dangers, sans avoir à construire le réseau
Votre application guide déjà un conducteur. Ce qu’elle ne peut pas construire seule, c’est la couche qui dit ce qui l’attend sur la route, parce qu’il faut une foule pour cela. Relay est cette foule, partagée : ce que signalent vos utilisateurs part vers tous les autres participants, et ce que signalent les leurs vous revient — en plus du flux public national français, déjà sur le réseau.
Un bandeau, et des repères sur votre propre carte
Ce téléphone est abonné au réseau déployé en ce moment même, en un point de Paris. Tout ce qui est dans le cadre, Relay le fournit ; tout ce qui est en dehors est à vous, et le reste.
Accident
A14
Le bandeau
Le prochain danger sur la route du conducteur, pas le plus spectaculaire du secteur — sa nature, sa gravité et sa distance. Un champ chacun, déjà dans l’enveloppe.
Les repères
Chaque événement actif dans le disque d’abonnement, au fil de son arrivée. Ni boucle de polling ni réconciliation : le flux envoie un instantané, puis des deltas.
Tout le reste
La carte, l’itinéraire, l’heure d’arrivée, la voix, le design. Relay fournit des données et rien d’autre — pas de SDK à adopter, pas de composant à afficher.
La première requête renvoie déjà quelque chose
Vous ne démarrez pas sur un réseau vide. Relay ingère le flux routier national français, publié en DATEX II sous Licence Ouverte 2.0, et le sert sur le même contrat que tout le reste.
- 1
- incidents gestionnaires en cours
- 13
- types de danger
- 1 s
- délai de diffusion
flux national, lu au rendu de cette page
filtrer sur le type, affiner sur le sous-type
engagement p95, de la publication à la réception
Un abonnement est un disque autour d’un point. Un itinéraire se couvre en s’abonnant à des disques le long du trajet — le même appel, répété — et une vue nationale est un assemblage de disques. Ce qui circule sur le réseau en ce moment.
Un flux, trois écouteurs
Du HTTP simple et des server-sent events. Votre serveur émet un ticket de 300 secondes avec votre clé, le navigateur ouvre le flux avec ce ticket, et trois écouteurs font tout le client.
const API = "https://api.cudatus.com";
// on your server — the key stays here
const { ticket } = await fetch(`${API}/v1/stream/tickets`, {
method: "POST",
headers: { Authorization: `Bearer ${process.env.RELAY_KEY}` },
}).then((r) => r.json());
// in the browser — a ticket, never the key. The disc follows the driver.
const stream = new EventSource(
`${API}/v1/stream?lat=48.8698&lon=2.3078&radius=8000&ticket=${ticket}`,
);
// everything already live in the disc, once, on connect
stream.addEventListener("snapshot", (e) => replaceAll(JSON.parse(e.data).events));
stream.addEventListener("event", (e) => {
// the delta is an envelope: created | updated | expired
const { change, event } = JSON.parse(e.data);
change === "expired" ? drop(event.event_id) : upsert(event);
});
// we always close on schedule; the ticket died long before
stream.addEventListener("bye", () => reconnectWithAFreshTicket());Un client correct doit trois choses au protocole : traiter chaque delta comme un upsert, retirer lui-même un événement une fois son expires_at passé, et demander un nouveau ticket après un bye. Les repères disparaissent d’eux-mêmes, c’est une propriété du contrat : vous n’écrivez aucune purge des dangers périmés. Le contrat de streaming les détaille une à une.
Vos utilisateurs sont ce qui fait venir la prochaine application
Publier est gratuit sur toutes les offres, et le restera. Un conducteur touche une icône, le suivant répond « toujours là » ou « disparu », et chacun des deux est un appel HTTP. La validation exige des véhicules distincts et les événements expirent d’eux-mêmes : vous n’écrivez ni file de modération ni tâche de nettoyage.
Ce que vos utilisateurs voient et qu’aucun flux ne transporte
Un gestionnaire routier publie ce sur quoi il a envoyé une équipe. Un nid-de-poule avant cette intervention, un contrôle de police, un radar automatique, des débris sur la voie de gauche — rien de tout cela n’est dans le système de qui que ce soit d’autre, et tout figure déjà dans le vocabulaire.
Pourquoi un réseau neutre plutôt qu’un réseau plus gros
Nous ne construisons aucune application de navigation, et c’est une contrainte fondatrice, pas une étape. Nous n’avons aucun produit que vous alimenteriez pour ensuite l’affronter — c’est la seule raison pour laquelle les autres applications de ce réseau acceptent d’y être avec vous.
Gratuit pour démarrer, et les prix sont publics
Vous payez la lecture du réseau, décomptée en lectures. Publier est gratuit sur toutes les offres. Pas de carte pour commencer, et personne à appeler.