|

Terminui : toolkit TypeScript ultra-rapide pour interfaces terminal double-buffer

https://github.com/AhmadAwais/terminui

📌 TERMINUI est une bibliothèque TypeScript ultra-performante pour construire des interfaces utilisateur en terminal, avec un système de rendu double-buffer qui ne met à jour que les cellules modifiées entre les frames. Cette approche différentielle garantit des performances constantes même avec des interfaces complexes, tout en restant purement fonctionnelle : pas de classes, pas de this, pas de mutation, uniquement des objets en entrée et des objets en sortie. Le système de layout riche permet de diviser n’importe quel rectangle avec des contraintes variées comme length, percentage, ratio, min, max et fill.

Le système de style complet supporte les 16 couleurs ANSI, les 256 couleurs indexées, le RGB 24-bit, et les modifiers comme bold, italic, underline, entre autres. La bibliothèque intègre plus de 10 widgets prêts à l’emploi : Block, Paragraph, List, Table, Gauge, Tabs, Sparkline, BarChart, Scrollbar et Clear. Chaque widget gère son propre état quand nécessaire, comme List et Table pour la sélection, ou Scrollbar pour la gestion de la position avec offset.

Une particularité unique de Terminui est son API JSX optionnelle qui permet d’écrire des UI terminal dans un style React-like, mais sans virtual DOM reconciler. Le JSX est directement traduit en appels de rendu widget natifs (frameRenderWidget, frameRenderStatefulWidget) et utilise toujours le moteur de rendu différentiel double-buffer. Cette approche combine la syntaxe familière de JSX avec les performances brutes d’un toolkit fonctionnel pur.

🎯 Points clés à retenir :

Double-buffered rendering — Seules les cellules modifiées sont flushées entre les frames pour performances optimales

🔧 Pure fonctionnel — Pas de classes, pas de this, pas de mutation : objets en entrée, objets en sortie

📐 Layout système avancé — Contraintes variées : Length, Percentage, Ratio, Min, Max, Fill pour flexibilité totale

🎨 Style complet — 16 couleurs ANSI, 256 indexées, RGB 24-bit, modifiers (bold, italic, underline)

📦 10+ widgets intégrés — Block, Paragraph, List, Table, Gauge, Tabs, Sparkline, BarChart, Scrollbar, Clear

🔄 Stateful widgets — List/Table sélection, Scrollbar position avec gestion offset

🌐 Wide character support — CJK et caractères fullwidth mesurés et rendus correctement

🔌 Backends extensibles — Backend de test inclus, apportez votre propre backend terminal Node.js

⚛️ JSX API optionnelle — Style React-like avec terminalDrawJsx, mais sans virtual DOM

🛡️ TypeScript strict — Mode strict activé, noUncheckedIndexedAccess, zéro any

L’installation s’effectue via pnpm avec pnpm add terminui, et la configuration TypeScript nécessite l’activation de jsx avec jsxImportSource pointant vers terminui. Le backend de test permet un développement rapide sans terminal réel, idéal pour les tests unitaires et le développement itératif. En production, il suffit de remplacer le test backend par un véritable backend terminal Node.js.

Les widgets peuvent être composés hiérarchiquement avec le système de layout split. Chaque widget accepte des options de configuration pour le style (couleurs, modifiers), le layout (contraintes, gaps, padding) et le comportement (sélection, scrolling). Les contraintes de layout permettent de créer des interfaces responsives qui s’adaptent aux dimensions du terminal, avec des layouts flexibles basés sur des ratios ou des pourcentages.

Le mode JSX offre des composants familiers comme VStack, HStack, Box, Text, List, Table, Gauge, avec des alias React-like comme Row, Column, Panel, Label. Les props shorthand simplifient la configuration : gap pour l’espacement, p/px/py pour le padding, border et title pour les bordures, fg/bg/bold pour le style, align pour l’alignement texte. Cette API alternative rend la transition depuis React naturelle pour les développeurs habitués à l’écosystème.

Terminui se distingue des autres toolkits terminal par sa combinaison de performance brute et d’ergonomie moderne. Là où de nombreuses bibliothèques sacrifient la performance pour la simplicité d’API ou imposent des paradigmes orientés objet lourds, Terminui maintient une approche fonctionnelle pure avec des rendus différentiels optimisés. Le support JSX sans virtual DOM est un compromis intelligent qui offre la syntaxe conviviale sans sacrifier les performances.

Concrètement, c’est un toolkit pour quiconque veut construire des CLI modernes avec des interfaces riches et réactives, que ce soit pour des tableaux de bord monitoring, des outils d’administration système, ou des applications interactives en terminal. La bibliothèque est particulièrement adaptée aux Node.js CLIs qui nécessitent plus qu’un simple texte statique, offrant des capacités de mise en page et d’interaction comparables aux applications GUI, mais dans l’environnement terminal.


En savoir plus sur Clement MONDARY

Subscribe to get the latest posts sent to your email.

Publications similaires

Laisser un commentaire