VaultTools mit Rust und WebAssembly im Browser
Videozusammenfassung ansehen
45+ Tools, kein Datei-Backend. Die Verarbeitung laeuft direkt im Browser-Tab.
Dieser Beitrag zeigt die technische Architektur hinter VaultTools.
Warum Rust
Rust war fuer dieses Ziel die pragmatischste Wahl:
- Speichersicherheit ohne Garbage-Collector
- Sehr gute Wasm-Toolchain (
wasm32-unknown-unknown,wasm-bindgen,wasm-pack) - Reife Crates fuer Bilder, PDF, Text und Datenformate
- Gute Performance bei kompakten Binaries
Architektur in 5 Crates
Statt eines monolithischen Moduls nutzen wir 5 getrennte Wasm-Crates:
image-toolspdf-toolstext-toolsdev-toolsfile-tools
Vorteil: Tool-spezifisches Laden. Beim JSON-Formatter laedt der Browser kein PDF-Processing.
Build-Pipeline
Die Wasm-Builds laufen ueber ein Skript, das je Kategorie wasm-pack build --target web --release ausfuehrt und Artefakte nach site/public/wasm/ kopiert.
So koennen Astro-Seiten die Module als statische Assets laden.
Wasm-Laden in Astro
Tool-Seiten initialisieren Wasm dynamisch im Browser:
const wasm = await import('/wasm/pdf-tools/pdf_tools.js');
await wasm.default();
Danach sind Rust-Funktionen aus JavaScript direkt nutzbar.
Datei-Pipeline im Browser
Der Datenfluss ist bei Datei-Tools konsistent:
- Datei lokal einlesen (
ArrayBuffer) - Bytes an Wasm-Funktion uebergeben (
Uint8Array) - Ergebnisbytes zurueck erhalten
Bloberzeugen- Download lokal ausloesen
Keine Upload-Requests fuer die Nutzdaten.
Harte Probleme in der Praxis
Einige konkrete Baustellen:
- Multi-File-Operationen brauchen Builder-Patterns an der JS-Wasm-Grenze
- PDF-Verarbeitung hat enge Versionsabhaengigkeiten (zum Beispiel
lopdf) - Sync-Wasm blockiert den Main Thread, daher UI-Feedback mit doppeltem
requestAnimationFrame - Font-Subsetting reduziert Binary-Groessen fuer Text-Watermarking deutlich
- Spezialfaelle wie HEIC koennen hybride JS-und-Wasm-Loesungen erfordern
Performance
Lokale Verarbeitung spart Upload- und Download-Latenz. Bei typischen Dateien ist der Netzwerkanteil bei Server-Tools groesser als die eigentliche Rechenzeit.
Mit Browser-Cache werden wiederholte Aufrufe zusaetzlich schneller.
Fazit
Rust plus WebAssembly erlaubt leistungsfaehige Datei-Tools mit klarer Datenschutz-Eigenschaft durch Architektur:
- Verarbeitung lokal
- keine Datei-Uploads
- verifizierbar im Network-Tab
Genau dieser Ansatz ist die Basis fuer alle VaultTools-Datei-Workflows.