# Topcoat : un framework Rust full-stack sans WebAssembly

_Publié le 9 novembre 2026 — https://ip73.fr/2026/11/09/topcoat-un-framework-rust-full-stack-sans-webassembly/_

Le framework Topcoat, développé par l'équipe Tokio, sort de sa phase de développement privé pour devenir une solution full-stack en Rust. Il repose sur le principe du rendu entièrement côté serveur, mais il y parvient en introduisant une méthode de réactivité qui évite le WebAssembly et un processus de compilation client séparé.

Le cœur de cette approche réside dans l'expression `$(...)`. Ce sont des fragments Rust dont le compilateur vérifie le type. Topcoat les évalue sur le serveur pour le chargement initial, mais ils sont ensuite traduits en JavaScript. Ce mécanisme permet à l'interface de réagir instantanément dans le navigateur, offrant une sensation de fluidité comparable à celle de HTMX ou Phoenix LiveView, selon InfoQ.

Ce qui distingue Topcoat, c'est sa philosophie : simplifier la productivité en intégrant tout. Le framework utilise une macro `view!` qui permet de mélanger du HTML pur avec le contrôle de flux typique de Rust. On peut ainsi utiliser des boucles ou des conditions directement dans les templates, ce qui, selon les développeurs, réduit le code répétitif habituellement nécessaire pour construire une API séparée.

Pour gérer les mises à jour dynamiques, l'outil emploie le concept de `#[shard]`. Si une donnée change, Topcoat ne recharge pas toute la page ; il réexécute uniquement le composant marqué comme shard sur le serveur et remplace l'ancienne section HTML par la nouvelle. Cela fonctionne, par exemple, pour un tableau de bord de recherche où les résultats sont mis à jour en temps réel sans solliciter le serveur à chaque frappe.

Le système d'adressage est également intelligent. Il peut inférer l'arborescence des routes directement à partir de la structure des fichiers du projet, éliminant ainsi une étape de configuration manuelle lourde. De plus, le projet inclut Topcoat UI, une bibliothèque de composants inspirée de shadcn/ui. Ces composants sont intégrés dans le dépôt via une commande CLI, permettant aux équipes de modifier leur design et leur fonctionnalité sans emprisonnement dans un paquet fixe.

Lorsqu'un rafraîchissement serveur est nécessaire, comme pour afficher des données fraîches issues d'une base de données, le composant doit être marqué comme `#[shard]`. Dans ce cas, Topcoat exécute le code serveur, tel qu'une requête SQL, et injecte le résultat HTML à l'endroit précis de la page. Les capacités de runtime évoluent ; les expressions peuvent désormais gérer des types entiers de 128 bits et composer des états sans perdre la réactivité.

La version 0,9.0 a apporté des fonctionnalités notables, notamment le *server push* via `live!` et `connected`. Cela permet de maintenir les mises à jour même après que la page initiale ait fini de charger, en utilisant des WebSockets. Ceci est utile pour une application de chat, par exemple, où l'état des messages peut être poussé à tous les clients connectés simultanément. L'identité stable des régions de vie (`#[key(...)]`) assure que les composants réagissent correctement lors des rerendus, même si leur ordre change.

Le framework intègre également des outils pour la gestion des requêtes côté serveur. Il permet, par exemple, de récupérer l'adresse IP du client via `client_ip(cx)`, en prenant en compte les proxys de confiance. Étant un projet open source en évolution rapide, sa stabilité à long terme n'est pas garantie. Néanmoins, l'équipe publie une feuille de route sur GitHub détaillant les prochaines étapes, notamment l'authentification et une intégration plus poussée avec Toasty.

## Sources

- [GitHub - tokio-rs/topcoat: A batteries-included framework for building web apps](https://github.com/tokio-rs/topcoat), github.com
- [Release v0.9.0 · tokio-rs/topcoat](https://github.com/tokio-rs/topcoat/releases/tag/v0.9.0), github.com
- [Tokio Releases Topcoat: A Batteries-Included Full-Stack Rust Framework](https://www.infoq.com/news/2026/11/topcoat-rust-framework/?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global), InfoQ, 9 novembre 2026
