Fullstack mit Rust ohne Schmerzen und unnötige Abstraktionen
Dieses vertraute Gefühl: Du möchtest eine kleine Web-App in Rust schreiben, aber das Einrichten der Infrastruktur dauert länger als die eigentliche Logik. Zuerst wählst du ein Web-Framework (Axum oder Actix-web), dann eine Template-Engine (Askama oder Tera), und dann figuret du heraus, wie du Daten an das Frontend übergeben kannst, ohne dass dein Code zu endlosen API-Endpoint-Beschreibungen wird. Am Ende wächst ein Projekt mit 10 Zeilen Logik auf Hunderte von Konfigurationszeilen an.
Das Tokio-Entwicklungsteam (ja, die Leute, die die Async-Runtime für die halbe Rust-Ökosystem geschrieben haben) hat beschlossen, dies zu beheben. Sie haben Topcoat eingeführt — ein Framework, das versucht, die Rust-Entwicklung so schnell und angenehm wie Ruby on Rails oder Next.js zu gestalten, während alle Vorteile der Typsicherheit erhalten bleiben.
Was ist es eigentlich
Topcoat ist ein modulares Fullstack-Framework, das dem Prinzip „Batterien inklusive" folgt. Es zwingt dich nicht, dich zwischen serverseitigem Rendering (SSR) und clientseitiger Reaktivität zu entscheiden. Stattdessen bietet es einen hybriden Ansatz: Du schreibst Code in Rust, und das Framework entscheidet selbst, was auf dem Server laufen und was zu JavaScript für den Browser werden soll.
Das Projekt befindet sich derzeit in einem frühen Stadium (experimenteller Status), daher kann sich die API noch ändern. Aber die architektonischen Ideen, die hineingesteckt wurden, sehen sehr solide aus für alle, die des Technologie-Zoos überdrüssig sind.
Reaktivität ohne Schmerzen und WASM-Bundles
Normalerweise, wenn du einen Button auf einer Seite zum Leben erwecken möchtest, hast du zwei Wege: Entweder schreibst du in JS/TS, oder du ziehst schweres WebAssembly herein. Topcoat bietet eine dritte Option.
Ein spezieller Ausdruck $(...) innerhalb des view! Makros ist regulärer Rust-Code. Er wird vom Compiler geprüft, aber Topcoat weiß, wie es ihn zu JavaScript übersetzt. Wenn du einen Click-Handler schreibst, der den State ändert (signal), musst du kein Frontend-Build einrichten oder eine API beschreiben. Das Framework selbst wird es sofort im Browser zum Laufen bringen.
Wenn ein Update Daten vom Server benötigt (zum Beispiel eine Datenbanksuche), kommen „Shards" zur Hilfe. Du markierst eine Komponente mit dem #[shard] Attribut, und Topcoat wird sie automatisch auf dem Server neu rendern, wenn sich Argumente ändern, und dann das HTML-Stück im Browser vorsichtig austauschen.
Routing, das Ordnung schafft
Topcoat schlägt vor, anstatt einen Pfadbaum in einer großen main.rs Datei zu beschreiben, eine Ordnerstruktur zu verwenden. Wenn du mit Next.js gearbeitet hast, wirst du dich sofort wie zu Hause fühlen.
Eine src/app/about.rs Datei wird automatisch unter /about verfügbar sein, und src/app/posts/id.rs wird zu einer Route mit einem /posts/{post_id} Parameter. Es gibt keine Runtime-Magie — es ist ein optionales Feature, das du aktivieren kannst, wenn dir diese Art von Ordnung gefällt.
Templates, die HTML bleiben
Viele Template-Engines in Rust sind entweder zu weit von HTML entfernt oder zwingen dich, viel zusätzlichen Code zu schreiben. Das view! Makro in Topcoat versucht, so nah wie möglich am Markup zu bleiben, während es trotzdem reguläre Rust-Konstrukte wie Schleifen for und Bedingungen if erlaubt.
Übrigens, für alle, die sich um Code-Sauberkeit sorgen: Das Paket enthält ein CLI-Tool topcoat fmt, das Code sogar innerhalb von Makros formatieren kann. Es ist eine kleine Sache, die in anderen Projekten oft fehlt.
Fertige Komponenten und Assets
Die Entwickler haben den shadcn/ui-Weg eingeschlagen. Anstatt eine schwere Komponentenbibliothek als Abhängigkeit einzubinden, verwendest du den topcoat ui Befehl. Er kopiert den Code für die Komponenten, die du brauchst (Buttons, Cards, Formulare), direkt in dein Projekt. Das ermöglicht es dir, das Design nach Belieben zu ändern, ohne gegen Library-Styles anzukämpfen. Alles basiert auf Tailwind CSS, das direkt in die Build-Pipeline integriert ist.
Das Arbeiten mit Bildern und Fonts ist ebenfalls vereinfacht:
Frameworks fügen Hashes zu Dateinamen für Caching hinzu und stellen sicher, dass Assets verfügbar sind.
Lohnt es sich jetzt schon
Topcoat sieht aus wie ein Versuch, ein „korrektes" Web-Framework für Rust zu machen, bei dem Tippen hilft, anstatt die Entwicklungsgeschwindigkeit zu behindern.
Für wen es definitiv ist:
- Diejenigen, die schnell einen Prototyp oder ein internes Tool in Rust bauen möchten.
- Entwickler, die die Lücke zwischen Backend und Frontend leid sind.
- Diejenigen, die das Tokio-Ökosystem schätzen und seinen architektonischen Entscheidungen vertrauen.
Das Projekt wächst gerade aktiv. Die Autoren planen, WebSocket-Support, Hintergrundjobs und sogar OpenAPI-Spezifikationsgenerierung hinzuzufügen. Wenn du nach einem Grund gesucht hast, etwas für das Web in Rust zu schreiben, ist vielleicht das Erscheinen von Topcoat genau dieses Zeichen.
Schau dir das tokio-rs/topcoat Repository an — es gibt eine ausgezeichnete Anleitung für den Einstieg. Aber denke daran: Das Projekt ist experimentell, daher ist die Verwendung für mission-critical Systeme noch etwas verfrüht.
Ähnliche Projekte