Fullstack en Rust sans la douleur et les abstractions inutiles
Ce sentiment familier : vous voulez écrire une petite application web en Rust, mais la configuration de l'infrastructure prend plus de temps que la logique elle-même. D'abord, vous choisissez un framework web (Axum ou Actix-web), puis un moteur de templates (Askama ou Tera), puis vous réfléchissez à comment transmettre les données au frontend sans transformer votre code en descriptions infinies de points de terminaison API. Au final, un projet de 10 lignes de logique passe à des centaines de lignes de configuration.
L'équipe de développement de Tokio (oui, ceux qui ont écrit le runtime async pour la moitié de l'écosystème Rust) ont décidé de corriger cela. Ils ont introduit Topcoat — un framework qui essaie de rendre le développement en Rust aussi rapide et agréable que Ruby on Rails ou Next.js, tout en conservant tous les avantages de la sécurité de type.
Qu'est-ce que c'est en fait
Topcoat est un framework fullstack modulaire qui suit le principe « batteries included ». Il ne vous force pas à choisir entre le rendu côté serveur (SSR) et la réactivité côté client. Au lieu de cela, il propose une approche hybride : vous écrivez du code en Rust, et le framework décide lui-même ce qui doit s'exécuter sur le serveur et ce qui doit devenir du JavaScript pour le navigateur.
Le projet en est aux premiers stades (statut expérimental), donc l'API peut évoluer. Mais les idées architecturales qui y sont intégrées semblent très solides pour tous ceux qui en ont marre du zoo de technologies.
Réactivité sans douleur ni bundles WASM
Habituellement, si vous voulez rendre un bouton sur une page vivant, vous avez deux chemins : soit écrire en JS/TS, soit traîner du WebAssembly lourd. Topcoat offre une troisième option.
Une expression spéciale $(...) à l'intérieur de la macro view! est du code Rust ordinaire. Il est vérifié par le compilateur, mais Topcoat sait comment le traduire en JavaScript. Quand vous écrivez un gestionnaire de clic qui modifie l'état (signal), vous n'avez pas besoin de configurer un build frontend ou de décrire une API. Le framework lui-même le fera fonctionner instantanément dans le navigateur.
Si une mise à jour nécessite des données du serveur (par exemple, une recherche en base de données), ce sont les « shards » qui viennent à la rescousse. Vous marquez un composant avec l'attribut #[shard], et Topcoat le rendra automatiquement sur le serveur quand les arguments changent, puis remplacera soigneusement le fragment HTML dans le navigateur.
Un routage qui met de l'ordre
Au lieu de décrire un arbre de chemins dans un énorme fichier main.rs, Topcoat suggère d'utiliser la structure de dossiers. Si vous avez travaillé avec Next.js, vous vous sentirez comme chez vous.
Un fichier src/app/about.rs deviendra automatiquement accessible à /about, et src/app/posts/id.rs se transformera en route avec un paramètre /posts/{post_id}. Il n'y a pas de magie au runtime — c'est une fonctionnalité optionnelle que vous pouvez activer si vous aimez ce genre d'ordre.
Des templates qui restent du HTML
De nombreux moteurs de templates en Rust sont soit trop éloignés du HTML, soit vous forcent à écrire beaucoup de code supplémentaire. La macro view! dans Topcoat essaie d'être aussi proche du balisage que possible, tout en vous permettant d'utiliser des constructions Rust ordinaires comme les boucles for et les conditions if.
Au fait, pour ceux qui s'inquiètent de la propreté du code : le package inclut un utilitaire CLI topcoat fmt qui peut formater le code même à l'intérieur des macros. C'est une petite chose qui manque souvent dans les autres projets.
Composants prêts à l'emploi et assets
Les développeurs ont pris le chemin de shadcn/ui. Au lieu de tirer une bibliothèque de composants lourds en tant que dépendance, vous utilisez la commande topcoat ui. Elle copie le code des composants dont vous avez besoin (boutons, cartes, formulaires) directement dans votre projet. Cela vous permet de modifier le design à votre guise sans vous battre avec les styles de la bibliothèque. Tout est construit sur Tailwind CSS, qui est intégré directement dans le pipeline de build.
Travailler avec les images et les polices est également simplifié :
Les frameworks ajouteront des hash aux noms de fichiers pour la mise en cache et s'assureront que les assets sont disponibles.
Est-ce que ça vaut le coup d'essayer maintenant
Topcoat ressemble à une tentative de créer un framework web « correct » pour Rust, où le typage aide plutôt que de gêner la vitesse de développement.
Pour qui c'est définitivement :
- Ceux qui veulent construire rapidement un prototype ou un outil interne en Rust.
- Les développeurs qui en ont marre de l'écart entre le backend et le frontend.
- Ceux qui valorisent l'écosystème Tokio et font confiance à leurs décisions architecturales.
Le projet est en pleine croissance en ce moment. Les auteurs prévoient d'ajouter le support WebSocket, des jobs en arrière-plan, et même la génération de spécifications OpenAPI. Si vous cherchiez une raison d'écrire quelque chose pour le web en Rust, l'arrivée de Topcoat est peut-être ce signe même.
Jetez un œil au dépôt tokio-rs/topcoat — il y a un excellent guide pour commencer. Mais rappelez-vous : le projet est expérimental, donc l'utiliser pour des systèmes critiques est encore un peu prématuré.
Projets similaires