Command Palette

Search for a command to run...

Logo Pilote

Pilote

05.2026 - Present

  • Rust
  • React
  • TypeScript
  • React Router
  • shadcn/ui
  • TailwindCSS
  • ts-rs
Capture d'écran de Pilote

Description du projet

Pilote est une bibliothèque de Server-Driven UI (SDUI) : types Rust d'un côté, renderer React de l'autre. Le backend construit un arbre de noeuds UI, le sérialise en JSON, et le frontend le rend sans le modifier. Aucune logique métier ne vit dans la bibliothèque : c'est un format de transport et un renderer.

C'est le backend qui décide de ce qui s'affiche : pages, tableaux, formulaires, actions, navigation. Ajouter une fonctionnalité ou changer une mise en page devient un déploiement backend, pas une release frontend.

Côté Rust, le crate pilote définit l'enum UiNode et plus de trente types de noeuds : primitives (texte, badge, alerte), mise en page (lignes, grilles, onglets, accordéons), données (tableaux, cartes, statistiques, pagination), formulaires et formulaires en plusieurs étapes, interactions (boutons, dialogues, menus), médias (images, Markdown, graphiques, timelines). Chaque noeud a un builder fluent généré par la macro #[derive(PiloteNode)], avec validation et transformation automatique en skeleton de chargement.

Rust reste la seule source de vérité : les types TypeScript sont générés avec ts-rs, et la CI vérifie que les fichiers générés correspondent à ceux du dépôt.

Côté React, trois couches utilisables ensemble ou séparément. pilote-react fournit RenderNode, PiloteProvider et les hooks, et résout chaque type de noeud dans un registre de composants. pilote-shadcn implémente tous les noeuds avec shadcn/ui, et chaque composant peut être remplacé par celui de votre design system. pilote-react-router branche le tout sur React Router v7 en mode SPA, avec une route catch-all et un layout à sidebar.

Le backend pilote aussi le comportement : actions (navigation, soumission, suppression avec confirmation, toasts, redirections), behaviors (polling, recherche, scroll infini, sauvegarde automatique, raccourcis clavier) et thème, appliqué en variables CSS. Les requêtes passent par un fetch avec timeout et retries optionnels, désactivés par défaut pour ne pas dupliquer une mutation.

pilote-ai génère un arbre UiNode à partir d'une demande en langage naturel : le LLM, n'importe quel provider d'IronFlow, est contraint par le schéma JSON des noeuds, et sa sortie est revalidée en la désérialisant. Côté React, le hook useGeneratedUi expose l'état de la génération pour afficher un skeleton pendant le chargement, puis l'arbre généré ou une erreur avec relance.

Le projet comprend aussi un CLI de scaffolding (pilote init, pilote new), des tests d'accessibilité, une suite E2E Playwright et un Markdown assaini contre le XSS. Pilote est open source sous licence MIT.

Technologies utilisées

Ce projet utilise les technologies suivantes : Rust, React, TypeScript, React Router, shadcn/ui, TailwindCSS, ts-rs.