Gapline
Vedette
19 avril 2026in progress
Gapline est un outil en ligne de commande pour les workflows GTFS locaux.
Pourquoi ce projet ?
Le GTFS (General Transit Feed Specification) est le standard derrière toutes les applis de transport en commun, calculateurs d’itinéraires, cartes, afficheurs temps réel. Pourtant l’outillage que les opérateurs et data engineers utilisent pour produire, valider et maintenir ces feeds est resté coincé dans le passé :
- Les outils sont fragmentés et ne font qu’un petit bout de la tâche
- Des validateurs Java/Python lents qui s’étouffent sur des feeds à plusieurs millions de lignes dans
stop_times.txt - Des validateurs hébergés qui obligent les opérateurs à envoyer des données réseau sensibles à des tiers sans aucune garantie de confidentialité
- Aucun versioning, aucun workflow de review, aucune piste d’audit entre révisions — on écrase les feeds sur place comme en 2005
- Aucun moyen de simuler l’impact d’un changement de réseau avant de le publier, et aucun pont entre l’horaire théorique et ce qui se passe vraiment en exploitation
- Des scripts maison qui cassent à chaque edge case que la spec définit Gapline écrase ce bazar dans une plateforme unique et cohérente — local-first quand tu as besoin de confidentialité et de vitesse, collaborative quand tu as besoin de traçabilité et de simulation.
La CLI open-source est distribuée via cargo install gapline et utilise des sous-commandes à la git (validate, read, create, update, delete, run).
- Moteur de validation exhaustif : un pipeline à 6 sections avec gates et plus de 60 règles couvrant la structure des fichiers, le formatage CSV, le typage des champs, les clés étrangères, l’unicité des clés primaires, et les règles sémantiques comme la monotonie des
stop_sequenceou la détection de chevauchement defrequencies. Parsing et exécution des règles en parallèle viarayon, avec barres de progression par section. - 17 types de fichiers GTFS parsés : agency, stops, routes, trips, stop_times, calendar, calendar_dates, shapes, frequencies, transfers, pathways, levels, feed_info, fare_attributes, fare_rules, translations, attributions.
- Intégrité référentielle garantie : un index inverse bidirectionnel couvrant les 12+ relations FK du GTFS. Les opérations CRUD qui briseraient l’intégrité sont rejetées avec la chaîne de dépendances complète ; les suppressions en cascade exigent une confirmation explicite listant chaque enregistrement impacté.
- CRUD complet avec mini-langage de requête : filtrage
--where,--setpour les mises à jour,--confirmpour l’automatisation non-interactive en CI. - Fichiers batch
.hw: scripts basés sur des sessions avec directivesfeed/save. Toutes les opérations s’exécutent en mémoire, sans I/O disque répété entre les étapes, le tout depuis un fichier versionné avec le pipeline de données. - Sorties multi-format : texte coloré en terminal, support de sortie en JSON, XML, CSV et HTML. Autocomplétion shell pour bash, zsh, fish.