Logo TraCflux

TraCflux

Documentation en accès libre, sans compte.

Solution open source pour la conception et l'optimisation de plans de feux tricolores, pour les traficiens, étudiants, bureaux d’études et collectivités.

Module Diagramme de Feux

Aperçu de l'application : matrice des temps intervert à gauche, diagramme temporel d'un carrefour à 13 groupes au centre, conditions de micro-régulation en bas

Module Onde verte

Aperçu du module Onde verte : diagramme espace-temps de 5 carrefours coordonnés sur un axe, avec bandes passantes en sens montant et descendant et tableau des données saisies

TraCflux s'organise en deux modules complémentaires :

Conçue pour être utilisée localement, sans serveur : les données de vos projets restent dans le navigateur (localStorage) et sur votre poste.

Essayer TraCflux

Ouvrir l'application — un carrefour d'exemple s'ouvre directement, sans compte à créer et sans rien installer.

Questions fréquentes : tracflux.com/faq, sans compte GitHub.

Présentation de l'outil, en une page : tracflux.com/presentation.

Pour l'avoir sous la main : le bouton « Installer cette app » de la barre d'adresse (Chrome ou Edge) en fait un raccourci sur le bureau, et l'application fonctionne ensuite hors connexion.

Pourquoi TraCflux

Un outil pérenne, sans installation

TraCflux s'exécute dans le navigateur. Ce choix engage directement sa longévité : aucune dépendance à une version de système d'exploitation, aucune bibliothèque système à maintenir, aucun composant propriétaire. Il fonctionne sur n'importe quel poste et n'importe quel système — Windows, macOS, Linux — et continuera de le faire.

Deux verrous en découlent, levés d'un coup :

L'import des formats existants procède du même principe : un projet doit pouvoir survivre à l'outil qui l'a créé.

Un modèle qui combine phases et groupes de feux

Les outils historiques de conception de plans de feux reposent généralement sur une organisation par phases : les feux d'une même phase s'ouvrent et se ferment ensemble. C'est simple et lisible pour l'usager, mais cela contraint le concepteur sur l'enchainement des groupes de feux.

TraCflux repose sur un modèle qui combine gestion par phases et gestion par groupes de feux. Le phasage reste disponible — pour raisonner comme pour agir (escamotage de phase, phasage bulle) — mais chaque groupe de feux demeure indépendant : il n'est pas verrouillé dans une phase, et conserve ses propres instants d'ouverture et de fermeture.

C'est cette combinaison qui permet d'exprimer directement les chevauchements partiels, la micro-régulation fine (escamotage, seconde lucarne, fermeture anticipée…), la coordination sur un axe et le diagnostic de capacité courant par courant — là où un modèle strictement par phases les rend malaisés, voire impossibles à décrire.

Priorité bus

La prise en compte des transports en commun est pensée comme une orientation de fond de TraCflux : les variables et actions de micro-régulation propres à la priorité bus (délai d'approche, temps maxi d'attente bus, allongement de vert, escamotage de phase, point de repos…) sont intégrées au cœur de l'outil. L'objectif est de rendre une stratégie de priorité explicite, visualisable et vérifiable — sans boîte noire, hors ligne et interopérable — tout en laissant la décision d'ingénierie à l'utilisateur. TraCflux ne décide pas du niveau de priorité accordé : il en offre le langage et la lecture, en préservant les contraintes de sécurité et la cohérence du plan de feux.

Assistant de construction de diagramme

TraCflux intègre un assistant qui dégrossit un plan de feux en quelques minutes, à partir des trafics. Diagramme → Nouveau plan de feu… crée un plan vierge associé à un jeu de trafic ; Diagramme → Assistant conception… :

L'assistant s'ouvre dans une fenêtre détachée, que l'on pose sur un autre écran : le diagramme garde toute la place et reste modifiable pendant qu'on le consulte. Sur un carrefour en croix à trois phases avec couloir bus, l'assistant pose un diagramme complet et sans conflit, prêt à être affiné.

