>_ DevTrendsde

Sprache

Start

Sprachen

Bereiche

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicherheit
Rust

HTML und CSS in Rust ohne aufgeblähtes Chromium rendern

Jedes Mal, wenn jemand eine kleine Desktop-App mit Electron verpackt, weint irgendwo ein RAM-Baustein. Selbst Alternativen wie Tauri sind noch auf die System-WebView angewiesen, die auf verschiedenen Betriebssystemen ihre eigenen Eigenheiten hat. Die Entwickler des Dioxus-Frameworks haben sich entschieden, den schwierigen Weg einzuschlagen und ihre eigene leichtgewichtige Rendering-Engine in Rust zu schreiben. Sie nannten das Projekt Blitz.

screenshot

Warum eine weitere Engine entwickeln

Chromium oder WebKit enthalten Gigabytes an Code. Sie beinhalten Unterstützung für WebGL, WebSockets, WebRTC, Bluetooth, IndexedDB und Hunderte von Browser-APIs. Aber wenn man nur eine Benutzeroberfläche basierend auf HTML und CSS rendern möchte, wird fast alles davon zu unnötigem Ballast.

Blitz entfernt alles Unnötige. Die Engine konzentriert sich auf eine einzige Aufgabe: HTML/CSS parsen, das Seitenlayout berechnen und das Ergebnis auf dem Bildschirm oder GPU-Textur ausgeben. Es gibt standardmäßig keine JavaScript-Engine. Der Netzwerk-Stack ist minimal und kann Ressourcen nur über HTTP laden, wenn man es explizit möchte. Die Systeminteraktion bleibt im eigenen Rust-Code.

Modulare Architektur

Die Blitz-Ersteller haben nicht bei Null angefangen. Sie haben bewährte Komponenten aus der Open-Source-Community genommen und zu einem einheitlichen System zusammengefügt:

  • CSS-Parsing und Stilberechnung wird von Stylo übernommen – der CSS-Engine von Mozilla Firefox und Servo.
  • Flexbox- und CSS-Grid-Layoutberechnungen werden von der Taffy-Bibliothek gehandhabt.
  • Die Textrendering erfolgt mit Parley.
  • HTML-Parsing wird von html5ever erledigt.
  • Die Grafikrendering erfolgt durch die AnyRender-Abstraktion und Vello.

Diese Struktur bietet Flexibilität. Wenn man HTML parsen und Elementdimensionen bestimmen möchte, ohne auf den Bildschirm zu rendern, benötigt man nur die Crates blitz-dom und blitz-html. Für die Erstellung nativer Dioxus-Anwendungen integriert man dioxus-native.

So sieht es im Code aus

Das Projekt befindet sich in einer frühen Pre-Alpha-Phase, daher muss man es aus dem Quellcode bauen. Die Beispiele kann man in einer Minute ausprobieren:

git clone https://github.com/DioxusLabs/blitz
cd blitz
cargo run --release --package browser

Das Repository enthält mehrere Demo-Skripte. Zum Beispiel kann man einen einfachen Markdown-Viewer direkt von der Konsole aus ausführen:

cargo run --release --package readme ./README.md

Für diejenigen, die bereits in Dioxus schreiben und die WebView-Abhängigkeit eliminieren möchten, bietet das Repository einen nativen Build. Man fügt einfach einen direkten Link zur Git-Version in Cargo.toml hinzu:

[dependencies]
dioxus-native = { git = "https://github.com/DioxusLabs/blitz", features = ["prelude"] }

Anschließend ändert sich der Standard-Import use dioxus::prelude::* zu use dioxus_native::prelude::*, und die UI wird über Blitz gerendert.

Einschränkungen und aktueller Stand

Kommerzielle Produkte mit Blitz zu entwickeln ist noch verfrüht. Die Entwickler warnen ehrlich vor zahlreichen Bugs und nicht implementierten Funktionen. Basis-CSS-Selektoren, Flexbox, einfache Formulare und CSS-Variablen funktionieren bereits. Komplexe Media-Queries oder bestimmte Layout-Attribute können sich jedoch unvorhersehbar verhalten.

Das Projekt hat jedoch auch starke Seiten. Die Integration mit der AccessKit-Bibliothek bietet standardmäßig Unterstützung für Screenreader und Barrierefreiheitssysteme. Und das Rendering über WGPU ermöglicht das Einbetten von HTML-Interfaces direkt in Spiel-Engines oder 3D-Szenen.

Lohnt es sich, es auszuprobieren

Blitz ist als Werkzeug für diejenigen konzipiert, die genug von schweren Browser-Wrappers in der Desktop-Entwicklung haben. Es wird nicht so bald ein vollständiger Ersatz für Electron werden.

Zunächst wird das Projekt Rust-Systemprogrammierer, Grafik-Engine-Forscher und Dioxus-Ökosystem-Enthusiasten ansprechen. Die Entwicklung des Repositories zu verfolgen lohnt sich schon allein deshalb, um zu sehen, wie sich Stylo und Taffy zu einer leichtgewichtigen Alternative zu CEF entwickeln.

Ähnliche Projekte