Nodefony
Framework Node.js fullstack — HTTP & WebSocket, même contexte

Barre de débogage — nodefony/debugbar

stablenodefony (cœur)mis à jour 2026-08-31

Une bande fine en bas de page, en développement, qui montre ce que le serveur est en train de faire : le débit temps réel, la charge, la mémoire, les requêtes réseau et les journaux — sans quitter l’écran qu’on est en train de construire.

Elle est livrée avec le cœur et ne dépend d’aucun cadre front : elle s’installe dans une page rendue par un serveur comme dans une application React, Vue, Angular ou Svelte.

📍 Documentationnodefony — le cœurBarre de débogage

Démarrage rapide#

import { mountDebugBar } from "nodefony/debugbar";

// En développement uniquement — la barre n'a rien à faire en production.
if (import.meta.env.DEV) mountDebugBar();

Sur une page rendue par le serveur, sans étape de construction :

<script
  type="module"
  src="/node_modules/nodefony/dist/client/debugbar.standalone.js"
></script>

La barre s’abonne au canal temps réel de l’application. Elle n’ouvre aucune seconde connexion : elle partage la socket déjà présente si la page en a une.

Ce qu’on voit, et ce qu’on peut faire#

Le bandeau porte l’essentiel en une ligne : l’état de la connexion, l’environnement, la branche git, puis le débit temps réel, la charge processeur et la mémoire, enfin les compteurs réseau, journaux et erreurs.

Chaque élément du bandeau porte une aide qui s’ouvre au survol et au focus clavier, et chaque indicateur est un raccourci : cliquer « cpu » ouvre l’onglet qui le détaille. Le bandeau lui-même ne se replie pas au clic — seul le chevron de droite le fait, et lui seul.

Contrôle Ce qu’il fait
flux OFF / ON Abonne aux mesures et aux journaux en direct. Coupé par défaut (voir ci-dessous).
Change la barre de côté.
Réduit la barre en pastille flottante.
Déplie ou replie le panneau.

Pourquoi le flux est coupé par défaut : l’abonnement fait tourner des compteurs et un émetteur de journaux côté serveur. En développement on ouvre beaucoup d’onglets ; les laisser tous branchés en permanence ferait payer à l’application un travail que personne ne regarde. C’est un choix d’adhésion, pas une option cachée.

Les cinq onglets#

Realtime — débit, transport, protocole, état de la socket, frames reçues, pic. C’est la vue de la socket elle-même.

Network — les requêtes de la page (fetch et XHR), leur durée décomposée et leur statut. Désactivable (network: false) : c’est le seul onglet qui instrumente des fonctions globales du navigateur.

Perf — processeur, mémoire, boucle d’événements du serveur.

Logs — les journaux du serveur, en direct. Voir la section suivante.

Runtime — l’identité du processus servi (version, environnement, pid, disponibilité, cœurs, mémoire), et ce que la barre garde sur ce navigateur.

L’onglet Logs#

Chaque entrée affiche son heure, sa sévérité, son module, son message et — quand elle est connue — sa requête (requestId). C’est ce dernier champ qui fait la différence : la même valeur relie ce journal à sa route, à ses requêtes de base de données et à sa réponse. Une entrée s’ouvre au clic (ou à Entrée au clavier) et montre son horodatage complet, sa catégorie, son worker et sa requête — de quoi coller une trace dans un ticket.

La barre d’outils permet de :

La liste est mise à jour en insérant les nouvelles entrées, jamais en la reconstruisant : une sélection de texte survit à l’arrivée d’une ligne, et la position de défilement ne saute pas.

Ce que la barre garde sur votre navigateur#

Six valeurs, uniquement d’apparence, dans le stockage local — visibles dans l’onglet Runtime, avec un bouton pour les effacer :

Clé Ce qu’elle retient
nf.debugbar.v version du format ci-dessous
nf.debugbar.visible barre affichée ou masquée
nf.debugbar.min réduite en pastille
nf.debugbar.side côté du dock
nf.debugbar.tab dernier onglet ouvert
nf.debugbar.h hauteur du panneau
nf.debugbar.live flux en direct activé

Rien d’autre n’est stocké : aucun journal, aucune donnée d’application, aucune identité. L’état est versionné — si le format change, l’ancien est effacé au chargement plutôt que réinterprété, ce qui éviterait un état incohérent qu’on ne saurait pas défaire.

Options#

mountDebugBar({
  url: "/nodefony/studio/api/realtime", // adresse du canal temps réel
  client: maSocket, // socket déjà ouverte à partager
  position: "bottom", // ou "top"
  open: false, // panneau déplié au montage
  network: true, // onglet Network (instrumente fetch/XHR)
});

mountDebugBar() est idempotent : une seule barre par page.

Accessibilité#

Tous les contrôles sont des boutons : ils s’atteignent au clavier, portent un nom et annoncent leur état (le replieur expose aria-expanded, le flux aria-pressed). L’aide de chaque indicateur s’ouvre aussi bien au focus qu’au survol. La barre se déclare comme un contenu d’appoint (complementary), ce qui évite que tout ce qu’elle affiche soit compté hors de tout point de repère par un audit de la page hôte.

Coût#

La barre est une entrée séparée du paquet (nodefony/debugbar) : elle ne pèse rien sur une application qui ne l’importe pas. Son budget est vérifié à chaque publication (npm run size:check).

📖 Lexique#

Terme Ce que c’est
Entrée séparée Un sous-chemin du paquet (nodefony/debugbar) importé à part. Ce qui n’est pas importé n’entre pas dans votre bundle.
mountDebugBar La seule fonction à appeler (index.ts:46). Elle installe la barre et rend une poignée pour la piloter ou la retirer.
Poignée (handle) Ce que le montage rend en retour (DebugBarHandle, DebugBar.ts:511) : de quoi fermer, rouvrir ou démonter proprement.
Options Ce qu’on passe au montage (DebugBarOptions, DebugBar.ts:108) — l’adresse du socket, la position (bottom ou top), le panneau ouvert d’emblée, et l’interception réseau, qu’on peut refuser entièrement.
Charge utile Ce que le serveur pousse : statistiques (StatsPayload, model.ts:25) et journaux (LogEntry, model.ts:49).
requestId L’identifiant qu’une requête porte de bout en bout. C’est lui qui relie une ligne de journal à l’appel réseau qui l’a produite.

⚠️ Pièges#

🧪 Tests & couverture#

Les chiffres exacts vivent dans la carte de l’aperçu, régénérée en comptant — jamais figés ici.

<!-- prettier-ignore -->

Type Ce qui est prouvé
Unitaires nodefony DebugBar.test.ts le montage, les options, ce que la poignée rend, le rendu des cinq onglets
Unitaires (interaction) nodefony debugbarInteraction.test.ts l’ouverture et la fermeture, le filtrage des journaux, ce qui est gardé d’une visite à l’autre

🔗 Pour aller plus loin#