À propos du projet

Solid est une bibliothèque JavaScript open-source destinée à la création d'interfaces utilisateur. Son choix de conception fondamental est le rejet du DOM virtuel : les modèles sont compilés en nœuds DOM réels et les mises à jour sont appliquées grâce à des réactions réactives granulaires, garantissant que seul le code dépendant d'un état modifié est réexécuté. Modèle réactif Les développeurs déclarent l'état avec des primitives telles que createSignal, qui renvoie un accesseur et un setter. Les valeurs dérivées sont exprimées sous forme de fonctions simples appelant l'accesseur, et le suivi des dépendances est automatique : la lecture d'un état réactif abonne le calcul environnant à celui-ci. Les composants sont des fonctions ordinaires qui s'exécutent une seule fois pour configurer la vue, ce que le fichier README décrit comme un modèle mental de rendu unique. La documentation illustre comment le compilateur extrait le HTML statique dans un modèle et insère des expressions dynamiques afin qu'un seul nœud de texte puisse être mis à jour sans re-rendre son élément parent. Fonctionnalités du framework La bibliothèque propose JSX, les fragments, Context, Portals, Suspense, le rendu côté serveur en streaming, l'hydratation progressive, les Error Boundaries et le rendu concurrent. La gestion d'état intégrée est assurée par Context et Stores, et les Resources permettent de traiter les données chargées par le serveur comme tout autre état réactif, rendues de manière réactive avec Suspense et le rendu concurrent. Le README souligne la prise en charge du SSR et du serverless avec le streaming et l'hydratation progressive. Compatibilité et extensibilité Solid est décrit comme isomorphe (rendu client et serveur) et universel, avec des moteurs de rendu personnalisés disponibles pour d'autres environnements. Il est compatible avec les composants web et permet de créer des éléments personnalisés via le package compagnon solid-element. Il s'intègre avec JSX, TypeScript et l'écosystème Vite. Les modèles officiels pour JavaScript et TypeScript peuvent être générés via degit, et une configuration recommandée inclut le preset Babel (babel-preset-solid) ainsi que la dépendance solid-js, avec TypeScript nécessitant jsx: "preserve" et jsxImportSource: "solid-js". Un terrain de jeu interactif et un tutoriel sont disponibles sur le site du projet. Objectifs déclarés Le README revendique un bundle léger et optimisable par tree-shaking, avec des performances proches du JavaScript natif optimisé, en référence au JS Framework Benchmark et aux comparaisons de taille de bundle. Il met l'accent sur la simplicité, la composabilité et l'absence de règles cachées, encourageant le code déclaratif et la séparation lecture-écriture, tout en notant que les bibliothèques JavaScript natives comme D3 peuvent être utilisées directement grâce à la minimalité des abstractions. Communauté et support Le support cible les deux dernières années des versions modernes de Firefox, Safari, Chrome et Edge sur ordinateur et mobile, ainsi que Node LTS et les runtimes récents Deno et Cloudflare Worker côté serveur ; IE et les navigateurs obsolètes similaires ne sont explicitement pas pris en charge. Les tests sont soutenus par SauceLabs. Le projet entretient des communautés sur Discord et Reddit, une base de contributeurs, une page de financement Open Collective et un écosystème croissant de primitives communautaires, de bibliothèques de composants et d'utilitaires de build.