Saltar al contenido

Integración experimental de Tauri con Verso

Así que, primero que nada, ¿qué es Verso? Verso es un navegador basado en Servo, un motor de renderizado de navegador web escrito en Rust

¿Por qué usar Verso en lugar de Servo directamente?

Sección titulada “¿Por qué usar Verso en lugar de Servo directamente?”

Creo que hay bastantes personas que han pensado en usar Servo pero se sintieron intimidadas por las complejas API y simplemente se rindieron, algo que sinceramente me pasó a mí también. Por eso, el objetivo de construir el webview de Verso es hacer que sea lo suficientemente fácil de entender y usar para que la gente realmente comience a experimentar y usarlo

El propio Servo está hecho para ser relativamente fácil de incrustar en comparación con otros navegadores, pero las API siguen siendo de un nivel demasiado bajo y es bastante desalentador de usar, puedes echar un vistazo al ejemplo mínimo para ejecutar Servo con Winit en (ten en cuenta que este ni siquiera es un ejemplo completamente funcional): https://github.com/servo/servo/blob/8d39d7706aee50971e848a5e31fc6bfd7ef552c1/components/servo/examples/winit_minimal.rs

Y en comparación con eso, la API de Verso se ve así, lo cual es mucho más fácil y ergonómico de usar

use std::env::current_exe;
use std::thread::sleep;
use std::time::Duration;
use url::Url;
use verso::VersoBuilder;
fn main() {
let versoview_path = current_exe().unwrap().parent().unwrap().join("versoview");
let controller = VersoBuilder::new()
.with_panel(true)
.maximized(true)
.build(versoview_path, Url::parse("https://example.com").unwrap());
loop {
sleep(Duration::MAX);
}
}

https://github.com/versotile-org/verso/blob/2e853d4f3f4cb88274daa211b7a2eb3bd1517115/verso/src/main.rs

Sin embargo, eso no quiere decir que la API de Servo sea mala, ya que necesitan admitir muchos más casos de uso mientras que nosotros solo la necesitamos para construir aplicaciones con Tauri

¡Así que hablemos de la integración con Tauri!

Elegimos integrar Verso y Tauri mediante un nuevo runtime personalizado tauri-runtime-verso por esta vez, esto es similar a nuestro runtime por defecto tauri-runtime-wry.

Con este enfoque, puedes intercambiar fácilmente el runtime y usar Tauri como lo harías normalmente:

use tauri_runtime_verso::{
INVOKE_SYSTEM_SCRIPTS, VersoRuntime, set_verso_path, set_verso_resource_directory,
};
fn main() {
// You need to set this to the path of the versoview executable
// before creating any of the webview windows
set_verso_path("../verso/target/debug/versoview");
// Set this to verso/servo's resources directory before creating any of the webview windows
// this is optional but recommended, this directory will include very important things
// like user agent stylesheet
set_verso_resource_directory("../verso/resources");
tauri::Builder::<VersoRuntime>::new()
// Make sure to do this or some of the commands will not work
.invoke_system(INVOKE_SYSTEM_SCRIPTS.to_owned())
.run(tauri::generate_context!())
.unwrap();
}

Solo ten en cuenta que aún no es tan rico en funciones ni tan potente como los backends actuales utilizados por Tauri en producción, pero aún así tiene mucho que ofrecer, y hemos creado un ejemplo que lo muestra en https://github.com/versotile-org/tauri-runtime-verso/tree/main/examples/api

  • Tenemos todas las funciones que ofrece la tauri-cli
  • Estamos utilizando un framework moderno, en este caso React
  • Tenemos nuestros plugins oficiales de log y opener, funcionan exactamente igual que si estuvieras usando Tauri con los otros backends
  • Las funciones de ventanas funcionan, incluyendo tamaño, posición, maximizar, minimizar, cerrar, …
  • La recarga rápida de CSS de Vite también funciona
  • El atributo data-tauri-drag-region funciona

En este momento, Verso y tauri-runtime-verso todavía están en desarrollo activo, por lo que tendremos que ir viendo sobre la marcha, pero sí tenemos algo planeado para hacer a continuación

Lanzar un ejecutable preconstruido de Verso fácil de usar para ayudar a las personas a comenzar con él de manera más rápida y sencilla, ya que actualmente necesitas compilar Verso tú mismo para comenzar

Además, si es posible, como objetivo a largo plazo, nos gustaría tener un Verso compartido permanente, similar a WebView2 en Windows que colocarías en el sistema y se actualizaría automáticamente, y se compartiría entre múltiples aplicaciones para que no tengas que incluir el navegador dentro de tu aplicación y así reducir significativamente el tamaño del paquete

Soporte para más funciones de ventanas y webview

Sección titulada “Soporte para más funciones de ventanas y webview”

Actualmente solo admitimos un pequeño subconjunto de funciones en Tauri, y nos gustaría expandir esto para incluir más cosas, y actualmente hemos planeado admitir decoraciones de ventanas, títulos de ventanas y transparencia

Script de inicialización sin archivos temporales

Sección titulada “Script de inicialización sin archivos temporales”

Actualmente Servo solo puede tomar un directorio de userscripts para ejecutar al iniciar el documento, lo cual está bien, pero para el caso de uso de Tauri, nos gustaría hacer esto de forma programática sin la ayuda de archivos, ya que eso podría resultar en archivos temporales sobrantes que nunca limpiamos

¡Tenemos una PR fusionada en Servo hace solo unos días y solo deberíamos necesitar usarla en Verso y luego en tauri-runtime-verso, así que esto llegará pronto!

Tauri está hecho en gran medida con el supuesto de las librerías webview subyacentes, por lo que ahora mismo hay muy pocas formas de usar muchas funciones específicas de Verso, por ejemplo, configurar la ruta del ejecutable de Verso y el directorio de recursos se está haciendo a través de variables globales, lo cual no es realmente aplicable a características específicas de ventanas (por ejemplo, configurar esquinas redondeadas), por lo que nos gustaría añadir soporte para eso a continuación

¡Al final queremos agradecer a NLNet por hacer posible este proyecto al apoyarlo financieramente a través de subvenciones!


© 2026 Colaboradores de Tauri. CC-BY / MIT