File: README.md
Wry is a cross-platform WebView rendering library.
The webview requires a running event loop and a window type that implements [HasWindowHandle],
or a gtk container widget if you need to support X11 and Wayland.
You can use a windowing library like tao or winit.
Examples
This example leverages the [HasWindowHandle] and supports Windows, macOS, iOS, Android and Linux (X11 Only).
See the following example using winit:
#[derive(Default)]
struct App {
window: Option<Window>,
webview: Option<wry::WebView>,
}
impl ApplicationHandler for App {
fn resumed(&mut self, event_loop: &ActiveEventLoop) {
let window = event_loop.create_window(Window::default_attributes()).unwrap();
let webview = WebViewBuilder::new()
.with_url("https://tauri.app")
.build(&window)
.unwrap();
self.window = Some(window);
self.webview = Some(webview);
}
fn window_event(&mut self, _event_loop: &ActiveEventLoop, _window_id: WindowId, event: WindowEvent) {}
}
let event_loop = EventLoop::new().unwrap();
let mut app = App::default();
event_loop.run_app(&mut app).unwrap();If you also want to support Wayland too, then we recommend you use [WebViewBuilderExtUnix::build_gtk] on Linux.
See the following example using tao:
let event_loop = EventLoop::new();
let window = WindowBuilder::new().build(&event_loop).unwrap();
let builder = WebViewBuilder::new().with_url("https://tauri.app");
#[cfg(not(target_os = "linux"))]
let webview = builder.build(&window).unwrap();
#[cfg(target_os = "linux")]
let webview = builder.build_gtk(window.gtk_window()).unwrap();Child webviews
You can use [WebViewBuilder::build_as_child] to create the webview as a child inside another window. This is supported on
macOS, Windows and Linux (X11 Only).
#[derive(Default)]
struct App {
window: Option<Window>,
webview: Option<wry::WebView>,
}
impl ApplicationHandler for App {
fn resumed(&mut self, event_loop: &ActiveEventLoop) {
let window = event_loop.create_window(Window::default_attributes()).unwrap();
let webview = WebViewBuilder::new()
.with_url("https://tauri.app")
.with_bounds(Rect {
position: LogicalPosition::new(100, 100).into(),
size: LogicalSize::new(200, 200).into(),
})
.build_as_child(&window)
.unwrap();
self.window = Some(window);
self.webview = Some(webview);
}
fn window_event(&mut self, _event_loop: &ActiveEventLoop, _window_id: WindowId, event: WindowEvent) {}
}
let event_loop = EventLoop::new().unwrap();
let mut app = App::default();
event_loop.run_app(&mut app).unwrap();If you want to support X11 and Wayland at the same time, we recommend using
[WebViewExtUnix::new_gtk] or [WebViewBuilderExtUnix::build_gtk] with [gtk::Fixed].
let event_loop = EventLoop::new();
let window = WindowBuilder::new().build(&event_loop).unwrap();
let builder = WebViewBuilder::new()
.with_url("https://tauri.app")
.with_bounds(Rect {
position: LogicalPosition::new(100, 100).into(),
size: LogicalSize::new(200, 200).into(),
});
#[cfg(not(target_os = "linux"))]
let webview = builder.build_as_child(&window).unwrap();
#[cfg(target_os = "linux")]
let webview = {
let vbox = window.default_vbox().unwrap(); // tao adds a gtk::Box by default
let fixed = gtk::Fixed::new();
fixed.show_all();
vbox.pack_start(&fixed, true, true, 0);
builder.build_gtk(&fixed).unwrap()
};Platform Considerations
Here is the underlying web engine each platform uses, and some dependencies you might need to install.
Linux
WebKitGTK is used to provide webviews on Linux which requires GTK,
so if the windowing library doesn't support GTK (as in winit)
you'll need to call [gtk::init] before creating the webview and then call [gtk::main_iteration_do] alongside
your windowing library event loop.
#[derive(Default)]
struct App {
webview_window: Option<(Window, WebView)>,
}
impl ApplicationHandler for App {
fn resumed(&mut self, event_loop: &ActiveEventLoop) {
let window = event_loop.create_window(Window::default_attributes()).unwrap();
let webview = WebViewBuilder::new()
.with_url("https://tauri.app")
.build(&window)
.unwrap();
self.webview_window = Some((window, webview));
}
fn window_event(&mut self, _event_loop: &ActiveEventLoop, _window_id: WindowId, event: WindowEvent) {}
// Advance GTK event loop <!----- IMPORTANT
fn about_to_wait(&mut self, _event_loop: &ActiveEventLoop) {
#[cfg(target_os = "linux")]
while gtk::events_pending() {
gtk::main_iteration_do(false);
}
}
}
let event_loop = EventLoop::new().unwrap();
let mut app = App::default();
event_loop.run_app(&mut app).unwrap();Linux Dependencies
Arch Linux / Manjaro:
sudo pacman -S webkit2gtk-4.1Debian / Ubuntu:
sudo apt install libwebkit2gtk-4.1-devFedora
sudo dnf install gtk3-devel webkit2gtk4.1-develNix & NixOS
# shell.nix
let
# Unstable Channel | Rolling Release
pkgs = import (fetchTarball("channel:nixpkgs-unstable")) { };
packages = with pkgs; [
pkg-config
webkitgtk_4_1
];
in
pkgs.mkShell {
buildInputs = packages;
}nix-shell shell.nixGUIX
;; manifest.scm
(specifications->manifest
'("pkg-config" ; Helper tool used when compiling
"webkitgtk" ; Web content engine fot GTK+
))guix shell -m manifest.scmmacOS
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 --releaseWindows
WebView2 provided by Microsoft Edge Chromium is used. So wry supports Windows 7, 8, 10 and 11.
Android
In order for wry to be able to create webviews on Android, there are a few requirements that your application needs to uphold:
- You need to set a few environment variables that will be used to generate the necessary kotlin
files that you need to include in your Android application for wry to function properly.WRY_ANDROID_PACKAGE: which is the reversed domain name of your android project and the app name in snake_case, for example,com.wry.example.wry_appWRY_ANDROID_LIBRARY: for example, if your cargo project has a lib namewry_app, it will generatelibwry_app.soso you set this env var towry_appWRY_ANDROID_KOTLIN_FILES_OUT_DIR: for example,path/to/app/src/main/kotlin/com/wry/example
- Your main Android Activity needs to inherit
AppCompatActivity, preferably it should use the generatedWryActivityor inherit it. - Your Rust app needs to call
wry::android_setupfunction to setup the necessary logic to be able to create webviews later on. - Your Rust app needs to call
wry::android_binding!macro to setup the JNI functions that will be called byWryActivityand various other places.
It is recommended to use the tao crate as it provides maximum compatibility with wry.
#[cfg(target_os = "android")]
{
tao::android_binding!(
com_example,
wry_app,
WryActivity,
wry::android_setup, // pass the wry::android_setup function to tao which will be invoked when the event loop is created
_start_app
);
wry::android_binding!(com_example, ttt);
}If this feels overwhelming, you can just use the preconfigured template from cargo-mobile2.
For more information, check out MOBILE.md.
Feature flags
Wry uses a set of feature flags to toggle several advanced features.
os-webview(default): Enables the default WebView framework on the platform. This must be enabled
for the crate to work. This feature was added in preparation of other ports like cef and servo.x11(default): Enables x11 support and dependencies on Linux.serde: Enablesdpi'sserdefeature.devtools: Enables devtools on release builds. Devtools are always enabled in debug builds.
On macOS, enabling devtools, requires calling private APIs so you should not enable this flag in release
build if your app needs to publish to App Store.mac-proxy: EnablesWebViewBuilder::with_proxy_configon macOS.linux-body: Enables body support of custom protocol request on Linux. Requires
WebKit2GTK v2.40 or above.tracing: enablestracingforevaluate_script,ipc_handler, andcustom_protocols.
Partners
For the complete list of sponsors please visit our website and Open Collective.
License
Apache-2.0/MIT
File: CHANGELOG.md
Changelog
[0.57.0]
105ca17(#1834 by @renovate) Updated dependencydirsfrom v6 to v7f701e13(#1824 by @IntellyCode) On iOS, follow the system background color when nobackground_coloris set, so the webview no longer flashes its opaque white default before the page paints.bb69d62(#1809 by @Legend-Master) Bumped MSRV to 1.85d293751(#1816 by @Legend-Master) Only injectwindow.ipcif the webview is built withWebViewBuilder::with_ipc_handlerbb69d62(#1809 by @Legend-Master) Updatedwindowsandwindows-coreto 0.62,webview2-comto 0.39, this drops Windows 7 support, see https://github.com/microsoft/windows-rs/issues/3808
[0.56.1]
62080fa(#1811 by @gimenete) On Android, cache the asset-loader setting inRustWebViewClientso intercepted requests avoid repeated JNI calls into Rust state.a5612a8(#1812 by @Legend-Master) On Android, removed unusedwithAssetLoaderbinding andassetLoaderDomaincan now returnnull.5ce72b0(#1772 by @degant) Don't panic in the IPC handler when the webview's current document URL is not a validhttp::Uri(for example afile://URL, or one containing a raw space or non-ASCII characters). Such invalid IPC requests are now logged (under thetracingfeature) and dropped instead of aborting the process, matching the existing behavior of the WKWebView backend.b95a7f8(#1799 by @Legend-Master) On Windows, ignore set webview focus error on create as it fails if the hosting window is minimized.aff28ef(#1781 by @FabianLars) On macOS in debug mode, don't registerrequestMediaCapturePermissionForOrigin:initiatedByFrame:type:decisionHandler:delegate method on macOS 11 or older to prevent a debug_assertion startup panic.be729e3(#1804 by @velocitysystems) OverridegetDefaultVideoPoster()on Android to return a transparent bitmap instead of null, preventing Chromium from painting its default gray play-button placeholder on<video>elements.3fbf592(#1795 by @qwerfunch) Fix a Windows crash when the WebView2 parent subclass is re-entered after its controller reference data is cleared during teardown.
\[0.56.0]
affbb3c(#1720) Updated Android lifecycle JNI calls inWryActivityfor Tao 0.36's renames:createtoonFirstActivityCreateonActivityCreatetoonCreatestarttoonStartresumetoonResumepausetoonPausestoptoonStop- Removed
onActivitySaveInstanceState onActivityDestroytoonDestroyonActivityLowMemorytoonLowMemory
onLowMemoryno longer takes any parameters.onFirstActivityCreateno longer takes any parameters.and also emitting them as window-specific events.
145b36f(#1736) Remove Send, Sync bounds from NewWindowOpener.871497a(#1748) Add back/forward navigation APIs (go_back,go_forward,can_go_back, andcan_go_forward) toWebView.fe52ff9(#1715) On Android, release REQUEST_HANDLER mutex sooner by cloning the underlying Send + Sync handler.9d0a9fe(#1712) On Windows, AddWebViewExtWindows::hwndgetter to access the child HWND containing the webview.4ee8c38(#1779) Enable WebView element fullscreen support on macOS 12.3+ and iOS 15.4+ without using private APIs.5bdda32(#1719) On macOS, avoid an extra copy for owned custom protocol response bodies by transferring the body buffer intoNSData.6ef93b3(#1737) On macOS, updatedobjc2-*dependencies to 0.3.29f9a237(#1654) Add an expanded permission handling API for WebView2, WKWebView, WebKitGTK, and Android.
This includes:PermissionKindexpansion:DisplayCapture,Midi,Sensors,MediaKeySystemAccess,LocalFonts,WindowManagement,PointerLock,AutomaticDownloads,FileSystemAccess,Autoplay.- Support for
PermissionResponse::Promptto trigger native system dialogs. - Android support via JNI bridge (
onPermissionRequestinRustWebChromeClient). - macOS: Split camera/microphone requests;
CameraAndMicrophoneresolved from individual responses. - Linux:
DisplayCapturedetection for WebKitGTK < 2.42 (getDisplayMedia fix). - Windows: Full coverage of all 12
COREWEBVIEW2_PERMISSION_KINDvalues.
bd1decc(#1780) Breaking Change: Removed the macOS/iOS specifictransparentandfullscreenfeature flags. The functionalities are now always enabled. Please reach out immediatly if you see issues in the App Store submission process.d29cd57(#1787) Removedprotocolfeature, previously gatedWebViewBuilder::with_custom_protocol,WebViewBuilder::with_asynchronous_custom_protocolandWebViewBuilder::with_asset_loaderare now always available10fdf73(#1738) On Windows, addWebViewBuilderExtWindows::with_profile_nameto opt the webview into a named WebView2 profile. Webviews with different profile names within the same environment have isolated cookies, storage, IndexedDB, and cache while sharing the runtime โ matching WebView2's documented multi-profile pattern.
\[0.55.1]
3860359(#1721 by @lucasfernog) Tweak ProGuard rules to keep the getId required activity method.
\[0.55.0]
a535fd9(#1699 by @FabianLars) On Android, fixed panics on custom protocol timeouts. Increased timeout for non-internal requests to 30 seconds.781f371(#1633 by @lucasfernog) Update to latest tao to support multi-window on Android and iOS.848aff7(#1660 by @Legend-Master) Runnew_window_req_handleron main thread and remove theSend + Syncrestriction on it92114b2(#1634 by @lucasfernog) CallonNewIntentfor tao's 0.35 Opened event.05440b8(#1688 by @Legend-Master) Removeddrag-dropfeature, previously gatedWebViewAttributes::drag_drop_handlerandWebViewBuilder::with_drag_drop_handlerare now always available222c63d(#1698 by @FabianLars) RemoveWebViewAttributes,WebView::newandWebView::new_as_childfrom public API. UseWebViewBuilderinstead.
\[0.54.4]
47d9470(#1693 by @Legend-Master) Updated dependency dom_query to 0.27.0, this fixed a bug where initialization scripts were escaped incorrectly on Android1540788(#1692 by @Sbenazar) fix(webkitgtk): normalize background color values to 0.0โ1.0
\[0.54.3]
40a7032(#1677 by @russellmcc) Fix bug where wry would crash when loaded by multiple dylibs in the same process on macOS.
Dependencies
146e36e(#1671 by @thomaseizinger) Refactors HTML manipulation on Android to usedom_queryinstead ofkuchikiki.
enhance
e430558(#1649 by @aoxiangtianyu-go) Add an option to control browser-level autofill behavior on Windows.
bug
a7de137(#1680 by @Legend-Master) Fix infinite loop on main thread if creating the webview failed or getting cookie failed
\[0.54.2]
1d1b870(#1662 by @JSKitty) On macOS, implementbackground_colorsupport for WKWebView behind thetransparentfeature. Disables the default white background via thedrawsBackgroundKVC key at init and appliesunderPageBackgroundColoron macOS 12+ for both initial creation and runtimeset_background_colorcalls.e3761e5(#1668 by @zeta-gundam) Fixed an issue that caused "Symbol not found: _NSHTTPCookieSameSite..." panics on macOS10.13&10.14.e3761e5(#1668 by @zeta-gundam) Fixed an issue that caused "[<WKWebViewConfiguration 0x6000003f4d00> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key drawsBackground." panics on macOS10.13
\[0.54.1]
\[0.54.0]
5fdd1a9(#1625) Use OnBackPressedCallback instead of the deprecated onKeyDown for back navigation on Android.51d06d0(#1646) Remove redundant clones in WebView and download handling. No user facing changes.7b77322(#1647) Fix clippy io_other_error. No user facing changes.ff8876d(#1652) Improve wkwebview performance. No user-facing changes.27ba73fAdd handler for web content process termination.4fcff14(#1547) SetWebsiteDataManagerBuilder::base_cache_directorywith the same path asbase_data_directory.This change allows the cache directory to be changed instead of using the default one from WebKitGTK.
\[0.53.5]
- #1622 Fixed an issue that caused docs.rs builds to fail. No user facing changes.
\[0.53.4]
093856a(#1622 by @lucasfernog) Add flag to opt out of automatic back navigation handling on Android viaWryActivity#handleBackNavigation.0f51d67(#1605 by @dgerhardt) On Linux, removed a workaround which forced inital requests for multiple webviews to be handled sequentially.
The workaround was intended to fix a concurrency bug with loading multiple URIs at the same time on WebKitGTK.
But it prevented parallelization and could cause a deadlock in certain situations.
It is no longer needed with newer WebKitGTK versions.
\[0.53.3]
6aa5854(#1609 by @lucasfernog) Enhance error handling of thewebview_versionfunction on macOS.
\[0.53.2]
1743e7f(#1608 by @lucasfernog) Fix new_window_req_handler craashing when creating new window for webview that has a custom data_store_identifier.
\[0.53.1]
ccdf912(#1603 by @lucasfernog) Fix the build when not enabling thex11feature.
\[0.53.0]
1456f8e(#1602 by @FabianLars) Enabled all downloads by default to match WebView2 and browser behavior on all platforms. To disable this, provide a customdownload_started_handler.43e78ff(#1588 by @zphrs) AddWebViewBuilder::with_limit_navigations_to_app_bound_domainsonly on iOS.
Function is a no-op if iOS version is less than iOS 14.60dba38(#1569 by @WSH032) AddWebView::set_cookieandWebView::delete_cookieAPIs.88cbb01(#1561 by @dgerhardt) On Linux, fix a deadlock, which could occur when destroying a WebView before loading has finished.eb562ca(#1596 by @lucasfernog) Do not firenew_window_req_handleron navigation events on macOS and iOS.78634b3(#1594 by @FabianLars) On Linux, macOS and iOS, thedownload_started_handlerwill now get the correct suggested destination path.5399823(#1600 by @lucasfernog) Fixesnew_window_req_handlernot creating the webview on Linux when executingwindow.open().eb562ca(#1596 by @lucasfernog) Fixesnew_window_req_handlernot fired on macOS when executingwindow.open().3f978d3(#1601 by @lucasfernog) RefactorWebViewBuilder::with_new_window_req_handlerto allow creating the webview manually.3f978d3(#1601 by @lucasfernog) Disable new window creation by default on Windows to match behavior of other platforms. UseWebViewBuilder::with_new_window_req_handlerto enable.
\[0.52.1]
63eaab8(#1573 by @Legend-Master) Fixwry::DragDropEvent::Drop::pathsreturns random data on Windows
\[0.52.0]
5e6b0e6(#1555 by @FabianLars) Added iOS support forset_background_color.99dab51(#1570 by @renovate) Updatedwebview2-comto0.38.41f4a3a(#1572 by @FabianLars) On Windows on systems running WebView2 v137+ wry now uses a new default background color API which should reduce white flashes. The use of theRemoveRedirectionBitmapbrowser flag (v134+) was removed due to crashes on Insider builds.eb40ac8(#1528 by @aurelj) Addedx11feature flag (enabled by default).
breaking
1567635(#1558 by @amrbashir) RenameWebViewBuildermethods for consistency and clarity:- Renamed
WebViewBuilder::with_web_contexttoWebViewBuilder::new_with_web_context - Renamed
WebViewBuilder::with_attributestoWebViewBuilder::new_with_attributes
- Renamed
f868658(#1556 by @Legend-Master)WebContext::is_custom_protocol_registerednow takes&strinstead ofString
\[0.51.2]
f7781a7(#1544 by @lucasfernog) Allow modifying or removing the input accessory view on iOS viaWebViewBuilderExtIos::with_input_accessory_view_builder.
\[0.51.1]
3e24d6b(#1543 by @lucasfernog) Fix async custom protocol not responding.
\[0.51.0]
f99bbd9(#1507 by @Simon-Laux) RenamedError::UrlPrasetoError::UrlParseto fix typo.2d753c6(#1531 by @Legend-Master) Breaking Change:WebViewAttributes::initialization_scriptstakesVec::now instead ofVec::<(String, bool)>78b83a0(#1537 by @Brendonovich) Moved protocol handler functions to a thread local instead of storing them as ivars to prevent a race condition between webview close and custom protocol handling.5f1e4ba(#1538 by @syrel) macOS: Handle flipped coordinates when adding a WebView as a child4ec951a(#1526 by @Legend-Master) Updatedwebview2-comto0.37,windowsto0.61.2d753c6(#1531 by @Legend-Master) Init scripts are always executed on all frames on Windows WebView22d753c6(#1531 by @Legend-Master) Fix init script sometimes get executed too late on Windows WebView2
feat
ecbced2(#1534 by @Simon-Laux) macOS/iOS: add option to disable link previews when building a webview (the webkit API has it enabled by default)WebViewBuilderExtDarwin.with_allow_link_preview(bool)
\[0.50.5]
enhance
353bd95(#1517 by @FabianLars) Added a Windows-only setting to disable all Webview2 context menus.
bug
4f4ade3(#1520 by @lucasfernog) Fix crash setting macOS traffic light buttons inset when window is undecorated or buttons have been removed.
\[0.50.4]
349dfe3(#1512 by @Simon-Laux) AddedWebViewExtDarwinto expose WebView functions available to both macOS and iOS.349dfe3(#1512 by @Simon-Laux) fix: crash when usingWebViewBuilderExtDarwin.with_data_store_identifier349dfe3(#1512 by @Simon-Laux) feat: macOS: addWebViewExtDarwin::fetch_data_store_identifiersandWebViewExtDarwin::remove_data_store.d0b16a7(#1491 by @neilmcguire) On Windows, Add support for iframe requests in custom protocols. Requires WebView2 1.0.2365.46 or higher.148d7cd(#1513 by @FabianLars) Wry by default now passes--enable-features=RemoveRedirectionBitmapto WebView2 to hide the initial white flash of newly created webviews. Only takes effect on WebView2 Runtime versions 134 and above.
\[0.50.3]
94ecadb(#1496 by @Simon-Laux) AddWebViewBuilder.with_javascript_disabledapi to disable JavaScript.5120a5c(#1486 by @charrondev) FixWebview::cookiesandWebview::cookies_for_urldeadlock on macOS.8dfeb76(#1500 by @Simon-Laux) feat: addWebview.reload
\[0.50.2]
cef818f(#1505 by @lucasfernog) Fixalready mutably borrowed: BorrowErrorpanic on webview initialization on Android.
\[0.50.1]
f9abf6b(#1501 by @Legend-Master) Fix webview not resized with parent when it gets maximized on Windows
\[0.50.0]
933de78(#1492 by @Legend-Master) Updatedwebview2-comto0.36,windowsto0.60.
\[0.49.0]
c27b4ff(#1468 by @madsmtm) Update toobjc2v0.6.This bumps MSRV on macOS/iOS to 1.71.
95a9319(#1454 by @Legend-Master) Updatedwebview2-comto0.35,windowsto0.59.9df094a(#1483 by @amrbashir) On Windows, fix webview slightly larger than the host window causing a pixel or two to be obscured.ce98c34(#1480 by @ahqsoftwares) Fixed an issue that could causeReturn type mismatch: expected 'kotlin.String', actual 'kotlin.String?'errors.
enhance
0185644(#1452 by @mzdk100) Allow the use of TAB to cycle through focus elements in an HTML document.
\[0.48.1]
cbbcccc(#1446 by @FabianLars) Add functionality to set the traffic light inset on macOS. This is required to prevent flickers if the WebView is injected viabuild()instead ofbuild_as_child().
enhance
26abf63(#1445 by @bastiankistner) Add an option to change the default background throttling policy (currently for WebKit only).
\[0.48.0]
eb0c816(#1423 by @SpikeHD) Rename{WebViewBuilderExtWindows, WebViewBuilderExtUnix}::with_extension_pathtowith_extensions_path.b4ba5b4(#1426 by @FabianLars) On Windows, Wry will now log PostMessage errors instead of panicking.f0c6b94(#1441 by @renovate) Updatedwebview2-comto0.34.
\[0.47.2]
\[0.47.1]
59c1eef(#1418 by @amrbashir) Fix initialization scripts running twice on Windows.
\[0.47.0]
7221256(#1365 by @Norbiros) AddWebViewBuilder::with_initialization_script_for_main_onlyto enable injecting JavaScript code into main frame only or all subframes.c1b26b9(#1394 by @amrbashir) AddWebView::cookiesandWebView::cookies_for_urlAPIs.c193e2a(#1408 by @amrbashir) FixDragDropEvent::Dropevent never fired on Wayland (and sometimes on X11).1d63fa3(#1403 by @SpikeHD) AddWebViewBuilder::with_extension_pathAPI to Windows and Linux.0c192f4(#1414 by @lucasfernog) Fix Android static handlers not being replaced when the application UI is relaunched while still running in the foreground.9a2a2d4(#1412 by @amrbashir) Fix icons of dragged items getting stuck when usingWebViewBuilder::with_drag_drop_handleron some distros like Gnome.fa9875b(#1409 by @amrbashir) On Windows, disable Webview2's file drop when usingWebViewBuilder::with_drag_drop_handlerwhich fix drag events for files from "Recent files" view.6007608(#1400 by @amrbashir) On Windows, fix webview slightly larger than the window inner size, which resulted in a hidden 1px in the right and bottom borders of the webview
\[0.46.3]
be122f6(#1397 by @lucasfernog) Fixwith_user_agentregression.
\[0.46.2]
\[0.46.1]
bug
33c0193(#1389 by @amrbashir) Fix crash on macOS versions below 14.a57719e(#1385 by @huacnlee) AddWebView::focus_parentmethod.
\[0.46.0]
8cc2a7f(#1384 by @amrbashir) This release contains quite the breaking changes, because even though [email protected], ignored duplicate custom protocols, On Linux when using a shared web context, the custom protocol handler can only be registered once so we are bringing the duplicate custom protocols on Linux again, Windows and macOS are not affected. If using a shared web context, make sure to register a protocol only once on Linux (other platforms should be registed multiple times), useWebContext::is_custom_protocol_registeredwith#[cfg(target_os = "linux")].We also noticed that it is hard to know which webview made a request to the custom protocol so we added a method to attach an ID to a webview, and changed relevant custom protocol APIs to take a new argument that passes the specified id back to protocol handler.
We also made a few changes to the builder, specifically
WebViewBuilder::newandWebViewBuilder::buildmethods to make them more ergonomic to work with.- Added
Error::DuplicateCustomProtocolenum variant. - Added
Error::ContextDuplicateCustomProtocolenum variant. - On Linux, return an error in
WebViewBuilder::buildif registering a custom protocol multiple times. - Added
WebContext::is_custom_protocol_registeredto check if a protocol has been regsterd for this web context. - Added
WebViewIdalias type. - Breaking Changed
WebViewAttributesto have a lifetime parameter. - Added
WebViewAttributes.idfield to specify an id for the webview. - Added
WebViewBuilder::with_idmethod to specify an id for the webview. - Added
WebViewAttributes.contextfield to specify a shared context for the webview. - Breaking Changed
WebViewAttributes.custom_protocolsfield,WebViewBuilder::with_custom_protocolmethod andWebViewBuilder::with_asynchronous_custom_protocolmethod handler function to takeWebViewIdas the first argument to check which webview made the request to the protocol. - Breaking Changed
WebViewBuilder::with_web_contextto be a static method to create a builder with a webcontext, instead of it being a setter method. It is now an alternative toWebviewBuilder::new - Added
WebViewBuilder::with_attributesto create a webview builder with provided attributes. - Breaking Changed
WebViewBuilder::newto take no arguments. - Breaking Changed
WebViewBuilder::buildmethod to take a reference to a window to create the webview in it. - Breaking Removed
WebViewBuilder::new_as_child. - Added
WebViewBuilder::build_as_childmethod, which takes a reference to a window to create the webview in it. - Breaking Removed
WebViewBuilderExtUnix::new_gtk. - Added
WebViewBuilderExtUnix::build_gtk.
- Added
b01eac3(#1386 by @lucasfernog) Use unescaped Android package identifier for the proguard rules.
\[0.45.0]
0fd1229(#1369 by @lloydzhou) On Linux, fixed incorrect path for indexeddb database directory which made apps using[email protected]andtauri@1migrating towry@>=0.38andtauri@2lose their indexeddb data.e332eff(#1368 by @zephraph) AddWebview::load_html.
\[0.44.1]
5111eb0(#1362 by @lucasfernog) FixesWebView::clear_all_browsing_datacrashing with a segfault on macOS.
\[0.44.0]
b863d38(#1356 by @SpikeHD) Expose ability to enable browser extensions in WebView29220793(#1361 by @amrbashir) Ignore duplicate custom protocols inWebviewBuilder::with_custom_protocolandWebviewBuilder::with_async_custom_protocoland use the last registered one.9220793(#1361 by @amrbashir) RemovedError::DuplicateCustomProtocolvariant.5915341(#1354 by @millermk) Fixes Android webview error page flashing when a redirect to the app is performed.170095b(#1360 by @Steve-xmh) Fix web resource loading in android binding by skip duplicate Content-Type/Content-Length headers.5915341(#1354 by @millermk) Fix navigation error handling to trigger custom protocol on Android.
\[0.43.1]
5cea504(#1352 by @lucasfernog) Fixes Android file picker result processing.
\[0.43.0]
7b1c26a(#1344 by @Themayu) Windows: ImplementWebViewBuilderExtWindows::with_scroll_bar_styleto allow opting into Fluent Overlay style scrollbars.98d1a83(#1326 by @ollpu) Fix Linux IPC handler and initialization scripts when sharing a WebContext between multiple WebViews.
\[0.42.0]
556a359(#1301 by @pewsheen) On macOS, emit an error when the URL scheme registration fails.19d83d7(#1332 by @lucasfernog) Fixes a crash on the Android custom protocol handler when the request URL is invalid.38abcb9(#1340 by @lucasfernog) Fixes custom protocols not triggered on Android on external redirects.d1f1e7e(#1299 by @kanatapple) FixWebview::boundsreturning logical values where it should have been physical.03cdf93(#1311 by @bukowa) Handlewebkit2gtkclose signal (whenwindow.closeis called from js)68413e8(#1296 by @MarijnS95) Breaking change: Upgradendkcrate to0.9and delete unusedndk-sysandndk-contextdependencies. Types from thendkcrate are used in public API surface.
Breaking change: The publicandroid_setup()function now takes&ThreadLooperinstead of&ForeignLooper, signifying that the setup function must be called on the thread where the looper is attached (and theJNIEnvargument is already thread-local as well).39fc82c(#1306 by @Legend-Master) Support WebView2 version older than 101.0.1210.39 and documentincognitoandthemewill not work for versions before it5231a37(#1322 by @Legend-Master) Support WebView2 version older than 86.0.616.0 and document version requirements forback_forward_navigation_gestures,with_user_agent,with_hotkeys_zoom,with_browser_accelerator_keysa23a28d(#1341 by @amrbashir) Updatedwindowsto 0.58.
\[0.41.0]
8b691df(#1285 by @pewsheen) On macOS, fix an issue that could cause a panic when running an async command.6c7f45e(#1287 by @FabianLars) Fixed a regression causing autoplay on windows to require user gestures.24a7d27(#1289 by @renovate) Updatewindowscrate to0.57andwebview2-comcrate to0.31
\[0.40.1]
b6863ed(#1275) On Android, setRustWebViewClient.currentUrlfield early inonPageStartedmethod instead ofonPageFinishedf089964(#1276) Fixeswith_asynchronous_custom_protocolcrashing when sending the response on Linux.637289d(#1272) On Android, makeWryActivity.setWebviewmethod public to prevent JNI crashes.
\[0.40.0]
a424a0b(#1270) On Windows, fix child webview invisible after creation because it was created with0,0sized6f8dd7(#1271) On Windows, create child webview at the top of z-order to align with other platforms.03d2535(#1269) On macOS, disable initialization script injection into subframes.1e65049(#1267) On macOS, fixed a crash when sending empty body by IPC.0f3c886(#1260) On macOS, fixed an issue of not being able to listen to the cmd+key event in javascript in single WebView.0f14e2a(#1259) Default the margin when printing on MacOS to 0 so it is closer to the behavior of when printing on the web.0f14e2a(#1259) AddWebViewExtMacOS::print_with_optionswhich allows to modify the margins that will be used on the print dialog.f516122(#1262) On Windows, enable webview2 non client region support which allows usingapp-regionCSS style.
\[0.39.5]
4c88c66(#1247) Force the IPC and custom protocol tracing spans to have no parent.2d43d62(#1254) On Windows, fix webview having a bigger size than the actual window size after creation and until the window is resized.
\[0.39.4]
8bbc2bf(#1237) FixWebviewBuilder::with_transparent,WebviewBuilder::with_background_color, andWebview::set_background_coloralways failing and causing the webview to fail to load.130c469(#1238) AddWebViewBuilderExtDarwin::with_data_store_identifier.203604c(#1233) On Windows, fix the webview not filling up the whole window if the parent window was resized during the webview initialization.
\[0.39.3]
c7ca3db(#1221) On Windows, fix data directory created next to the executable with a gibberish name even if it was explicitly provided inWebConext::new
\[0.39.2]
3e3d59c(#1215) On macOS, prevent NSExceptions and invalid memory access panics when dropping the WebView while custom protocols handlers may still be running.ca6b5fb(#1224) Updatewindowscrate to0.56
\[0.39.1]
f0e82d3(#1217) Fix target detection on build script to enhance cross compiling capabilities.ed9fa9b(#1210) On iOS, allows media plays inline.
\[0.39.0]
ddda455(#1207) Disable deprecated applicationCache web api. This api was completely removed upstream in webkitgtk 2.44.d7031ae(#1206) On Windows, fix a crash due to a double-free when the host window is destroyed before the webview is dropped.34ae1ca(#1202) Adddpimodule which is a re-export ofdpicrate.fdbd3d3(#1081) Updatehttpdependency to134ae1ca(#1202) Breaking Change: Removedx,y,withandheightfields fromRectstruct and replaced it withsizeandpositionfields.c033bd2(#1156) OnmacOS, fix menu keyboard shortcuts when addedwebviewaschild.
\[0.38.2]
\[0.38.1]
\[0.38.0]
e6f0fbd(#1180) Fixes a null pointer exception when runningwindow.ipc.postMessage(null)on Android.5789bf7(#1187) Breaking change: Refactored the file-drop handling on the webview for better representation of the actual drag and drop operation:- Renamed
file-dropcargo feature flag todrag-drop. - Removed
FileDropEventenum and replaced with a newDragDropEventenum. - Renamed
WebViewAttributes::file_drop_handlerfield toWebViewAttributes::drag_drop_handler. - Renamed
WebViewAttributes::with_file_drop_handlermethod toWebViewAttributes::with_drag_drop_handler.
- Renamed
b8fea39(#1183) ChangedWebViewBuilder::with_ipc_handlerclosure to takehttp::Requestinstead ofStringso the request URL is available.3a2026b(#1182) Breaking changes: Changed a few methods onWebViewtype to return aResult:Webview::urlWebview::zoomWebview::load_urlWebview::load_url_with_headersWebview::boundsWebview::set_boundsWebview::set_visibleWebviewExtWindows::set_themeWebviewExtWindows::set_memory_usage_levelWebviewExtWindows::reparentWebviewExtUnix::reparentWebviewExtMacOS::reparent
00bc96d(#1179) AddedWryActivity::onWebViewCreate(android.webkit.WebView)on Android.
\[0.37.0]
8c86fbaBreaking change: Removeddata:url support, as its native support in Windows and macOS are buggy and unreliable, useWebview::with_htmlinstead.8c86fbaOn Linux, decodeFilDropEventpaths before emitting them to make it consistent across all platforms.8c86fbaAddedWebViewExtMacOS::reparent,WebViewExtWindows::reparentandWebViewExtUnix::reparent.8c86fbaRevert global keys shortcuts (wry#1156)8c86fbaBreaking change: Removed internal url parsing which had a few side-effects such as encoded url content, now it is up to the user to pass a valid URL as a string. This also came with a few breaking changes:- Removed
Urlstruct re-export - Removed
Error::UrlErrorvariant. - Changed
WebviewAttributes::urlfield type toString. - Changed
WebviewBuilder::with_urlandWebviewBuilder::with_url_and_headersreturn type toWebviewBuilderinstead ofResult<WebviewBuilder>. - Changed
Webview::urlgetter to return aStringinstead ofUrl.
- Removed
\[0.36.0]
8646120(#1159) On android, fixno non-static method ".evalScript(ILjava/lang/String;)"when callingWindow::eval.8646120(#1159) On macOS, fix a release build crashes with SEGV when callingWebView::evaluate_script. This crash bug was introduced at v0.35.2.8646120(#1159) Breaking change Update raw-window-handle crate to v0.6.HasWindowHandletrait is required for window types instead ofHasRawWindowHandle.wry::raw_window_handlenow re-exports v0.6.
8646120(#1159) OnmacOS, fix menu keyboard shortcuts. This issue bug was introduced inv2when addedwebviewaschild.
\[0.35.2]
0ef041f(#1133) On Linux, apply passed webview bounds when usingWebView::new_gtkorWebViewBuilder::new_gtkwithgtk::Fixedwidget. This allows to create multiple webviews insidegtk::Fixedin the same window.0ef041f(#1133) Added tracing spans forevaluate_script,ipc_handlerandcustom_protocolsbehind thetracingfeature flag.
\[0.35.1]
a4a39b9(#1098) Fix the API documentation cannot be built on docs.rs.e116d42(#1111) Fix screen share permissions dialog not showing up on macOS 14.0+a8c0d38(#1097) Fix IPC crash on wkwebview if receiving invalid types.8fddbb6(#1091) AddWebView::boundsgetter.30a85f3(#1122) On Windows, fix file drop handler.
\[0.35.0]
e61e7f8(#1090) Breaking change Consistently useWebViewin API names. The following APIs were renamed:WebviewExtWindowsโWebViewExtWindowsWebviewExtUnixโWebViewExtUnixWebviewExtMacOSโWebViewExtMacOSWebviewExtIOSโWebViewExtIOSWebviewExtAndroidโWebViewExtAndroidWebviewUriLoaderโWebViewUriLoader
e61e7f8(#1090) AddWebViewExtWindows::set_memory_usage_levelAPI to set the memory usage target level on Windows. Setting 'Low' memory usage target level when an application is going to inactive can significantly reduce the memory consumption. Please read the guide for WebView2 for more details.e61e7f8(#1090) - Add cfg_aliases for easier feature configuration. And addos-webviewas default feature.e61e7f8(#1090) Enhance initalization script implementation on Android supporting any kind of URL.e61e7f8(#1090) Fix wkwebview crashed when received invalid UTF8 string from IPC.e61e7f8(#1090) Refactor new method to take raw window handle instead. Following are APIs got affected:applicationmodule is removed, andwebivewmodule is moved to root module.WebViewBuilder::new,WebView::newnow takeRawWindowHandleinstead.- Add
WebViewBuilder::new_as_child,WebView::new_as_childto crate a webview as a child inside a parent window. Webview::inner_sizeis removed.- Add
WebViewBuilderExtUnixtrait to extendWebViewBuilderon Unix platforms. - Add
new_gtkfunctions toWebViewBuilderExtUnixandWebviewExtUnix. - raw-window-handle crate is re-exported as
wry::raw_window_handle.
This also means that we removed
taoas a dependency completely which required some changes to the public APIs and to the Android backend:- Webview attributes
ipc_handler,file_drop_handler,document_change_handlerdon't take theWindowas first parameter anymore.
Users should use closure to capture the types they want to use. - Position field in
FileDropevent is now a tuple of(x, y)physical position instead ofPhysicalPosition. Users need to handle scale factor - We exposed the
android_setupfunction that needs to be called once to setup necessary logic. - Previously the
android_binding!had internal call totao::android_bindingbut now thattaohas been removed,
the macro signature has changed and you now need to calltao::android_bindingyourself, checkout the crate documentation for more information.
\[0.34.2]
c2e6980(#1047) Fix doc building by removing dox feature requirement fromwebkit2gtk.82908d4(#1045) Fix docs.rs build.
\[0.34.1]
\[0.34.0]
ce95730(#1036) Upgrade gtk to 0.18 and bump MSRV to 1.70.0.591fda8(#1042) Usegtk's re-exported modules instead.b22a19e(#1037) Updatewindowsandwindows-implementcrate to0.51
\[0.33.1]
\[0.33.0]
5adf9da(#994) Breaking change Wry now defaults tohttp://<scheme>.localhost/for custom protocols on Android.844d95a(#1023) Fixes async custom protocol resolver on Windows.5adf9da(#994) AddWebViewBuilderExtAndroid::with_https_schemeto be able to choose betweenhttpandhttpsfor custom protocols on Android.c5c3731(#1024) Add winit-gtk to support winit feature flag on Linux.
\[0.32.0]
4bdf1c3(#1017) AddedWebViewBuilder::with_asynchronous_custom_protocolto allow implementing a protocol handler that resolves asynchronously.70d8ae0(#1009) Fixes Android freezing when handling request due to endless iteration when reading request headers.b5e1875(#994) Breaking change Wry now defaults tohttp://<scheme>.localhost/for custom protocols on Windows.b5e1875(#994) AddWebViewBuilderExtWindows::with_https_schemeto be able to choose betweenhttpandhttpsfor custom protocols on Windows.fa15076(#163) Addwinitandtaofeature flag withtaoas default.4bdf1c3(#1017) Breaking change:WebViewBuidler::with_custom_protocolclosure now returnshttp::Responseinstead ofResult<http::Response>.ebc4a20(#1015) AddWebViewAtrributes.focusedandWebViewBuilder::with_focusedto control whether to focus the webview upon creation or not. Supported on Windows and Linux only.
\[0.31.0]
e47562f(#993) Update the unmaintainedkuchikicrate to the maintainedkuchikikicrate.7a353c7(#980) AddWebViewBuilder::with_on_page_load_handlerfor providing a callback for handling various page loading events.b0a08b1(#997) Updatetaoto version0.22which has removed the global-shortcut, menus and tray features, see [email protected] release.
\[0.30.0]
17e04e2(#985) MakeWebViewBuilder::with_navigation_handlerapply to AndroidloadUrlcalls.17e04e2(#985) Add support forWebViewBuilder::with_navigation_handleron Android.87b331a(#978) On Windows, avoid resizing the webview when the window gets minimized to avoid unnecessaryresizeevent on JS side.17e04e2(#985) Update tao to 0.21.
\[0.29.0]
c09dd7b(#968) Remove ActionBar handling from wry. If you want to hide the action bar, hide it using thethemes.xmlfile in your android project or inheritWryActivityclass and usegetSupportActionBar()?.hide()in theonCreatemethod.2b56bfa(#966) Add support forWebViewBuilder::with_htmlandWebViewAttributes.htmlon Android.d2c1819(#969) On Linux, replacelinux-headerflag withlinux-bodyflag. Request headers are enabled by default. Add request body on custom protocol but it's behind the flag.f7dded4(#955) The bug was reported in tauri repo: https://github.com/tauri-apps/tauri/issues/5986With input method preedit disabled,fcitx can anchor at edit cursor position.
the pre-edit text will not disappear,instead it shows in the fcitx selection window below the input area.2b56bfa(#966) Set base url and origin to null forWebViewBuilder::with_htmlandWebViewAttributes.htmlfor consistency on all platforms.
\[0.28.3]
- On iOS, fix panic at runtime due to setting webview ivar.
\[0.28.2]
- Adjust
cargo:rerun-if-changedinstruction for Android files.
\[0.28.1]
- Fix unresolved reference in kotlin files when building for android.
- Support modifying user agent string on Android.
- On Linux and macOS, add synthesized event for mouse backward and forward buttons.
\[0.28.0]
- Add
Webview::clear_browsing_datamethod. - On Android, generate a
proguard-wry.profile that could be used to keep the necessary symbols for wry when using minification. - Update
taoto0.19
\[0.27.3]
- Adds a way to launch a WebView as incognito through a new API at WebViewBuilder named as
with_incognito. - On macOS and iOS, remove webcontext implementation since we don't actually use it. This also fix segfault if users drop webcontext early.
- Use the new WKWebView
inspectableproperty if available (iOS 16.4, macOS 13.3).
\[0.27.2]
- On Android, Add support for native back button navigation.
- Fix
WebView::urlgetter on Android. - Add Webview attribute to enable/disable autoplay. Enabled by default.
- Fix the
WebViewBuilder::with_urlwhen the projet usemimalloc - Revert
51b49c54which hid the webview when minimized on Windows.
\[0.27.1]
- On Windows, Linux and macOS, add method
evaluate_script_with_callbackto execute javascipt with a callback.
Evaluated result will be serialized into JSON string and pass to the callback. - On iOS, set webview scroll bounce default to NO.
- Update the value returned on a
Nonevalue ofClassDecl::new("WryDownloadDelegate", class!(NSObject))
fromUIViewControllertoWryDownloadDelegate.- 7795356 fix: WryDownloadDelegate call after first time on 2023-02-20
- On Linux, disable system appearance for scrollbars.
- On Windows and Linux, implement
WebviewBuilder::with_back_forward_navigation_gesturesandWebviewAttributes::back_forward_navigation_gesturesto control swipe navigation. Disabled by default.
\[0.27.0]
- Add function to dispatch closure with the Android context.
- On macOS, fix crash when getting dragging position.
- On Android,
wrycan again load assets from the apk'sassetfolder via a custom protocol. This is set byWebViewBuilder's methodwith_asset_loader, which is exclusive to Android (by virtue of existing withinWebViewBuilderExtAndroid). - Update
webview2-comto0.22andwindows-rsto0.44which bumps the MSRV of this crate on Windows to1.64.
\[0.26.0]
- Added
WebViewBuilderExtAndroidtrait and withon_webview_createdhook. - Enable dox feature when building docs.
- Expose
wry::webview::prelude::find_classfunction to find an Android class in the app project scope. - Added
WebviewExtIOStrait to access the WKWebView and userContentController references.
\[0.25.0]
- Breaking Change: Bump webkit2gtk to 0.19. This will use webkit2gtk-4.1 as dependency from now on. Also Bump gtk version: 0.15 -> 0.16.
- Breaking Add position of the drop to
FileDropEventstruct. - On Android, fix the injection of
intialization_scriptsfor devServers where theContent-Typeheader includes more information than just"text/plain".
\[0.24.1]
- Update
taoto0.16.0- a27a66b chore: update tao to 0.16.0 on 2023-01-11
\[0.24.0]
- Changed env vars used when building for Android; changed
WRY_ANDROID_REVERSED_DOMAINtoWRY_ANDROID_PACKAGEandWRY_ANDROID_APP_NAME_SNAKE_CASEtoWRY_ANDROID_LIBRARY. - Fixes Android initialization scripts order.
- Remove redundant
.clone()calls and avoid unnecessary heap allocations. - Change return type of custom protocol handlers from
Result<Response<Vec>>toResult<Response<Cow<'static, [u8]>>>. This allows the handlers to return static resources without heap allocations. This is effective when you embed some large files like bundled JavaScript source as&'static [u8]usinginclude_bytes!. - Ensures that the script passed to
.with_initialization_script("here")is not empty. - Add APIs to process webview document title change.
- Evaluate scripts after the page load starts on Linux and macOS.
- Improve panic error messages on the build script.
- Add
WebViewBuilder::with_url_and_headersandWebView::load_url_with_headersto navigate to urls with headers. - Change class declare name from
UIViewControllertoWryNavigationDelegateto avoid class name conflict on iOS. - Rerun build script if the
WRY_ANDROID_KOTLIN_FILES_OUT_DIRdirectory changes. - On Windows, Add
WebviewBuilderExtWindows::with_themeandWebviewExtWindows::set_themeto change webview2 theme.
\[0.23.4]
- Fixes Android initialization scripts order.
- Improve panic error messages on the build script.
\[0.23.3]
\[0.23.2]
- On macOS, remove all custom keydown implementations. This will bring back keydown regression but should allow all accelerator working.
- Suppress
unused_variableswarning reported only in release build. - Add
WebViewBuilderExtWindows::with_browser_accelerator_keysmethod to allow disabling browser-specific accelerator keys enabled in WebView2 by default. Whenfalseis passed, it disables all accelerator keys that access features specific to a web browser. See the official WebView2 document for more details.
\[0.23.1]
- Fixes usage of the
linux-headersfeature.- 64a72ff fix(wry): correctly use the linux-headers feature on 2022-12-05
\[0.23.0]
- Properly parse the content type header for the
android.webkit.WebResourceResponsemime type. - Change typo in
WebViewBuilderExtWindows::with_additionl_browser_args. toWebViewBuilderExtWindows::with_additional_browser_args. - Add
Webiew::load_url. - Change the type of
WebViewBuilderExtWindows::with_additional_browser_argsargument fromAsRef<str>toInto<String>to reduce extra allocation. - Validate custom protocol response status code on Android.
- [https://github.com/tauri-apps/wry/commit/04422bc1b579d9388ce03c2388b8f415dbc0747b] On macOS, revert content view to native NSView ([#782])(https://github.com/tauri-apps/wry/pull/782)
\[0.22.6]
- Fixes usage of the
linux-headersfeature.- 14c5ae7 fix(wry): correctly use the linux-headers feature on 2022-12-05
\[0.22.5]
- On macOS, fix arrow keys misprint text on textarea.
\[0.22.4]
- On Linux, add
linux-headersfeature flag to fix version regression. The minimum webkit2gtk version remains v2.22.
\[0.22.3]
- On macOS, fix keyinput missing by calling superclass methods.
\[0.22.2]
- On macOS, add an API to enable or disable backward and forward navigation gestures.
- On macOS, pass key event to menu if we have one on key press.
\[0.22.1]
- Fix
WebViewBuilder::with_accept_first_mousetaking behavior of first initalized webview. - Fix download implementation on macOS older than 11.3.
- On macOS, remove webview from window's NSView before dropping.
\[0.22.0]
- Added
WebViewAttributes::with_accept_first_mousemethod for macOS. - Breaking change Custom protocol now takes
Requestand returnsResponsetypes fromhttpcrate. - Enabled devtools in debug mode by default.
- On Desktop, add
download_started_handleranddownload_completed_handler. Seeblob_downloadanddownload_eventexample for their usages. - Fix double permission dialog on macOS 12+ and iOS 15+.
- Focus webview when window starts moving or resizing on Windows to automatically close
<select>dropdowns. Also notify webview2 whenever the window position/size changes which fixes the<select>dropdown position - On Windows, hide the webview when the window is minimized to reduce memory and cpu usage.
- Internally return with error from custom protocol if an invalid uri was requseted such as
wry://which doesn't contain a host. - Support cross compiling ios on a non macos host.
- On Linux, Improve custom protocol with http headers / method added to request, and status code / http headers added to response. This feature is 2.36 only, version below it will fallback to previous implementation.
- On macOS, add WKWebview as subview of existing NSView directly.
- Keypress on non-input element no longer triggers unsupported key feedback sound.
- Remove the IPC script message handler when the WebView is dropped on macOS.
- Breaking change Removed http error variants from
wry::Errorand replaced with genericHttpErrorvariant that can be used to converthttpcrate errors. - Disabled Microsoft SmartScreen by default on Windows.
- Add
WebView::urlto get the current url. - Breaking change Removed
httpmodule and replaced with re-export ofhttpcrate. - Add
WebviewBuilderExtWindows::with_additionl_browser_argsmethod to pass additional browser args to Webview2 On Windows. By default wry passes--disable-features=msWebOOUI,msPdfOOUI,msSmartScreenProtectionso if you use this method, you also need to disable these components by yourself if you want. - On Windows, fix canonical reason for custom protocol response.
- On macOS, make the webview first responder.
\[0.21.1]
\[0.21.0]
- Implement `` on Android.
- Add
WebviewExtAndroid::handlewhich can be used to execute some code using JNI context. - Enable JS alert, confirm, prompt on Android.
- Prompt for permissions on Android when needed.
- Implement
webview_versionon Android. - Enable storage, geolocation, media playback,
window.open. - Improve Android initialization script implementation.
- WRY will now generate the needed kotlin files at build time but you need to set
WRY_ANDROID_REVERSED_DOMAIN,WRY_ANDROID_APP_NAME_SNAKE_CASEandWRY_ANDROID_KOTLIN_FILES_OUT_DIRenv vars. - Breaking change Removed
WebView::focus. - Updated tao to
0.14- 483bad0 feat: tao as window dependency (#230) on 2021-05-03
- 51430e9 publish new versions (#221) on 2021-05-09
- 0cf0089 Update tao to v0.2.6 (#271) on 2021-05-18
- a76206c publish new versions (#272) on 2021-05-18
- 3c4f8b8 Update tao to v0.5 (#365) on 2021-08-09
- 44aa1dc publish new versions (#351) on 2021-08-09
- 935cc5f Update tao to 0.13 (#642) on 2022-07-27
- 657888a Publish New Versions (#632) on 2022-07-27
- 3a91376 chore(deps): update tao to 0.14 (#691) on 2022-09-13
- Allow setting the webview background color.
- Added the
RustWebViewclass on Android. - Update the
windowscrate to the latest 0.39.0 release andwebview2-comto 0.19.1 to match. - On Windows, automatically focus the webview when the window gains focus to match other platforms.
\[0.20.2]
- Implement custom protocol on Android.
- Implement
WebView::evalon Android. - On iOS, add webview as subview instead of replacing original view.
- Move WebView logic from tao to wry.
\[0.20.1]
- Add android support
- Enable private picture-in-picture on macos.
- On macOS, fix devtool warning
- 2eba8c9 fix: devtool warning by adding parent view
\[0.20.0]
- Add
WebViewBuilder::with_clipboard. - Fix typos in several files.
- Set webview2 language to match the OS language. This makes i18n functions like
new Date().toLocaleStrin()behave correctly. - Update tao to 0.13.0.
\[0.19.0]
- Automatically resize the webview on Windows to align with other platforms.
- Breaking change: Removed
WebView::resize - d7c9097 feat: auto resize webview on Windows (#628) on 2022-06-27
- Implement new window requested handler
- Re-export
url::Url. - Update tao to 0.12
\[0.18.3]
\[0.18.2]
\[0.18.1]
- Remove unused tray from doc features.
\[0.18.0]
\[0.17.0]
- Add option to enable/disable zoom shortcuts for WebView2, disabled by default.
- Prevent memory leak on macOS.
- Update the
windowscrate to the latest 0.37.0 release andwebview2-comto 0.16.0 to match.
The #[implement] macro in windows-implement and the implement feature in windows depend on some const generic features which stabilized in rustc 1.61. The MSRV on Windows targets is effectively 1.61, but other targets do not require these features.
The webview2-com crate specifies rust-version = "1.61", so wry will inherit that MSRV and developers on Windows should get a clear error message telling them to update their toolchain when building wry or anything that depends on wry. Developers targeting other platforms should be able to continue using whatever toolchain they were using before.
\[0.16.2]
\[0.16.1]
- Fixes a crash on macOS below Big Sur due to
titlebarSeparatorStyle(11+ API) usage.- eb2dddb fix(macos): only use APIs when supported on 2022-05-08
- Only run
WebView::printon macOS on v11+. This prevents a crash on older versions.- eb2dddb fix(macos): only use APIs when supported on 2022-05-08
\[0.16.0]
- Fixes a typo in the
WebviewExtMacOSconditional compilation. - Fixes a crash when the custom protocol response is empty on macOS.
- Add
WebView::zoommethod. - Set the titlebar separator style in macOS to
none. - Disable webview2 mini menu
\[0.15.1]
- Update how android handles url
- Add devtools support on Android/iOS.
- Fix to reset process on MacOS when webview is closed, closes #536.
\[0.15.0]
- On Windows and Linux, disable resizing maximized borderless windows.
- Fixes a memory leak on the custom protocol response body on macOS.
- Update tao to v0.8.0.
- The
trayandayatana-trayCargo features are not enabled by default. - Breaking change: Renamed the
ayatanaCargo feature toayatana-trayand added thegtk-trayfeature. The default tray on Linux is nowlibayatana-appindicator.
\[0.14.0]
- Added
close_devtoolsfunction toWebview. - Hide the devtool functions behind the
any(debug_assertions, feature = "devtools")flag. - Breaking change: Renamed the
devtoolfunction toopen_devtools. - Enable tab navigation on macOS.
- Added
is_devtools_openfunction toWebview. - Expose methods to access the underlying native handles of the webview.
- Breaking change:
WebviewExtWindows::controllernow returns the controller directly and not wrapped in anOption - e54afec feat: expose webview native handles, closes #495 (#513) on 2022-03-03
- Add navigation handler to decide if an url is allowed to navigate.
- Breaking change: Renamed the
devtoolfeature todevtools. - Breaking change: Renamed the
with_dev_toolfunction towith_devtools.
\[0.13.3]
- Fix rustdoc generation of Windows and Mac on docs.rs.
\[0.13.2]
- Fix cross compilation from
macOS. - Update
webview2-comto 0.13.0, which bumps the WebView2 SDK to 1.0.1108.44 and improves cross-compilation support.
Targeting *-pc-windows-gnu works now, but it has some limitations.
- 24a443c Add /.changes/webview2-com-0.13.0.md on 2022-02-14
\[0.13.1]
Add
devtoolfeature flag and configuration option.Update the
webview2-comcrate 0.11.0:Fix silent build script errors related to unconfigured nuget in https://github.com/wravery/webview2-rs/pull/4
Update the WebView2 SDK (not the runtime, just the API bindings) to the latest 1.0.1072.54 version
\[0.13.0]
- Update gtk to 0.15
- Add clipboard field in WebViewAttributes.
- Ignore transparency on Windows 7 to prevent application crash.
- Remove clipboard property for consistency across platforms.
- Enable cookie persistence on Linux if the
data_directoryis provided. - Enable objc's exception features so they can be treated as panic message.
- Add inner size method for webview. This can reflect correct size of webview on macOS.
- Add "transparent" and "fullscreen" feature flags on macOS to toggle private API.
- Implement WebContextImpl on mac to extend several callback lifetimes.
- The only thing that private mod shared does is re-export http mod to public,
we can just pub mod http. - Fix hovering over an edge of undecorated window on Linux won't change cursor.
- Undecorated window can be resized using touch on Linux.
- 219d20c Merge next back to dev branch (#477) on 2022-02-05
- Update webkit2gtk to 0.15
- Add
with_user_agent(&str)toWebViewBuilder. - Replace all of the
winapicrate references with thewindowscrate, and replacewebview2andwebview2-syswithwebview2-comandwebview2-com-sysbuilt with thewindowscrate. The replacement bindings are in thewebview2-com-syscrate, withpub usein thewebview2-comcrate. They can be shared with TAO. - Fix null pointer crash on
get_contentof web resource request. This is a temporary fix.
We will switch it back once upstream is updated. - Update the
windowscrate to 0.25.0, which comes with pre-built libraries. WRY and Tao can both reference the same types directly from thewindowscrate instead of sharing bindings inwebview2-com-sys. - Update the
windowscrate to 0.29.0 andwebview2-comto 0.9.0. - Update the
windowscrate to 0.30.0 andwebview2-comto 0.10.0.
\[0.12.2]
Fixed a Linux multi-window issue where the internal url loader didn't unlock when flushed while empty
The custom protocol now returns a
Requestand expects aResponse.This allows us to get the complete request from the Webview. (Method, GET, POST, PUT etc..)
Read the complete header.And allow us to be more flexible in the future without bringing breaking changes.
d202573 refactor: Custom protocol request/response (#387) on 2021-08-22
On Linux, automation callbacks now use the first created webview as the return value
\[0.12.1]
- Add html attributes as another method to load the page. This can provide some other origin header and make CORS request
possible. - Shorter protocol name on Windows. This can make origin be shorter too.
\[0.12.0]
- Custom Protocol handlers no longer take a
&Windowparameter. - Update gtk to version 0.14. This also remove requirement of
clang. - Update tao to v0.5. Please see release notes on tao for more information.
- Add flags to support all other possible unix systems.
- Support having multiple webkit2gtk
WebViews on a singleWebContext. - On Windows, Fix cursor flickering when Tao window is without decorations
- Remove winrt support since it's outdated for a long time. We will reimplement it again once
windws-rsis stable!
\[0.11.0]
- Allow resizing of borderless window on Windows
- Mark enums as
#[non_exhaustive]to prevent breaking changes on enum update. - Bump tao to
0.4. Please refer totaochangelog for more details. - Add
focusmethod toWebview
- Add
- Add
WebviewExtWindowstrait withcontrollermethod - 621ed1f feat: add
.focus()toWebview(#325) on 2021-07-05 - 96b7b94 Add controller method instead (#326) on 2021-07-07
- macOS: Remove handler in the webview as it should be handled with the menu.
- Fixes multiple custom protocols registration on Windows.
\[0.10.3]
- #315 fixed Webview2 runtime performance issues.
\[0.10.2]
- Fix file explorer getting blocked by automation.
\[0.10.1]
WebContext::set_allows_automationis now available to specify if the context should allow automation (e.g. WebDriver).
It is only enforced on Linux, but may expand platforms in the future.
\[0.10.0]
- Add WebViewAttributes
- Add
with_web_contextmethod that can work well with builder pattern. - Change the custom protocol handler on macOS so it returns a response on error and a status code on success.
- Update signature of custom protocol closure. It should return a mime type string now.
- Fix webview creation when using new_any_thread of event loop.
- Remove
Dispatcher,dispatch_scriptanddispatcherin thewebviewmodule and add ajsparameter toevaluate_script. - Removes the
imagedependency. - Bump tao to
0.3and add more examples.
For more details, please refer to tao changelog.
- cd4697e bump
taoto 0.3 with examples (#294) on 2021-06-21 - Add
wry::webview::WebContext. It's now a required argument onWebViewBuilder::build.
\[0.9.4]
- Update tao to v0.2.6
\[0.9.3]
- Expose
webview_versionfunction in thewebviewmodule. - Add print method on Linux and Windows.
- Disable smooth scrolling on Linux to match behaviour on browsers.
\[0.9.2]
\[0.9.1]
- Correctly set visibility when building
Windowon gtk-backend - Fix
macOScursors and other minors UI glitch. - Expose
print()function to the webview. Work only on macOS for now. - Fix macOS windows order for tray (statusbar) applications.
- Add
request_redrawmethod ofWindowon Linux - Add tao as window dependency.
- Close the window when the instance is dropped on Linux and Windows.
- Remove winit dependency on Linux
\[0.9.0]
- Refactor signatures of most closure types
- Drop handler closures properly on macOS.
- Fix
history.pushStatein webview2. - The
data_directoryfield now affects the IndexedDB and LocalStorage directories on Linux. - Fix runtime panic on macOS, when no file handler are defined.
- Add position field on WindowAttribute
- Fix panic on multiple custom protocols registration.
- Fix SVG render with the custom protocol.
- Initial custom WindowExtWindows trait.
- Fix transparency on Windows
- Add platform module and WindowExtUnix trait on Linux
- Make sure custom protocol on Windows is over HTTPS.
- Initial winit interface for gtk backend
\[0.8.0]
- Wry now accepts multiple custom protocol registrations.
- Apply license header for SPDX compliance.
- Remove bindings crate and use windows-webview2 as dependency instead.
\[0.7.0]
- Add old win32 implementation on windows as default feature flag.
- Adds a
WindowProxyto the file drop handler closure -WindowFileDropHandler.
\[0.6.2]
- Add pipe back to version check for covector config. This prevents the CI failure on publish if it exists already. The issue was patched in covector (and tests in place so it doesn't break in the future).
- Fix messages to the webview from the backend being delayed on Linux/GTK when the user is not actively engaged with the UI.
- Add draggable regions, just add
drag-regionclass to the html element. - Add event listener in application proxy
- Better result error handling
- Fix visibility on webview2 when window was invisible previously and then shown.
\[0.6.1]
- Add attribute option to allow WebView on Windows use user_data folder
\[0.6.0]
- Initialize covector!
- Support Windows 7, 8, and 10
- Dev tools are enabled on debug build
- Add skip task bar option
- Add custom protocol option
- Add transparent option to mac and linux
- Error type has Send/Sync traits
- 3536b83 Add .changes file in prepare of v0.6 on 2021-02-24
- Replace Callback with RPC handler
- Add File drop handlers
File: MOBILE.md
Mobile Setup for Wry
We use cargo-mobile2 to create a mobile project for both Xcode and Android studio.
Prerequisite
- Works on Linux, Windows, macOS, and WSL(Windows subsystem for Linux).
- Xcode and Android Studio installed properly. This is the most difficult part IMHO. This means all toolchains and SDK are all installed. Please report an issue with comprehensive steps if you encounter any problem.
Setting up Android Environment
1. Installing JDK
Using Android Studio:
If you have Android Studio installed, it ships with a version of JDK so you don't have to install it manually. It is usually at /jre. It will be used for JAVA_HOME env var.
On macOS, it can be found at
/Applications/Android\ Studio.app/Contents/jbr/Contents/Home
On Windows, it can be found atC:\Program Files\Android\Android Studio\jre
Using the terminal:
Linux/WSL
Install it by running the following command based on your distro to install JDK:
- debian-basedtext
sudo apt install default-jdk - arch-basedtext
sudo pacman -S jdk-openjdk
- debian-based
Set the
JAVA_HOMEenv variable for this current shell (we will make it permanent later on)bashexport JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
macOS
- Install openjdk from Homebrew:
brew install openjdk- Link to system Java wrapper and set the
JAVA_HOMEenv:
sudo ln -sfn /opt/homebrew/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
export JAVA_HOME="/Library/Java/JavaVirtualMachines/openjdk.jdk/Contents/Home"Windows
- Download openjdk-11powershell
cd $HOME\downloads Invoke-WebRequest https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_windows-x64_bin.zip -o openjdk-11.zip Expand-Archive openjdk-11.zip -d . mkdir $env:LocalAppData\Java mv jdk-11.0.2 $env:LocalAppData\Java - Set the
JAVA_HOMEenv variable for this current shell (we will make it permanent later on)powershell$env:JAVA_HOME="$env:LocalAppData\Java\jdk-11.0.2"
2. Installing Android SDK and NDK
There are two ways to install the sdk and ndk.
Using Android Studio:
You can use the SDK Manager in Android Studio to install:
- Android Sdk Platform 33
- Android SDK Platform-Tools
- NDK (Side by side) 25.0.8775105
- Android SDK Build-Tools 33.0.
- Android SDK Command-line Tools
Note: you may need to tick
Show Package Detailsin the right bottom corner to be able to see some of these components
Using the terminal:
If you don't want or can't use Android Studio you can still get the SDK Manager cli quite easily and use it to install other components.
Note: The SDK Manager is part of the "Command line tools only" that can be downloaded from here
Linux/WSL/macOS
Download the cmdline-tools
cd ~/Downloads
# if you are on Linux/WSL:
wget https://dl.google.com/android/repository/commandlinetools-linux-8512546_latest.zip -O
# if you are on macos:
wget https://dl.google.com/android/repository/commandlinetools-mac-8512546_latest.zip -O
unzip cmdline-tools.zip
cd cmdline-tools
mkdir latest
mv bin latest/
mv lib latest/
mv NOTICE.txt latest/
mv source.properties latest/
cd ..
mkdir ~/.android # You can use another location for your SDK but I prefer using ~/.android
mv cmdline-tools ~/.androidInstall required SDK and NDK components
export ANDROID_HOME="$HOME/.android"
~/.android/cmdline-tools/latest/bin/sdkmanager "platforms;android-33" "platform-tools" "ndk;25.0.8775105" "build-tools;33.0.0"
# Install the emulator if you plan on using a virtual device later
~/.android/cmdline-tools/latest/bin/sdkmanager "emulator"Windows
Download the cmdline-tools
cd $HOME\downloads
Invoke-WebRequest https://dl.google.com/android/repository/commandlinetools-win-8512546_latest.zip -o cmdline-tools.zip
Expand-Archive cmdline-tools.zip -d .
cd cmdline-tools
mkdir latest
mv bin latest/
mv lib latest/
mv NOTICE.txt latest/
mv source.properties latest/
cd ..
mkdir $HOME\.android # You can use another location for your SDK but I prefer using $HOME\.android
mv cmdline-tools $HOME\.androidInstall required SDK and NDK components
$env:ANDROID_HOME="$HOME\.android"
&"$env:ANDROID_HOME\cmdline-tools\latest\bin\sdkmanager.exe" "platforms;android-33" "platform-tools" "ndk;25.0.8775105" "build-tools;33.0.0"
# Install the emulator if you plan on using a virtual device later
&"$env:ANDROID_HOME\cmdline-tools\latest\bin\sdkmanager.exe" "emulator"Note: the location you moved the
cmdline-toolsdirectory into will be the location of your android SDK.
3. Setting up Environment Variables
You'll need to set up some environment variables to get everything to work properly. The environment variables below should be all the ones your need to be able to use cargo-mobile2 to build/run your android app.
Linux/WSL/macOS
- Setting
JAVA_HOME:
# In .bashrc or .zshrc:
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
# If you are using Android studio, on Linux, it is:
export JAVA_HOME=/opt/android-studio/jre
# And on macOS, it is:
export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home- Setting
ANDROID_HOME:
export ANDROID_HOME="$HOME/.android"
# If you are using Android studio, on Linux, it is:
export ANDROID_HOME="$HOME/Android/Sdk"
# And on macOS, it is:
export ANDROID_HOME="$HOME/Library/Android/sdk"- Setting
PATH:
export NDK_HOME="$ANDROID_HOME/ndk/25.0.8775105" # The patch version might be different
export PATH="$PATH:$ANDROID_HOME/cmdline-tools/latest/bin"
export PATH="$PATH:$ANDROID_HOME/platform-tools"For WSL:
you also need to get ADB to connect to your emulator that is running on Windowsbashexport WSL_HOST="192.168.1.2" # Run `ipconfig` in windows to get your computer IP export ADB_SERVER_SOCKET=tcp:$WSL_HOST:5037
After updating .bashrc either run source ~/.bashrc or reopen your terminal to apply the changes.
Windows
Open a powershell instance and run the following commands in order
Function Add-EnvVar($name, $value) { [System.Environment]::SetEnvironmentVariable("$name", "$value", "User") }
Function Add-PATHEntry($path) { $newPath = [System.Environment]::GetEnvironmentVariable("Path", "User") + ";" + $path; [System.Environment]::SetEnvironmentVariable("Path", "$newPath", "User") }
Add-EnvVar JAVA_HOME "$env:LocalAppData\Java\jdk-11.0.2" # if you are using Android studio, the location is different, see the section above about JDK
$env:SDK_ROOT="$HOME\.android"# if you are using Android studio, the sdk location will be at `$env:LocalAppData\Android\Sdk`
Add-EnvVar ANDROID_HOME "$env:SDK_ROOT"
Add-EnvVar NDK_HOME "$env:SDK_ROOT\ndk\25.0.8775105"
Add-PATHEntry "$env:SDK_ROOT\cmdline-tools\latest\bin"
Add-PATHEntry "$env:SDK_ROOT\platform-tools"IMPORTANT: you need to reboot your Windows machine in order for the environement variables to be loaded correctly.
You should now have all the environment variables required and the cmdline-tools available in your PATH. You can verify this by running sdkmanager which should now be showing its help info.
4. Install Rust android targets:
rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-androidGetting Started
Now lets bootstrap a project to develop a tauri or wry project for mobile.
- Install cargo-mobile2 CLI by running:bash
cargo install --git https://github.com/tauri-apps/cargo-mobile2 - Create a directory and init the project.bash
mkdir hello cd hello cargo mobile init # Project name (hello): # Stylized name (Hello): # Domain (example.com): tauri.app # Detected template packs: # [0] bevy # [1] bevy-demo # [2] wgpu # [3] winit # [4] wry # Enter an index for a template pack above. # Template pack (0): 4
Build and Run on Device
Android
Make sure you're device is connected to adb
you can check by runningcargo android listoradb devices
cargo android run
iOS
cargo build --target aarch64-apple-ioscargo apple run
First time running the app will be blocked. Go to your phone's Settings > Privacy & Security > Developer Mode to enable developer mode. And then go to Settings -> General -> VPN and device management -> From "Developer App" section to press "Apple Development: APPLE_ID" -> Trust.
Build and Run on Emulator
Android
Using Android Studio
- Open the project in Android Studio
cargo android open - Click
Trust Project,Use Embedded JDK - Choose an emulator. I usually choose Pixel 4 API 32
- (optional) if you face this error
Device supports x86, but APK only supports armeabi-v7athen check this Stack Overflow answer to fix it. - Press run button.
Without Android Studio
If you don't have access to Android Studio or don't want or when running in WSL, you can build and run the generated project directly from the terminal
- List available emulators
- Linux/WSL/macOS:bash
$ANDROID_HOME/emulator/emulator -list-avds - Windows:you should now see a list of available emulators like the following, you'll need one of them for the next step:powershell
&"$env:ANDROID_HOME\emulator\emulator" -list-avds
textResizable_API_33 Pixel_5_API_33 - Linux/WSL/macOS:
- Start the emulator with the name of the desired emulator:
- Linux/WSL/macOS:bash
$ANDROID_HOME/emulator/emulator -avd Resizable_API_33 - Windows:powershell
&"$env:ANDROID_HOME\emulator\emulator" -avd Resizable_API_33
- Linux/WSL/macOS:
- In a new terminal window, run:bash
cargo android run
iOS
- If you are on x86_64:
cargo build --target x86_64-apple-ios - If you are on M1:
cargo build --target aarch64-apple-ios-sim cargo apple open- Choose a simulator.
- Press run button.
Devtools
Set devtools attribute to true when building webview.
Android
Open chrome://inspect/#devices in Chrome to get the devtools window.
iOS
Open Safari > Develop > [Your Device Name] > [Your WebView].
File: renovate.json
{
"extends": ["config:recommended"],
"rangeStrategy": "replace",
"packageRules": [
{
"semanticCommitType": "chore",
"matchPackageNames": ["*"]
}
]
}
File: SECURITY.md
Security Policy
Supported Versions
| Version | Supported |
|---|---|
| > 1.0 | :white_check_mark: |
| < 1.0 | :x: |
Reporting a Vulnerability
If you have found a potential security threat, vulnerability or exploit in Tauri
or one of its upstream dependencies, please DONโT create a pull-request, DONโT
file an issue on GitHub, DONโT mention it on Discord and DONโT create a forum thread.
We will be adding contact information to this page very soon.
At the current time we do not have the financial ability to reward bounties,
but in extreme cases will at our discretion consider a reward.
File: .changes/readme.md
Changes
via https://github.com/jbolda/covector
As you create PRs and make changes that require a version bump, please add a new markdown file in this folder. You do not note the version number, but rather the type of bump that you expect: major, minor, or patch. The filename is not important, as long as it is a .md, but we recommend that it represents the overall change for organizational purposes.
When you select the version bump required, you do not need to consider dependencies. Only note the package with the actual change, and any packages that depend on that package will be bumped automatically in the process.
Use the following format:
---
"wry": patch
---
Change summary goes hereSummaries do not have a specific character limit, but are text only. These summaries are used within the (future implementation of) changelogs. They will give context to the change and also point back to the original PR if more details and context are needed.
Changes will be designated as a major, minor or patch as further described in semver.
Given a version number MAJOR.MINOR.PATCH, increment the:
- MAJOR version when you make incompatible API changes,
- MINOR version when you add functionality in a backwards compatible manner, and
- PATCH version when you make backwards compatible bug fixes.
Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format, but will be discussed prior to usage (as extra steps will be necessary in consideration of merging and publishing).
File: .changes/android-activity-id-extras.md
wry: patch
On Android, read __wryActivityId only when the intent or saved state contains it.
File: .changes/android-init-scripts-once.md
wry: patch
On Android, run initialization scripts once on URLs that are not intercepted by a custom protocol when the WebView supports DOCUMENT_START_SCRIPT, instead of a second time from onPageStarted.
File: .changes/android-inline-html-ipc.md
"wry": patch:bug
On Android, load with_html and load_html content at about:blank so IPC messages reach the handler.
File: .changes/android-range-requests.md
wry: patch
On Android, stop the WebView from applying the Range header a second time to a custom protocol 206 response, and serve ranges past 2 GiB.
File: .changes/conditional-linux-ipc-bridge.md
"wry": patch:bug
Only inject the Linux WebKitGTK window.ipc bridge when an IPC handler is configured.
File: .changes/config.json
{
"gitSiteUrl": "https://github.com/tauri-apps/wry/",
"timeout": 3600000,
"additionalBumpTypes": ["housekeeping"],
"pkgManagers": {
"rust": {
"version": true,
"getPublishedVersion": {
"use": "fetch:check",
"options": {
"url": "https://crates.io/api/v1/crates/${ pkg.pkg }/${ pkg.pkgFile.version }"
}
},
"prepublish": [
{
"command": "cargo install cargo-audit --features=fix",
"dryRunCommand": true
},
{
"command": "echo '\n*
Cargo Audit
\n\n'", "dryRunCommand": true, "pipe": true }, { "command": "cargo generate-lockfile", "dryRunCommand": true, "runFromRoot": true, "pipe": true }, { "command": "cargo audit ${ process.env.CARGO_AUDIT_OPTIONS || '' }", "dryRunCommand": true, "runFromRoot": true, "pipe": true }, { "command": "echo '\n\n\n'","dryRunCommand": true,
"pipe": true
}
],
"publish": [
{
"command": "echo '\n
Cargo Publish
*\n\n'", "dryRunCommand": true, "pipe": true }, { "command": "cargo publish --no-verify --allow-dirty", "dryRunCommand": "cargo publish --no-verify --allow-dirty --dry-run", "pipe": true }, { "command": "echo '\n\n\n'","dryRunCommand": true,
"pipe": true
}
],
"postpublish": [
"git tag ${ pkg.pkg }-v${ pkgFile.versionMajor } -f",
"git tag ${ pkg.pkg }-v${ pkgFile.versionMajor }.${ pkgFile.versionMinor } -f",
"git push --tags -f"
]
}
},
"packages": {
"wry": {
"path": "./",
"manager": "rust"
}
}
}
File: .changes/edition-2024.md
wry: patch
Moved to edition 2024
File: .changes/linux-download-failure-isolation.md
"wry": patch
On Linux, isolate download failure state per download so a canceled or failed download does not make later successful downloads report failure.
File: .changes/log-eval-errors.md
wry: patch
Log eval exceptions when tracing feature's enabled at debug level.
File: .changes/macos-background-activation.md
"wry": patch
On macOS, only activate the application and request initial keyboard focus when the new webview is both visible and focused. Creating hidden or unfocused webviews no longer steals focus.
File: .changes/macos-shared-config-child-webview.md
wry: patch
On macOS, a webview built on its opener's configuration (NewWindowResponse::Create with WebViewBuilderExtMacos::with_webview_configuration) shares the opener's WKUserContentController, so it no longer adds its own initialization scripts and IPC handler to it: the opener's scripts and ipc handler already serve it. This stops every opened window from growing the opener's script set, and stops dropping the new webview from removing the opener's ipc handler.
File: .github/CODE_OF_CONDUCT.md
Contributor Code of Conduct
As contributors and maintainers of this project, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, age, or religion.
Examples of unacceptable behavior by participants include the use of sexual language or imagery, derogatory comments or personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. Project maintainers who do not follow the Code of Conduct may be removed from the project team.
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers.
This Code of Conduct is adapted from the Contributor Covenant, version 1.0.0, available at http://contributor-covenant.org/version/1/0/0/
File: .github/FUNDING.yml
These are supported funding model platforms
github: #
patreon: #
open_collective: tauri
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
custom: # Replace with a single custom sponsorship URL
File: .github/PULL_REQUEST_TEMPLATE.md
File: .github/ISSUE_TEMPLATE/bug_report.md
name: Bug report
about: Create a report to help us improve wry
title: ''
labels: 'type: bug'
assignees: ''
Describe the bug
A clear and concise description of what the bug is.
Steps To Reproduce
Steps to reproduce the behavior. It must use wry directly instead of tauri.
Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Platform and Versions (please complete the following information):
OS:
Rustc:
Additional context
Add any other context about the problem here.
File: .github/ISSUE_TEMPLATE/feature_request.md
name: Feature request
about: Suggest an idea for Tauri
title: ''
labels: feature request
assignees: ''
Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
Describe the solution you'd like
A clear and concise description of what you want to happen.
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Additional context
Add any other context or screenshots about the feature request here.
File: .github/workflows/audit.yml
Copyright 2022-2022 Tauri Programme within The Commons Conservancy
SPDX-License-Identifier: Apache-2.0
SPDX-License-Identifier: MIT
name: audit
on:
workflow_dispatch:
schedule:
- cron: '0 0 * * *'
push:
branches:
- dev
paths:
- 'Cargo.lock'
- 'Cargo.toml'
pull_request:
paths:
- 'Cargo.lock'
- 'Cargo.toml'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
issues: write
checks: write
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: rustsec/audit-check@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}
File: .github/workflows/bench.yml
name: benches
on:
push:
branches:
- dev
workflow_dispatch:
pull_request:
paths:
- '.github/workflows/bench.yml'
- 'bench/**'
env:
RUST_BACKTRACE: 1
CARGO_PROFILE_DEV_DEBUG: 0 # This would add unnecessary bloat to the target folder, decreasing cache efficiency.
LC_ALL: en_US.UTF-8 # This prevents strace from changing its number format to use commas.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
bench:
strategy:
fail-fast: false
matrix:
rust: [nightly]
platform:
- { target: x86_64-unknown-linux-gnu, os: ubuntu-latest, runner: 'xvfb-run --auto-servernum ' }
- { target: x86_64-pc-windows-msvc, os: windows-latest, runner: '' }
- { target: aarch64-apple-darwin, os: macos-latest, runner: '' }
runs-on: ${{ matrix.platform.os }}
steps:
- uses: actions/checkout@v6
- name: install Rust ${{ matrix.rust }}
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust }}
components: rust-src
targets: ${{ matrix.platform.target }}
- name: install webkit2gtk and xvfb (ubuntu only)
if: contains(matrix.platform.target, 'gnu')
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
libwebkit2gtk-4.1-dev libayatana-appindicator3-dev \
xvfb \
at-spi2-core
- name: Setup python
uses: actions/setup-python@v6
with:
python-version: '3.13'
- name: install memory_profiler
run: |
python -m pip install --upgrade pip
pip install memory_profiler
- name: Install cargo-binstall
uses: cargo-bins/[email protected]
- name: Install hyperfine
run: cargo binstall [email protected] --no-confirm
- uses: Swatinem/rust-cache@v2
with:
workspaces: |
.
bench/tests
- name: build benchmark binaries
env:
RUSTFLAGS: "-Zunstable-options -Cpanic=immediate-abort"
run: cargo +nightly build --release -Z build-std=std,panic_abort -Z build-std-features= --target ${{ matrix.platform.target }} --manifest-path bench/tests/Cargo.toml
- name: run benchmarks
run: ${{ matrix.platform.runner }}cargo run --manifest-path ./bench/Cargo.toml --bin run_benchmark
- name: clone benchmarks_results
if: github.repository == 'tauri-apps/wry' && github.ref == 'refs/heads/dev'
uses: actions/checkout@v4
with:
token: ${{ secrets.ORG_TAURI_BOT_PAT }}
path: gh-pages
- name: push new benchmarks
if: github.repository == 'tauri-apps/wry' && github.ref == 'refs/heads/dev'
run: |
cargo run --manifest-path ./bench/Cargo.toml --bin build_benchmark_jsons
cd gh-pages
git pull
git config user.name "tauri-bot"
git config user.email "[email protected]"
git add .
git commit --message "Update WRY benchmarks"
git push origin gh-pages
- name: Print worker info
# TODO: How to print this info on macOS and Windows
if: contains(matrix.platform.target, 'gnu')
run: |
cat /proc/cpuinfo
cat /proc/meminfoFile: .github/workflows/build.yml
name: test
on:
push:
branches:
- dev
pull_request:
permissions:
contents: read
jobs:
test:
strategy:
fail-fast: false
matrix:
platform:
- { target: x86_64-pc-windows-msvc, os: windows-latest }
- { target: x86_64-unknown-linux-gnu, os: ubuntu-latest }
- { target: aarch64-apple-darwin, os: macos-latest }
- { target: aarch64-apple-ios, os: macos-latest }
- { target: x86_64-apple-darwin, os: macos-latest }
- { target: aarch64-linux-android, os: ubuntu-latest }
features:
- {
args: --no-default-features --features os-webview,
key: no-default,
}
- { args: --all-features, key: all }
runs-on: ${{ matrix.platform.os }}
steps:
- uses: actions/checkout@v4
- name: install stable
uses: dtolnay/[email protected]
with:
targets: ${{ matrix.platform.target }}
- name: install webkit2gtk (ubuntu only)
if: contains(matrix.platform.target, 'gnu')
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev
- name: install webview2 (windows only)
if: contains(matrix.platform.target, 'windows')
shell: pwsh
run: |
Invoke-WebRequest https://go.microsoft.com/fwlink/p/?LinkId=2124703 -OutFile installwebview.exe -UseBasicParsing
cmd /C start /wait installwebview.exe /silent /install
- uses: Swatinem/rust-cache@v2
with:
save-if: ${{ matrix.features.key == 'all' }}
- name: build wry
run: cargo build --target ${{ matrix.platform.target }} ${{ matrix.features.args }}
- name: build tests and examples
shell: bash
if: (!contains(matrix.platform.target, 'android') && !contains(matrix.platform.target, 'ios'))
run: cargo test --no-run --verbose --target ${{ matrix.platform.target }} ${{ matrix.features.args }}
- name: run tests
if: (!contains(matrix.platform.target, 'android') && !contains(matrix.platform.target, 'ios'))
run: cargo test --verbose --target ${{ matrix.platform.target }} --features linux-body ${{ matrix.features.args }}
- name: install nightly
uses: dtolnay/rust-toolchain@nightly
with:
targets: ${{ matrix.platform.target }}
components: miri
- name: Run tests with miri
if: (!contains(matrix.platform.target, 'android') && !contains(matrix.platform.target, 'ios'))
run: cargo +nightly miri test --verbose --target ${{ matrix.platform.target }} --features linux-body ${{ matrix.features.args }} doc:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: install nightly
uses: dtolnay/rust-toolchain@nightly
- name: install webkit2gtk
run: |
sudo apt-get update -y -q
sudo apt-get install -y --no-install-recommends libwebkit2gtk-4.1-dev
- name: Run cargo doc with each targets
env:
DOCS_RS: true
run: |
set -ex
md="$(cargo metadata --format-version=1 | jq '.packages[] | select(.name=="wry") | .metadata.docs.rs')"
export RUSTDOCFLAGS="$(echo "$md" | jq -r '.["rustdoc-args"] | join(" ")')"
export RUSTFLAGS="$(echo "$md" | jq -r '.["rustc-args"] | join(" ")')"
features="$(echo "$md" | jq -r '.features | join(",")')"
no_default_features=
if [ "$(echo "$md" | jq '.["no-default-features"]')" = true ]; then
no_default_features="--no-default-features"
fi
for target in $(echo "$md" | jq -r '.targets | join(" ")')
do
rustup target add "$target"
cargo doc -p wry "$no_default_features" "--features=$features" "--target=$target"
doneFile: .github/workflows/clippy-fmt.yml
Copyright 2022-2022 Tauri Programme within The Commons Conservancy
SPDX-License-Identifier: Apache-2.0
SPDX-License-Identifier: MIT
name: clippy & fmt
on:
push:
branches:
- dev
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
clippy:
strategy:
fail-fast: false
matrix:
platform: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v4
- name: install system deps
if: matrix.platform == 'ubuntu-latest'
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- run: cargo clippy --all-targets fmt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- run: cargo fmt --all -- --checkFile: .github/workflows/covector-comment-on-fork.yml
name: covector comment
on:
workflow_run:
workflows: [covector status] # the name of the workflow run on pull_request running status with comment: true
types:
- completed
note all other permissions are set to none if not specified
and these set the permissions for `secrets.GITHUB_TOKEN`
permissions:
to read the action artifacts on `covector status` workflows
actions: read
to write the comment
pull-requests: write
jobs:
download:
runs-on: ubuntu-latest
if: github.event.workflow_run.conclusion == 'success' &&
(github.event.workflow_run.head_repository.full_name != github.repository || github.actor == 'dependabot[bot]')
steps:
- name: covector status
uses: jbolda/covector/packages/action@covector-v0
with:
token: ${{ secrets.GITHUB_TOKEN }}
command: "status"
File: .github/workflows/covector-status.yml
name: covector status
on: [pull_request]
permissions:
contents: read
jobs:
covector:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: covector status
uses: jbolda/covector/packages/action@covector-v0
with:
command: "status"
token: ${{ secrets.GITHUB_TOKEN }}
comment: trueFile: .github/workflows/covector-version-or-publish.yml
name: covector version or publish
on:
push:
branches:
- dev
permissions:
required to create the GitHub Release
contents: write
required for creating the Version Packages Release
pull-requests: write
jobs:
version-or-publish:
runs-on: ubuntu-latest
timeout-minutes: 65
outputs:
change: ${{ steps.covector.outputs.change }}
commandRan: ${{ steps.covector.outputs.commandRan }}
successfulPublish: ${{ steps.covector.outputs.successfulPublish }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # required for use of git history
- name: cargo login
run: cargo login ${{ secrets.ORG_CRATES_IO_TOKEN }}
- name: git config
run: |
git config --global user.name "${{ github.event.pusher.name }}"
git config --global user.email "${{ github.event.pusher.email }}"
- name: covector version or publish (publish when no change files present)
uses: jbolda/covector/packages/action@covector-v0
id: covector
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
CARGO_AUDIT_OPTIONS: ${{ secrets.CARGO_AUDIT_OPTIONS }}
with:
token: ${{ secrets.GITHUB_TOKEN }}
command: "version-or-publish"
createRelease: true
recognizeContributors: true
- name: install cargo-readme
if: steps.covector.outputs.commandRan == 'version'
run: cargo install cargo-readme --locked
- run: cargo readme --no-title --no-license > README.md
if: steps.covector.outputs.commandRan == 'version'
- name: Sync Cargo.lock
if: steps.covector.outputs.commandRan == 'version'
run: cargo tree --depth 0
- name: Create Pull Request With Versions Bumped
id: cpr
uses: peter-evans/[email protected]
if: steps.covector.outputs.commandRan == 'version'
with:
token: ${{ secrets.GITHUB_TOKEN }}
title: Apply Version Updates From Current Changes
commit-message: "apply version updates"
labels: "version updates"
branch: "ci/pending-release"
body: ${{ steps.covector.outputs.change }}
sign-commits: true