Cross-platform WebView rendering library in Rust that supports all major desktop platforms like Windows, macOS, and Linux.
WRY connects the web engine on each platform and provides easy to use and unified interface to render WebView. It also re-exports TAO as a module for event loop and window creation.
The minimum example to create a Window and browse a website looks like following:
fn main() -> wry::Result<()> {
use wry::{
application::{
event::{Event, StartCause, WindowEvent},
event_loop::{ControlFlow, EventLoop},
window::WindowBuilder,
},
webview::WebViewBuilder,
};
let event_loop = EventLoop::new();
let window = WindowBuilder::new()
.with_title("Hello World")
.build(&event_loop)?;
let _webview = WebViewBuilder::new(window)?
.with_url("https://tauri.studio")?
.build()?;
event_loop.run(move |event, _, control_flow| {
*control_flow = ControlFlow::Wait;
match event {
Event::NewEvents(StartCause::Init) => println!("Wry has started!"),
Event::WindowEvent {
event: WindowEvent::CloseRequested,
..
} => *control_flow = ControlFlow::Exit,
_ => (),
}
});
}
There are also more samples under examples
, you can enter commands like the following to try them:
cargo run --example multi_window
For more information, please read the documentation below.
All platforms use TAO to build the window, and wry re-exports it as an application module. Here is the underlying web engine each platform uses, and some dependencies you might need to install.
Tao uses gtk-rs and its related libraries for window creation and wry also needs WebKitGTK for WebView. So please make sure the following packages are installed:
sudo pacman -S webkit2gtk
sudo pacman -S libappindicator-gtk3 # For tray feature
The libayatana-indicator
package can be installed from the Arch User Repository (AUR).
sudo apt install libwebkit2gtk-4.0-dev
# For tray feature, choose one of following package
sudo apt install libayatana-appindicator3-dev
sudo apt install libappindicator3-dev
sudo dnf install gtk3-devel webkit2gtk3-devel
# For tray feature
sudo dnf install libappindicator-gtk3-devel
Fedora does not have the Ayatana package yet, so you need to use the GTK one, see the feature flags documentation.
WebKit is native on macOS so everything should be fine.
If you are cross-compiling for macOS using osxcross and encounter a runtime panic like Class with name WKWebViewConfiguration could not be found
it's possible that WebKit.framework
has not been linked correctly, to fix this set the RUSTFLAGS
environment variable:
RUSTFLAGS="-l framework=WebKit" cargo build --target=x86_64-apple-darwin --release
WebView2 provided by Microsoft Edge Chromium is used. So wry supports Windows 7, 8, 10 and 11.
We have experimental support of mobile ends. If you are interested in playing or hacking it, please follow this note.
When building for Android, WRY generates kotlin files that are needed to run WRY on Android and you have to set the following environment variables:
WRY_ANDROID_PACKAGE
which is the revers domain name of your android project and the app name in snake_case for example:com.wry.example.wry_app
WRY_ANDROID_LIBRARY
for example: if your cargo project has a lib namewry_app
, it will generatelibwry_app.so
so you se this env var towry_app
WRY_ANDROID_KOTLIN_FILES_OUT_DIR
for example:path/to/app/src/main/kotlin/com/wry/example
You can skip setting these environment variables if you are using the WRY template from our cargo-mobile
fork.
Apache-2.0/MIT