Un assistant au service de l'expertise. L'utilisateur reste maître des données d'entrée — trafics, verts minimaux, temps interverts — et des choix de conception : phasage, conditions de contraction des adaptatifs et autres fonctionnements conditionnels (seconde lucarne, escamotage, priorité bus), adaptation au site. Les déductions incertaines sont signalées « à vérifier » et laissées à sa main. L'élaboration d'un diagramme de feux est une discipline à part entière, qui demande une approche de traficien ou d'expert et donne toute sa dimension à la performance recherchée : l'assistant prend en charge le calcul et la mise en place, pour que le concepteur se concentre sur ce qui fait la qualité d'un plan (voir la FAQ).

Reprendre les études DiagFeux

⚠️ Fonctionnalité en objectif de développement. L'importateur est construit à partir du schéma XML officiel et de la documentation de DiagFeux, et testé sur des jeux d'essai construits pour cela. Il n'a pas encore été confronté à un fichier .dfe réel. Si vous disposez d'un projet DiagFeux (même anonymisé) que vous pouvez partager, ouvrez une issue — cela accélérera directement la mise au point.

DiagFeux, le logiciel de conception de diagrammes de feux du CERTU (aujourd'hui Cerema), n'est plus maintenu. TraCflux permet d'importer ses projets (.dfe) — groupes, décalages, verts, matrice d'interverts, propriétés.

Les bureaux d'études et collectivités disposant d'anciennes études DiagFeux peuvent ainsi les reprendre plutôt que de les ressaisir : Fichier → Importer → Projet DiagFeux (.dfe).

La méthode de calcul reste celle du Guide des carrefours à feux du CERTU (débit de saturation 1800 uvp/h par voie, méthode de Webster), commune aux deux outils.

Mode présentation

L'application est conçue pour s'adapter aux contextes de présentation devant un auditoire — comités techniques, formations internes, validations devant un client ou échanges pédagogiques avec des élus.

En réunion comme en visio, détachez la fenêtre Image du carrefour : c'est elle seule que vous partagez ou posez sur un second écran. Pendant la simulation, les flèches changent de couleur (vert / orange / rouge) seconde par seconde, en suivant le cycle et l'effet des actions de micro-régulation activées.

L'auditoire ne voit que l'essentiel — le carrefour qui « vit » au rythme du cycle — pendant que vous gardez le contrôle complet sur votre écran de travail (diagramme, matrice, panneau de simulation, micro-régulation) et commentez en direct les actions que vous activez et leur effet sur la dynamique du carrefour.

Le survol fait le lien pendant que vous commentez. Posez la souris sur une flèche de la fenêtre partagée : la ligne du groupe s'allume dans votre diagramme, ainsi que sa ligne dans le formulaire et dans les données trafic. Survolez une ligne de votre diagramme : c'est la flèche correspondante qui s'allume sous les yeux de l'auditoire, entourée d'un halo. « Ce groupe-là, c'est cette flèche-là » se montre au lieu de se décrire.

Fonctionnalités principales

Module Diagramme de Feux

Capacité et diagnostic

Interopérabilité

Module Onde verte

Transverse

Développement

Pour travailler sur le code. L'usage courant ne demande rien de tout cela — voir Essayer TraCflux.

Prérequis : Node.js 20.19 ou plus (22.12 ou plus pour la branche 22), exigé par Vite.

git clone https://github.com/ThierryClm/TraCflux.git
cd TraCflux
npm install
npm run dev

L'application s'ouvre à http://localhost:3000.

Commandes

Commande Effet
npm run dev Serveur de développement (rechargement à chaud)
npm run build Build de production dans dist/
npm run preview Aperçu local du build de production
npm run serve Reconstruit dist/, s'assure que le serveur d'aperçu tourne, et vérifie qu'il sert bien ce build — la commande à utiliser au quotidien (voir Dépannage)
npm run clean Nettoyage local : supprime dist/ et arrête les processus node.exe (Windows — voir Dépannage)
npm test Lancer les tests (Vitest), en mode surveillance
npx vitest run Lancer les tests une seule fois
npm run test:coverage Les tests avec la mesure de couverture ; échoue sous les seuils fixés dans vite.config.ts
npm run test:ui Les mêmes tests dans l'interface graphique de Vitest
npm run e2e Parcours réels dans Chrome, Edge, Firefox, Safari et Brave (Playwright) sur la version compilée : ouvrir et sauvegarder, projet exemple, couleurs de la matrice, ajout de condition, fenêtre détachée, export PNG, dossier imprimé. Première fois : npx playwright install --with-deps ; Brave est pris s'il est installé (ou désigné par BRAVE_PATH)
npm run types Vérification des types TypeScript (tsc --noEmit)
npm run lint Analyse du code par Oxlint (.oxlintrc.json) : les erreurs bloquent l'intégration continue, les avertissements sont une dette à réduire
npm run preview:deploy Construit et publie la branche en cours sur une adresse de prévisualisation Surge ; refuse de s'exécuter sur master
npm run check Rapport de santé des dépendances : vulnérabilités et versions obsolètes, celles qui atteignent le navigateur étant séparées de celles confinées à la chaîne de compilation
npm run release Incrémente la version, met à jour src/version.ts et package.json, crée le commit et le tag (voir VERSIONING.md)

Le projet passant parfois plusieurs semaines sans modification, npm run check est la commande à lancer en reprenant : de nouvelles alertes de sécurité peuvent être apparues sans qu'une seule ligne de code ait bougé.

Les quelques fichiers .vbs à la racine sont des lanceurs Windows personnels — un double-clic enchaîne npm run build puis npm run preview. Ils ne sont nécessaires ni à l'usage de l'application, ni pour développer.

Dépannage

Le symptôme à connaître en développement : l'application semble ignorer vos modifications. La PWA installée sur localhost:4173 sert son cache tant qu'un serveur ne lui présente pas un nouveau build, et elle le fait sans rien signaler.

Utilisez npm run serve plutôt que npm run preview. Il reconstruit dist/, démarre le serveur s'il ne tourne pas, puis télécharge /index.html depuis ce serveur et le compare au fichier qui vient d'être produit. Il ne dit « c'est prêt » qu'après cette vérification, et sort en erreur sinon — serveur arrêté, ou processus résiduel occupant le port sans rien servir. Un npm run preview ne vérifie rien et vous laisse devant une page muette.

Rechargez ensuite la fenêtre par Ctrl+R, puis cliquez sur « Recharger » quand le bandeau apparaît. Laisser la fenêtre ouverte ne suffit pas : c'est le rechargement qui déclenche la recherche de nouvelle version. En cas de doute, la date de build figure dans le rapport de diagnostic — c'est le seul contrôle fiable.

Si le cache reste malgré tout figé (thème ou contenu d'une fenêtre détachée qui ne bouge plus) :

  1. Fermer toutes les fenêtres du navigateur ouvertes sur localhost:4173
  2. edge://settings/cookies/detail?site=localhost%3A4173 → Supprimer — vide le service worker et le cache pour ce seul site
  3. npm run serve

npm run clean reste disponible, mais son taskkill arrête tous les processus node.exe de la machine, pas seulement ceux du projet : à éviter si un autre travail tourne en parallèle.

Deux malentendus courants, que la configuration actuelle écarte. Les processus node.exe ne s'accumulent plus après plusieurs aperçus : strictPort fait échouer franchement un second serveur au lieu de le replier silencieusement sur le port suivant. Et le bandeau « Nouvelle version disponible » à chaque rebuild n'est pas un défaut, c'est le mécanisme lui-même — chaque build produit un nouveau service worker. Pour l'utilisateur final (PWA hébergée ou installée depuis une release), ce bandeau n'apparaît qu'après un vrai déploiement.

Exemple

Un projet d'exemple est fourni dans le dossier examples/. Ouvrez l'application, puis utilisez Fichier → Ouvrir un projet et sélectionnez examples/Carrefour_exemple.json.

Architecture

Application React + TypeScript (strict) + Vite, état centralisé dans src/hooks/useTrafficLight.ts, découpé en sous-modules dans src/hooks/trafficLight/. L'intégration continue vérifie les types, le lint, les tests avec leur couverture et le build à chaque PR. Voir CLAUDE.md pour les détails d'implémentation (structures de données, rendu du timeline, détection de conflits).

Comptes utilisateurs

L'application embarque un système de comptes à 3 niveaux de permissions (lecture seule, modification partielle, modification totale), avec mots de passe hachés en SHA-256.

Il est désactivé par défaut : à l'ouverture, on entre directement dans l'application, sans écran de connexion. Il s'adresse aux postes partagés et s'active depuis À propos → Utilisateurs → Activer les comptes. Une fois activé, l'application demande une connexion à chaque ouverture ; on peut le désactiver au même endroit, les comptes créés étant conservés.

Important — ce que ce système est, et n'est pas :

Sécurité réelle des fichiers projet : à assurer au niveau du système d'exploitation et du réseau local — droits NTFS / ACL sur le partage réseau, comptes Windows / Active Directory, permissions de dossier sur le serveur de fichiers. C'est ce niveau qui décide qui peut lire, écrire ou supprimer les .json exportés par l'application.

Sécurité et limites connues

Import Excel — fichiers d'origine externe

La bibliothèque utilisée pour lire les fichiers Excel (xlsx / SheetJS, version 0.18.5) comporte deux vulnérabilités connues, sans correctif diffusé sur le registre npm officiel :

Les versions corrigées existent uniquement sur cdn.sheetjs.com (SheetJS a retiré son édition communautaire du registre npm en 2023).

Recommandation utilisateur : n'importer que des fichiers .xls / .xlsx d'origine connue (feuilles produites par vous ou par des collègues identifiés). Un fichier malveillant ouvert via l'import pourrait perturber l'onglet du navigateur.

Note sur les macros : la lecture se fait via une bibliothèque JavaScript côté navigateur, qui n'extrait que les valeurs des cellules et n'exécute aucune macro (VBA). Le risque d'exécution de macro à l'ouverture (propre à Excel bureautique) n'existe pas ici. La vigilance porte donc sur l'origine du fichier (contenu potentiellement malformé), indépendamment de la présence ou non de macros.

Évaluation du risque dans l'usage prévu : faible. TraCflux est un outil local mono-utilisateur ; xlsx n'est sollicité qu'au moment où l'utilisateur sélectionne manuellement un fichier (src/utils/excelImporter.js). Aucun risque pour le système d'exploitation, aucun risque pour les autres projets enregistrés. Seul vecteur résiduel : phishing ciblé.

Décision actuelle : statu quo tant que l'usage reste local. Une migration vers xlsx-js-style, exceljs ou la version corrigée hors-npm de SheetJS sera envisagée si l'app évolue vers un déploiement multi-utilisateurs.

Questions fréquentes

Une FAQ répond aux questions courantes (confidentialité des données, formats d'import/export, licence, partage de projets, etc.).

Services & accompagnement

Un service d'accompagnement à la conception de diagrammes de feux est envisagé pour une étape ultérieure du projet. L'idée : proposer, pour les carrefours complexes, une aide tirant parti des capacités combinées de gestion par phase et par groupe de feux qu'offre l'outil.

Deux modes de prestation sont pressentis — assistance technique à la carte ou prise en charge complète du projet à partir des données fournies par l'utilisateur — mais cette offre n'est pas encore opérationnelle.

(Les modalités et coordonnées de contact seront précisées lorsque le service sera disponible.)

Journal des versions

Les évolutions notables sont consignées dans le CHANGELOG. Le projet suit le versionnage sémantique.

Contribuer

Les contributions sont les bienvenues. Pour un bug ou une suggestion, ouvrez une issue GitHub. Pour proposer un patch, forkez puis ouvrez une pull request.

Un rapport de diagnostic peut être généré depuis l'app (À propos → Rapport de diagnostic) et joint à une issue pour faciliter le débogage.

Licence

Ce projet est distribué sous licence GNU Affero General Public License v3.0 ou ultérieure (AGPL-3.0-or-later). Voir le fichier LICENSE pour le texte complet.

En résumé :

© 2026 Thierry Colmon