>_ DevTrendses

Idioma

Inicio

Lenguajes

Secciones

Frontend Backend Móvil DevOps AI / ML GameDev Blockchain Embebidos Seguridad
Rust

Cómo renderizar HTML y CSS en Rust sin un Chromium inflado

Cada vez que alguien empaqueta una pequeña aplicación de escritorio con Electron, en algún lugar una barra de RAM llora. Incluso alternativas como Tauri todavía dependen del WebView del sistema, que tiene sus propias peculiaridades en diferentes sistemas operativos. Los desarrolladores del framework Dioxus decidieron tomar el camino difícil y escribir su propio motor de renderizado ligero en Rust. Llamaron al proyecto Blitz.

captura de pantalla

Por qué construir otro motor

Chromium o WebKit contienen gigabytes de código. Incluyen soporte para WebGL, WebSockets, WebRTC, Bluetooth, IndexedDB y cientos de APIs del navegador. Pero si solo necesitas renderizar una interfaz de usuario basada en HTML y CSS, casi todo eso se convierte en lastre innecesario.

Blitz elimina todo lo innecesario. El motor se enfoca en una sola tarea: analizar HTML/CSS, calcular el diseño de la página y mostrar el resultado en la pantalla o textura GPU. No hay motor JavaScript por defecto. La pila de red es mínima y solo puede cargar recursos sobre HTTP si explícitamente lo deseas. La interacción con el sistema permanece en tu código Rust.

Arquitectura modular

Los creadores de Blitz no empezaron desde cero. Tomaron componentes probados de la comunidad de código abierto y los ensamblaron en un sistema unificado:

  • El análisis CSS y el cálculo de estilos es manejado por Stylo — el motor CSS de Mozilla Firefox y Servo.
  • Los cálculos de diseño Flexbox y CSS Grid son manejados por la biblioteca Taffy.
  • El renderizado de texto se realiza usando Parley.
  • El análisis HTML es manejado por html5ever.
  • El renderizado gráfico ocurre a través de la abstracción AnyRender y Vello.

Esta estructura proporciona flexibilidad. Si necesitas analizar HTML y determinar las dimensiones de los elementos sin renderizar en pantalla, solo necesitas los crates blitz-dom y blitz-html. Para construir aplicaciones nativas Dioxus, integras dioxus-native.

Cómo se ve en código

El proyecto está en pre-alfa temprana, así que necesitarás compilarlo desde el código fuente. Puedes probar los ejemplos en un minuto:

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

El repositorio contiene varios scripts de demostración. Por ejemplo, puedes ejecutar un visor simple de Markdown directamente desde la consola:

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

Para quienes ya escriben en Dioxus y quieren eliminar la dependencia de WebView, el repositorio ofrece una compilación nativa. Simplemente añade un enlace directo a la versión git en Cargo.toml:

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

Después de eso, la importación estándar use dioxus::prelude::* cambia a use dioxus_native::prelude::*, y la interfaz de usuario se renderiza a través de Blitz.

Limitaciones y estado actual

Construir productos comerciales con Blitz todavía es prematuro. Los desarrolladores advierten honestamente sobre numerosos errores y características no implementadas. Los selectores CSS básicos, Flexbox, formularios simples y variables CSS ya funcionan. Sin embargo, consultas de medios complejas o atributos de diseño específicos pueden comportarse de manera impredecible.

El proyecto tiene algunos puntos fuertes, sin embargo. La integración con la biblioteca AccessKit proporciona soporte de lector de pantalla y sistema de accesibilidad de serie. Y el renderizado a través de WGPU permite incrustar interfaces HTML directamente en motores de juegos o escenas 3D.

¿Vale la pena probarlo?

Blitz está diseñado como una herramienta para quienes están hartos de los envoltorios pesados del navegador en el desarrollo de escritorio. No se convertirá en un reemplazo completo de Electron en el corto plazo.

Por ahora, el proyecto atraerá a programadores de sistemas Rust, investigadores de motores gráficos y entusiastas del ecosistema Dioxus. Seguir el desarrollo del repositorio vale la pena si solo es para ver cómo Stylo y Taffy evolucionan hacia una alternativa ligera a CEF.

Proyectos relacionados