tauri-runtime-v3.0.0-alpha.0
hkjarral/AVA-AI-Voice-Agent-for-Asterisktauri-runtime-v3.0.0-alpha.0Sep 12, 2026by github-actions[bot]
Upgrading?
AI Summary
This is the first alpha release of the Tauri runtime module, introducing a type-erased system (`DynRuntime`) and significant architectural changes to support GTK version-agnostic bindings and centralized webview management.
Key Highlights
- Introduction of `DynRuntime` for type-erased runtime handling across different backends.
- GTK types changed to raw pointers (`*mut c_void`) to support different GTK versions.
- Devtools methods (`open_devtools`, `close_devtools`, `is_devtools_open`) moved to `RuntimeHandle`.
- Custom scheme URL format moved from platform to runtime configuration.
Breaking Changes
- `WebviewDispatch::open_devtools`, `close_devtools`, and `is_devtools_open` are now required regardless of the `devtools` feature.
- GTK types crossing the runtime boundary are now raw pointers (`*mut c_void`), and `tauri_runtime` no longer depends on the `gtk` crate.
- `tauri::webview_version` function was removed as version depends on the runtime.
- `RuntimeSpecificInitAttrs` was renamed to `RuntimeInitAttrs` and is now generic over user events.
New Features
- Added `tauri_runtime::dynamic` module with `DynRuntime` and related wrappers.
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
public-apis/public-apis★ 491,127
A collective list of free APIs
NousResearch/hermes-agent★ 255,899
The agent that grows with you
yt-dlp/yt-dlp★ 199,996
A feature-rich command-line audio/video downloader
microsoft/markitdown★ 191,480
Python tool for converting files and office documents to Markdown.
Significant-Gravitas/AutoGPT★ 187,700
AutoGPT is the vision of accessible AI for everyone, to use and to build on. Our mission is to provide the tools, so that you can focus on what matters.