Technologie
In Rust gebaut.
Kein WordPress. Kein PHP. Kein JavaScript-Framework. Diese Website ist — vom HTTP-Server bis zur Animation im Browser — vollständig in Rust geschrieben, typsicher kompiliert und als WebAssembly ausgeliefert.
Sprachanteile
Beim Build aus dem eigenen Quellbaum gemessen — inklusive dieser Seite.
Was nicht drin ist
Das HTML entsteht zur Laufzeit aus Rust-Code. Das einzige JavaScript ist die von der Rust→WebAssembly-Toolchain generierte Ladebrücke — davon schreiben wir keine Zeile selbst.
Ausgeliefert als WebAssembly (WASI)
Diese Seite läuft nicht auf einem Webserver im üblichen Sinn, sondern auf einer Bare-Metal-Appliance: ein einziger Rust-Prozess auf eigener Hardware macht dort DNS, DHCP, Routing und VPN — ohne Betriebssystem-Ballast, ohne Container, das gesamte System im Arbeitsspeicher.
Was Sie gerade lesen, rendert eine WASI-Komponente — WebAssembly außerhalb des Browsers. Der Sinn dahinter ist nicht Technikverliebtheit, sondern eine andere Verteilung von Vertrauen: Anwendungscode läuft üblicherweise mit allen Rechten des Prozesses, der ihn ausführt. Eine WASI-Komponente bekommt nichts — kein Dateisystem, kein Netzwerk, keine Umgebungsvariablen — außer dem, was die Schnittstelle ausdrücklich hereinreicht.
Praktisch heißt das: Der Code, der Ihre Anfrage beantwortet, kann gar nicht auf Zugangsdaten, Schlüssel oder fremde Daten zugreifen — nicht, weil es ihm verboten ist, sondern weil ihm die Fähigkeit dazu fehlt. Genau diese Trennung ziehen wir konsequent durch: der privilegierte Kern macht ausschließlich das Kernnahe (Netzwerk, Sockets, Dateien), die Logik läuft eingesperrt.
- Seiten als WebAssembly-Komponente. Was Sie gerade lesen, rendert eine WASI-Komponente in einer Sandbox (wasmtime). Sie hat weder Datei- noch Netzzugriff und bekommt ausschließlich das, was die Schnittstelle vorsieht. Ein Fehler darin kann den Rest des Systems nicht beschädigen.
- Austauschbar im laufenden Betrieb. Eine neue Fassung der Seite ist eine neue
.wasm-Datei — sie wird abgelegt und übernommen, ohne den Dienst zu stoppen. Mehrere Auftritte laufen nebeneinander, jeder in eigener Sandbox. - Kein offener Port. Die Appliance ist aus dem Internet nicht erreichbar. Anfragen kommen über einen vorgelagerten Reverse Proxy durch einen WireGuard-Tunnel — die Angriffsfläche der Box selbst ist damit null.
- Dieselbe Codebasis. Es gibt keinen zweiten Renderer und keine Kopie der Inhalte: die Komponente führt genau die Leptos-Komponenten aus, die auch im Container laufen.
Eingesetzte Crates
Auf ein Crate zeigen blendet die ausführliche Erklärung ein. Ein Klick öffnet es auf crates.io — der offiziellen Paketregistrierung von Rust, inklusive Quellcode und Dokumentation. Nachlesen ausdrücklich erwünscht.
- leptosReaktives Fullstack-UI (SSR + WASM)Leptos ist das Fullstack-Framework, auf dem diese Website aufbaut. Die Oberfläche wird als reaktive Komponenten in Rust beschrieben und sowohl auf dem Server gerendert (für eine schnelle erste Auslieferung und für Suchmaschinen) als auch im Browser als WebAssembly ausgeführt. Dieselbe Rust-Codebasis läuft damit auf beiden Seiten — ganz ohne separates JavaScript-Frontend.
- leptos_routerRouting zwischen den SeitenDer Router von Leptos bestimmt, welche Seite zu welcher Adresse gehört. Seitenwechsel geschehen im Browser ohne vollständiges Neuladen, sodass die Navigation flüssig bleibt — während der Server jede Adresse zusätzlich direkt ausliefern kann.
- leptos_metaTitel und Meta-Tags im <head>Verwaltet die Angaben im <head> des Dokuments: Seitentitel, Meta-Beschreibung und weitere Kopfdaten. So erhält jede Seite die richtigen Informationen für Browser-Tab, Suchmaschinen und Link-Vorschauen.
- leptos_config
- serdeSerialisierung der Inhalteserde ist das Standardwerkzeug in Rust, um Datenstrukturen zwischen Rust-Typen und Formaten wie TOML zu übersetzen. Hier verwandelt es die als Text hinterlegten Inhalte in typsichere Rust-Objekte — und bei Bedarf wieder zurück.
- serde_jsonJSON-Serialisierungserde_json ist die JSON-Umsetzung von serde. Die Nachrichten der verschlüsselten API werden als JSON transportiert; dieses Crate wandelt sie zwischen Rust-Strukturen und JSON hin und zurück.
- tomlInhalte als Code einlesenTOML ist ein schlankes, gut lesbares Textformat. Die Inhalte dieser Website liegen als TOML-Dateien vor; dieses Crate liest sie ein. Texte lassen sich so ändern, ohne Programmcode anzufassen — Inhalt als Code.
- wit-bindgenTypisierte Schnittstelle zur Sandbox (WIT)
- any_spawnerAusführungsschleife für asynchrone Aufgaben
- futuresBausteine für asynchronen Code
- ml-kemPost-Quantum-Schlüsselkapselung (ML-KEM-1024, FIPS 203)ml-kem (RustCrypto) implementiert ML-KEM-1024 nach FIPS 203 — das von der US-Normungsbehörde NIST standardisierte Post-Quantum-Verfahren zur Schlüsselkapselung. Damit einigen sich Browser und Server auf ein gemeinsames Geheimnis, das auch gegen künftige Quantencomputer sicher sein soll. Es ist die Basis unserer zusätzlich verschlüsselten API.
- kemTrait-Abstraktion für Schlüsselkapselung (KEM)Die schlanke Trait-Abstraktion (Encapsulate/Decapsulate), über die wir ml-kem ansprechen — sie hält den Krypto-Code sauber austauschbar.
- chacha20poly1305Authentisierte Verschlüsselung (AEAD)ChaCha20-Poly1305 ist ein modernes AEAD-Verfahren (authentisierte Verschlüsselung). Es verschlüsselt jede API-Nachricht und stellt zugleich sicher, dass sie unterwegs nicht unbemerkt verändert werden kann.
- hkdfSchlüsselableitung (HKDF)HKDF leitet aus dem rohen ML-KEM-Geheimnis einen sauberen, zweckgebundenen Sitzungsschlüssel ab (RFC 5869) — statt das Geheimnis direkt zu verwenden. Das schafft Domain-Separation und eine klare Prüf-Spur.
- sha2SHA-256-Hashsha2 stellt die SHA-256-Hashfunktion bereit, auf der die Schlüsselableitung der verschlüsselten API (HKDF-SHA256) aufsetzt.
- rand_coreKryptografischer Zufall (OsRng)rand_core liefert die kryptografisch sichere Zufallsquelle (OsRng). Im Browser stammt der Zufall aus der Web-Crypto-API — die Grundlage für Schlüssel und Nonces.
- base64Base64-Kodierungbase64 kodiert die binären Krypto-Bausteine (Schlüssel, Ciphertext, Nonce) als Text, damit sie sich bequem als JSON übertragen lassen.
Verschlüsselte API (Post-Quantum)
Klassische Web-Verschlüsselung (RSA, elliptische Kurven) gilt heute als sicher — bis leistungsfähige Quantencomputer sie brechen. Wer heute schon mitgeschnittenen Datenverkehr aufbewahrt, könnte ihn dann rückwirkend entschlüsseln („harvest now, decrypt later“). Deshalb sichern wir die Verbindung zwischen Ihrem Browser und unserem Server zusätzlich mit einem Verfahren, das auch Quantencomputern standhalten soll.
Zum Einsatz kommt ML-KEM-1024 (FIPS 203) — das von der US-Normungsbehörde NIST standardisierte Post-Quantum-Verfahren für den Schlüsselaustausch. Diese Schicht liegt zusätzlich über der ohnehin aktiven TLS-Verschlüsselung: ein doppelter Boden, kein Ersatz.
- Schlüsselkapselung. Browser und Server einigen sich über ML-KEM-1024 auf ein gemeinsames Geheimnis — nach heutigem Stand auch gegen Quantencomputer sicher.
- Schlüsselableitung. Aus diesem Geheimnis wird per HKDF-SHA256 ein frischer Sitzungsschlüssel abgeleitet.
- Verschlüsselung. Jede Nachricht wird mit ChaCha20-Poly1305 authentisiert verschlüsselt. Der Client-Schlüssel ist fest an den Inhalt gebunden — so lässt sich die Antwort nicht heimlich umlenken.
Der folgende Handshake läuft gerade live in Ihrem Browser:
Kanal wird aufgebaut…
Wie es zusammenspielt
- Server. Ein in Rust kompiliertes axum-Backend rendert jede Seite vorab (SSR).
- Inhalte. Texte liegen als Code vor und werden beim Start in eine In-Memory-Datenbank geladen.
- Browser. Dasselbe Rust-Programm läuft als WebAssembly weiter und übernimmt die Seite (Hydration).
- Grafik. Das Splitterfeld zeichnet Rust direkt auf ein Canvas — kein Bild, kein Video.
- Deploy. Jeder Push baut den Rust-Container neu und rollt ihn automatisch aus.
Was der Build kostet
Gemessen beim Bauen genau dieses Containers — nicht geschätzt und nicht aus einem Testlauf übernommen.
Kennzahlen nur im ausgelieferten Container verfügbar.
Wie schnell es bei Ihnen lud
Kein Labor, kein Durchschnittswert: Diese drei Zahlen hat Ihr eigener Browser gemessen.
…
Das HTML kommt fertig gerendert vom Server — lesbar, noch bevor das WebAssembly überhaupt geladen ist. Deshalb steht die Seite auch dann, wenn das WASM nie ankommt.
Eine Website in Rust zu bauen ist ungewöhnlich — und genau das ist der Punkt. Wer eine Homepage so umsetzt, baut auch Ihre Systeme mit derselben Sorgfalt.