Crate wry

source · []
Expand description

Wry is a Cross-platform WebView rendering library.

To build a Window with WebView embedded, we could use application module to create EventLoop and the window. It’s a module that re-exports APIs from tao. Then use webview module to create the WebView from the Window. Here’s a minimum example showing how to create a hello world window and load the url to Tauri website.

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,
      _ => (),
    }
  });
}

Feature flags

Wry uses a set of feature flags to toggle several advanced features. file-drop, protocol, and tray are enabled by default.

  • file-drop: Enables with_file_drop_handler to control the behaviour when there are files interacting with the window. Enabled by default.
  • protocol: Enables with_custom_protocol to define custom URL scheme for handling tasks like loading assets. Enabled by default.
  • tray: Enables system tray and more menu item variants on Linux. This flag is enabled by default. You can still create those types if you disable it. They just don’t create the actual objects. We set this flag because some implementations require more installed packages.
  • ayatana-tray: Enable this if you wish to use more update libayatana-appindicator since libappindicator is no longer maintained. This flag is enabled by default. Disable this if you don’t want to install the libayatana-appindicator package.
  • gtk-tray: Enable this if you wish ot use libappindicator for tray on Linux. The package is supported on more Linux distributions, but it is not maintained anymore. Note that ayatana-tray and gtk-tray cannot be enabled at the same time, so default-features must be set to false.
  • devtools: Enables devtools on release builds. Devtools are always enabled in debug builds. On macOS, enabling devtools, reuires calling private apis so you should enabling this flag in release build if your app needs to publish to App Store.
  • transparent: Transparent background on macOS requires calling private functions. Avoid this in release build if your app needs to publish to App Store.
  • fullscreen: Fullscreen video and other media on macOS requires calling private functions. Avoid this in release build if your app needs to publish to App Store.
  • dox: Enables this in package.metadata.docs.rs section to skip linking some Linux libraries and prevent from building documentation on doc.rs fails.

Modules

Re-exported Tao APIs

WebView struct and associated types.

Enums

Errors returned by wry.

Represents any valid JSON value.

Type Definitions

Convenient type alias of Result type for wry.