Come Renderizzare HTML e CSS in Rust Senza un Chromium Ingombrante
Ogni volta che qualcuno impacchetta una piccola app desktop con Electron, da qualche parte un bastoncino di RAM piange. Anche alternative come Tauri dipendono ancora dal WebView di sistema, che ha le sue stranezze su diversi sistemi operativi. Gli sviluppatori del framework Dioxus hanno deciso di percorrere la strada più difficile e scrivere il proprio motore di rendering leggero in Rust. Hanno chiamato il progetto Blitz.

Perché Costruire un Altro Motore
Chromium o WebKit contengono gigabyte di codice. Includono il supporto per WebGL, WebSockets, WebRTC, Bluetooth, IndexedDB e centinaia di API del browser. Ma se hai solo bisogno di renderizzare un'interfaccia utente basata su HTML e CSS, quasi tutto ciò diventa zavorra non necessaria.
Blitz elimina tutto ciò che è superfluo. Il motore si concentra su un singolo compito: analizzare HTML/CSS, calcolare il layout della pagina e produrre il risultato sullo schermo o su una texture GPU. Non c'è motore JavaScript per impostazione predefinita. Lo stack di rete è minimo e può caricare risorse solo tramite HTTP se lo desideri esplicitamente. L'interazione con il sistema rimane nel codice Rust.
Architettura Modulare
I creatori di Blitz non sono partiti da zero. Hanno preso componenti collaudati dalla comunità open-source e li hanno assemblati in un sistema unificato:
- L'analisi CSS e il calcolo degli stili sono gestiti da Stylo — il motore CSS di Mozilla Firefox e Servo.
- I calcoli di layout Flexbox e CSS Grid sono gestiti dalla libreria Taffy.
- Il rendering del testo viene eseguito utilizzando Parley.
- L'analisi HTML è gestita da html5ever.
- Il rendering grafico avviene attraverso l'astrazione AnyRender e Vello.
Questa struttura offre flessibilità. Se hai bisogno di analizzare HTML e determinare le dimensioni degli elementi senza renderizzare sullo schermo, ti servono solo i crate blitz-dom e blitz-html. Per costruire applicazioni Dioxus native, integri dioxus-native.
Come Appare nel Codice
Il progetto è in fase pre-alpha iniziale, quindi dovrai compilarlo da sorgente. Puoi provare gli esempi in un minuto:
git clone https://github.com/DioxusLabs/blitz
cd blitz
cargo run --release --package browser
Il repository contiene diversi script demo. Ad esempio, puoi eseguire un semplice visualizzatore Markdown direttamente dalla console:
cargo run --release --package readme ./README.md
Per chi già scrive in Dioxus e vuole eliminare la dipendenza da WebView, il repository offre una build nativa. Aggiungi semplicemente un link diretto alla versione git in Cargo.toml:
[dependencies]
dioxus-native = { git = "https://github.com/DioxusLabs/blitz", features = ["prelude"] }
Dopo di ciò, l'import standard use dioxus::prelude::* cambia in use dioxus_native::prelude::*, e l'interfaccia utente viene renderizzata tramite Blitz.
Limitazioni e Stato Attuale
Creare prodotti commerciali con Blitz è ancora prematuro. Gli sviluppatori avvertono onestamente riguardo numerosi bug e funzionalità non implementate. Selettori CSS di base, Flexbox, moduli semplici e variabili CSS funzionano già. Tuttavia, query multimediali complesse o attributi di layout specifici potrebbero comportarsi in modo imprevedibile.
Il progetto ha comunque alcuni punti di forza. L'integrazione con la libreria AccessKit fornisce supporto per screen reader e sistema di accessibilità out of the box. E il rendering tramite WGPU permette di incorporare interfacce HTML direttamente nei motori di gioco o nelle scene 3D.
Vale la Pena Provarlo
Blitz è progettato come strumento per chi è stanco di wrapper browser pesanti nello sviluppo desktop. Non diventerà un sostituto completo di Electron a breve.
Per ora, il progetto interesserà programmatori di sistemi Rust, ricercatori di motori grafici e appassionati dell'ecosistema Dioxus. Seguire lo sviluppo del repository vale la pena anche solo per vedere come Stylo e Taffy evolvono in un'alternativa leggera a CEF.
Progetti correlati