SLAB : écrire une interface une fois, la voir identique sur le web, le natif et le terminal
https://stencil-hq.github.io/slab/
📌 SLAB est un langage de design destiné aux agents : un document .slab compile vers SLIR, un petit IR binaire Protobuf, puis un unique kernel Rust résout la mise en page, l’animation et les interactions. Les drivers DOM, wgpu natif et TUI ne réinterprètent pas l’interface : ils traduisent les entrées et peignent les mêmes frames.
C’est une réponse nette à un problème discret des interfaces générées par IA. Un agent sait produire du HTML, du CSS et un composant React ; il sait moins bien garantir que le résultat garde le même comportement dans un navigateur, une fenêtre native et un terminal. Flexbox se comporte, une police manque, une interaction dérive, puis chaque plateforme récupère sa correction locale. Slab déplace la décision dans un seul moteur et demande aux surfaces de l’afficher, pas de la réinventer.
Le comparatif fourni par le projet est parlant : le même lecteur de musique apparaît côte à côte dans Ghostty, une fenêtre wgpu et le DOM, avec les mêmes blocs, espacements et contrôles. Cette promesse est soutenue par des runners de conformité natifs et WASM qui comparent les cas à des goldens partagés, octet pour octet. Ce n’est pas seulement un langage de thème : c’est une tentative de rendre une interface diffable comme du code.
La syntaxe reste lisible. Tokens de couleur et de texte, paramètres hôte typés, composants exportés, états déclaratifs comme when hover, signaux tels que act=toggle, et holes que l’hôte remplit comme des slots. Le compilateur peut vérifier le document, produire une image SVG, PNG ou APNG, ou générer un Web Component avec son runtime et le kernel WASM partagé. Pas de bundler demandé. Dans la page finale, paramètres et listes typées deviennent attributs ou propriétés, les signaux deviennent des CustomEvent, et la mise en page se recalcule sur redimensionnement, thème sombre ou pointeur.
- 🧱 Un seul document pilote la mise en page sur trois surfaces
- 🖥️ Même lecteur rendu dans terminal, fenêtre native et navigateur
- 🧪 Conformité native et WASM comparée à des goldens partagés
- 🧬 Paramètres, listes et événements restent typés côté hôte
- 📦 CLI WASM : compiler, vérifier et rendre sans installer Rust
L’entrée est étonnamment basse pour un projet Rust : la CLI npm embarque compilateur et kernel en WASM, utilisable avec Bun ou Node 20. Le playground en ligne regroupe éditeur, aperçu live, design mode et vraie surface terminal, tous sur ce même kernel. Les runtimes Go, Python et Swift embarquent aussi le module ABI ; les modules générés n’ont pas besoin d’un compilateur Rust installé sur la machine cible.
Je trouve l’idée particulièrement juste pour les agents. Le bénéfice n’est pas une interface plus jolie : c’est un résultat stable que vous pouvez comparer, tester et rejouer quand un modèle touche au design. Mais il faut prendre le warning du dépôt au mot : Slab est un projet de recherche pre-alpha. Langage, format SLIR et API du kernel peuvent changer sans préavis, les releases peuvent casser un projet, et aucune maintenance n’est promise. Épinglez les versions si vous expérimentez ; ne construisez pas encore votre produit dessus.
Slab est sous licence MIT et livre quatorze exemples complets. Un socle à suivre de près pour les outils qui veulent laisser les agents dessiner sans accepter l’approximation entre plateformes.
Sources
