tauri-runtime-v3.0.0-alpha.0
firecrawl/pdf-inspectortauri-runtime-v3.0.0-alpha.0Sep 12, 2026by github-actions[bot]
Upgrading?
AI Summary
This release introduces the v3 alpha of the Tauri runtime, featuring a type-erased `DynRuntime` module for flexibility, an updated Minimum Supported Rust Version (MSRV) of 1.95, and significant architectural changes regarding GTK integration and runtime-specific method signatures.
Key Highlights
- Introduction of the `tauri_runtime::dynamic` module with `DynRuntime` for type-erased runtime handling.
- MSRV updated to Rust 1.95.
- GTK types crossing the runtime boundary changed to version-agnostic raw pointers.
- Custom scheme URL format moved from the platform to the runtime layer.
Breaking Changes
- `WebviewDispatch::open_devtools`, `close_devtools`, and `is_devtools_open` are now required regardless of the `devtools` feature.
- GTK types (e.g., `WindowDispatch::gtk_window`) now return `*mut c_void` instead of concrete types.
- Custom scheme URL format moved to `RuntimeHandle::custom_scheme_url`.
- `RuntimeSpecificInitAttrs` renamed to `RuntimeInitAttrs` and removed generic implementation for `()`.
- `tauri::webview_version` function removed in favor of `App::webview_version`.
New Features
- Added `tauri_runtime::dynamic` module with `DynRuntime`, `DynWebview`, and `DynWindowOpener` wrappers.
- Added `RuntimeHandle::webview_version` method and `WebviewDispatch::with_ios_webview` method.
Full Release Notes
<details>
<summary><em><h4>Cargo Audit</h4></em></summary>
```
Fetching advisory database from `https://github.com/RustSec/advisory-db.git`
Loaded 1243 security advisories (from /home/runner/.cargo/advisory-db)
Updating crates.io index
Scanning Cargo.lock for vulnerabilities (1217 crate dependencies)
Crate: fxhash
Version: 0.2.1
Warning: unmaintained
Title: fxhash - no longer maintained
Date: 2025-09-05
ID: RUSTSEC-2025-0057
URL: https://rustsec.org/advisories/RUSTSEC-2025-0057
Crate: paste
Version: 1.0.15
Warning: unmaintained
Title: paste - no longer maintained
Date: 2024-10-07
ID: RUSTSEC-2024-0436
URL: https://rustsec.org/advisories/RUSTSEC-2024-0436
Crate: rustls-pemfile
Version: 2.2.0
Warning: unmaintained
Title: rustls-pemfile is unmaintained
Date: 2025-11-28
ID: RUSTSEC-2025-0134
URL: https://rustsec.org/advisories/RUSTSEC-2025-0134
Crate: rustybuzz
Version: 0.20.1
Warning: unmaintained
Title: `rustybuzz` is unmaintained
Date: 2026-07-11
ID: RUSTSEC-2026-0206
URL: https://rustsec.org/advisories/RUSTSEC-2026-0206
Crate: ttf-parser
Version: 0.25.1
Warning: unmaintained
Title: `ttf-parser` is unmaintained
Date: 2026-06-28
ID: RUSTSEC-2026-0192
URL: https://rustsec.org/advisories/RUSTSEC-2026-0192
warning: 5 allowed warnings found
```
</details>
## [3.0.0-alpha.0]
### New Features
- [`1e5ba7b53`](https://www.github.com/tauri-apps/tauri/commit/1e5ba7b53dfb3da97f372b646f15853e5ba0e1a8) ([#15985](https://www.github.com/tauri-apps/tauri/pull/15985)) Added the `tauri_runtime::dynamic` module with `DynRuntime`, a type-erased `Runtime` that wraps any concrete runtime selected at build time through `DynRuntimeInitAttrs`, along with `DynWebview`, `DynWindowOpener` and `DynWebviewAttributes` wrappers that can be downcast to the runtime's types.
### What's Changed
- [`c9277f3c0`](https://www.github.com/tauri-apps/tauri/commit/c9277f3c0c24518a7ab7d7d1f2489e004b1597f7) Set MSRV to 1.95.
- [`19929799f`](https://www.github.com/tauri-apps/tauri/commit/19929799f42398a6e85adb00ae02f2e7fe46d214) First v3 alpha release!
### Dependencies
- Upgraded to `tauri-utils@3.0.0-alpha.0`
### Breaking Changes
- [`1e5ba7b53`](https://www.github.com/tauri-apps/tauri/commit/1e5ba7b53dfb3da97f372b646f15853e5ba0e1a8) ([#15985](https://www.github.com/tauri-apps/tauri/pull/15985)) `WebviewDispatch::open_devtools`, `close_devtools` and `is_devtools_open` are now required regardless of the `devtools` feature, so the type-erased runtime can forward them. Runtimes should keep their implementation behind the feature and no-op without it.
- [`c8c75b1f7`](https://www.github.com/tauri-apps/tauri/commit/c8c75b1f7f43e7cb1e7d773ed2f6f96fad2fe975) ([#15787](https://www.github.com/tauri-apps/tauri/pull/15787)) The GTK types crossing the runtime boundary are now version-agnostic raw pointers, so a runtime can use a GTK version different from the one the `tauri` crate was built with:
- `WindowDispatch::gtk_window` and `WindowDispatch::default_vbox` return `*mut c_void` (`GtkApplicationWindow*` / `GtkBox*`) instead of `gtk::ApplicationWindow` / `gtk::Box`. Both are *transfer full*: the implementation hands out a strong reference (glib's `to_glib_full`) and the caller releases it (`from_glib_full`).
- `WindowBuilder::transient_for` takes the parent as `*mut c_void` (`GtkWindow*`), also *transfer full*: the implementation must release the reference, including when it does not support transient windows.
- `RawWindow::gtk_window` and `RawWindow::default_vbox` are `*mut c_void` as well, but *transfer none*: they are borrowed for the duration of the callback and must be wrapped with `from_glib_none`.
- `tauri_runtime_wry::GtkWindow` and `tauri_runtime_wry::GtkBox` are newtypes over `*mut c_void`.
`tauri-runtime` no longer depends on the `gtk` crate.
The new `tauri_runtime::gtk` module carries the GTK version a runtime binds to: runtimes call `gtk::declare_version` before creating windows so `tauri`, which picks its bindings at compile time, can detect a mismatch instead of reinterpreting a GTK object of the other version.
- [`1e5ba7b53`](https://www.github.com/tauri-apps/tauri/commit/1e5ba7b53dfb3da97f372b646f15853e5ba0e1a8) ([#15985](https://www.github.com/tauri-apps/tauri/pull/15985)) The custom scheme URL format (`tauri://localhost` or `http://tauri.localhost`) is now defined by the runtime instead of the platform: `Runtime::custom_scheme_url` moved to `RuntimeHandle::custom_scheme_url(&self, scheme, https)`, and the `convertFileSrc` JavaScript API takes the format from the runtime.
`tauri::test::MockRuntime` uses `tauri://localhost` on every platform, so tests that sent IPC requests from `http://tauri.localhost` on Windows and Android must use `tauri://localhost` instead.
- [`1e5ba7b53`](https://www.github.com/tauri-apps/tauri/commit/1e5ba7b53dfb3da97f372b646f15853e5ba0e1a8) ([#15985](https://www.github.com/tauri-apps/tauri/pull/15985)) Added the required `RuntimeHandle::webview_version` method, exposed as `App::webview_version` and `AppHandle::webview_version`. The `tauri::webview_version` function was removed since the version depends on the runtime in use.
- [`1e5ba7b53`](https://www.github.com/tauri-apps/tauri/commit/1e5ba7b53dfb3da97f372b646f15853e5ba0e1a8) ([#15985](https://www.github.com/tauri-apps/tauri/pull/15985)) Added the required `WebviewDispatch::with_ios_webview` method on iOS, which gives access to the platform webview, plugin manager and view controller pointers through the new `webview::IosWebviewHandle`, so `tauri` no longer downcasts to the wry webview.
- [`1e5ba7b53`](https://www.github.com/tauri-apps/tauri/commit/1e5ba7b53dfb3da97f372b646f15853e5ba0e1a8) ([#15985](https://www.github.com/tauri-apps/tauri/pull/15985)) `RuntimeSpecificInitAttrs` was renamed to `RuntimeInitAttrs` and now selects the runtime it belongs to:
- The trait is generic over the user event type and has a `type Runtime: Runtime<T, RuntimeInitAttrs = Self>` associated type, so the attributes alone identify the runtime.
- The implementation for `()` was removed, every runtime must define its own attributes type.
- Runtime crates must implement `From<Self>` for `dynamic::DynRuntimeInitAttrs` so their attributes can be passed to the type-erased builder.
- `Runtime::WindowOpener` and `window::WindowBuilderBase` now require `'static`, so they can be type-erased.
<details>
<summary><em><h4>Cargo Publish</h4></em></summary>
```
Updating crates.io index
Packaging tauri-runtime v3.0.0-alpha.0 (/home/runner/work/tauri/tauri/crates/tauri-runtime)
Updating crates.io index
Packaged 17 files, 258.4KiB (59.4KiB compressed)
Verifying tauri-runtime v3.0.0-alpha.0 (/home/runner/work/tauri/tauri/crates/tauri-runtime)
Downloading crates ...
Downloaded raw-window-handle v0.6.2
Downloaded dpi v0.1.2
Downloaded cookie v0.18.2
Compiling time-macros v0.2.32
Compiling cookie v0.18.2
Compiling tauri-runtime v3.0.0-alpha.0 (/home/runner/work/tauri/tauri/target/package/tauri-runtime-3.0.0-alpha.0)
Compiling dpi v0.1.2
Compiling raw-window-handle v0.6.2
Compiling time v0.3.55
Compiling plist v1.10.1
Compiling tauri-utils v3.0.0-alpha.0
Finished `dev` profile [unoptimized + debuginfo] target(s) in 8.19s
Uploading tauri-runtime v3.0.0-alpha.0 (/home/runner/work/tauri/tauri/crates/tauri-runtime)
Uploaded tauri-runtime v3.0.0-alpha.0 to registry `crates-io`
note: waiting for tauri-runtime v3.0.0-alpha.0 to be available at registry `crates-io`
help: you may press ctrl-c to skip waiting; the crate should be available shortly
Published tauri-runtime v3.0.0-alpha.0 at registry `crates-io`
```
</details>
Related Repositories
A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io
An open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.
Build smaller, faster, and more secure desktop and mobile applications with a web frontend.
π RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video.
Incredibly fast JavaScript runtime, bundler, test runner, and package manager – all in one