tauri-v3.0.0-alpha.3

tauri-apps/tauritauri-v3.0.0-alpha.3Sep 26, 2026by github-actions[bot]

Upgrading?

AI Summary

This alpha release introduces new threading patterns for main thread execution and adds a cleanup hook for plugins before exit. It also removes obsolete methods and updates dependencies for the upcoming v3 version.

Key Highlights

  • Introduced `Manager::run_on_main_thread` and `Manager::run_on_main_thread_blocking` to replace direct calls.
  • Added `Plugin::cleanup_before_exit` hook for resource cleanup.
  • Removed `App/AppHandle/WebviewWindow/Window/Webview::run_on_main_thread` methods.
  • Removed the obsolete `objc-exception` feature flag.

Breaking Changes

  • Plugin hooks now require `Sync` and take `&self` instead of `&mut self`.
  • Removed `App/AppHandle/WebviewWindow/Window/Webview::run_on_main_thread` method.
  • Renamed `TrayIcon::with_inner_tray_icon` to `TrayIcon::with_inner_blocking`.
  • Removed position and size parameters from `Window::add_child`, use `WebviewBuilder` methods instead.

New Features

  • Added `Manager::run_on_main_thread` and `Manager::run_on_main_thread_blocking`.
  • Added `Plugin::cleanup_before_exit` hook.
  • Added `bounds`, `size`, and `position` methods to unstable `WebviewBuilder`.

Full Release Notes

<details>
<summary><em><h4>Cargo Audit</h4></em></summary>

```
Fetching advisory database from `https://github.com/RustSec/advisory-db.git`
      Loaded 1271 security advisories (from /home/runner/.cargo/advisory-db)
    Updating crates.io index
    Scanning Cargo.lock for vulnerabilities (1223 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.3]

### New Features

- [`20b45cc2c`](https://www.github.com/tauri-apps/tauri/commit/20b45cc2cd58f7c0834854f6f869bc6f541630ce) ([#12893](https://www.github.com/tauri-apps/tauri/pull/12893)) Add `Manager::run_on_main_thread` to replace the old explicit method on `App/AppHandle/WebviewWindow/Window/Webview`.
- [`20b45cc2c`](https://www.github.com/tauri-apps/tauri/commit/20b45cc2cd58f7c0834854f6f869bc6f541630ce) ([#12893](https://www.github.com/tauri-apps/tauri/pull/12893)) Add `Manager::run_on_main_thread_blocking` which uses a channel to return the result of the closure passed in.
- [`0dd3c561a`](https://www.github.com/tauri-apps/tauri/commit/0dd3c561acb62e1968bcedaeaa12a80e6981e27f) ([#14443](https://www.github.com/tauri-apps/tauri/pull/14443)) Added the `Plugin::cleanup_before_exit` hook and `plugin::Builder::on_cleanup_before_exit`, invoked by `App::cleanup_before_exit` right before the process exits so plugins can release resources such as sidecar processes. Unlike `RunEvent::Exit`, it also runs on exit paths that bypass the event loop such as `AppHandle::restart` on the main thread.
- [`20b45cc2c`](https://www.github.com/tauri-apps/tauri/commit/20b45cc2cd58f7c0834854f6f869bc6f541630ce) ([#12893](https://www.github.com/tauri-apps/tauri/pull/12893)) Added `Menu/MenuItem/Submenu/PredefinedMenuItem/CheckMenuItem/IconMenuItem::with_inner_blocking` allowing you to interact with the underlying `muda` menu on the main thread.
- [`9d00f5916`](https://www.github.com/tauri-apps/tauri/commit/9d00f59169f6c0e49651d9e64b5f3c31ccbcf11d) ([#15971](https://www.github.com/tauri-apps/tauri/pull/15971)) Add `bounds`, `size`, and `position` methods to the unstable `WebviewBuilder`. If no bounds are set, the webview is positioned at 0x0, fills its parent window and automatically resizes with it.

### What's Changed

- [`d29d9054e`](https://www.github.com/tauri-apps/tauri/commit/d29d9054e09416bc1c05a39d71b53c3de67a1d40) Pull changes from Tauri 2.12 release.

### Dependencies

- Upgraded to `tauri-utils@3.0.0-alpha.2`
- Upgraded to `tauri-runtime@3.0.0-alpha.2`
- Upgraded to `tauri-macros@3.0.0-alpha.2`
- Upgraded to `tauri-build@3.0.0-alpha.2`

### Breaking Changes

- [`930a7ba52`](https://www.github.com/tauri-apps/tauri/commit/930a7ba52753f97658ce8a26cf49fc2682728b5e) ([#16135](https://www.github.com/tauri-apps/tauri/pull/16135)) `plugin::Builder::on_page_load`, `on_window_ready`, `on_webview_ready` and `on_event` take a `Fn + Send + Sync` closure instead of `FnMut + Send`, and `on_navigation` now also requires `Sync`, because plugin hooks may now be called concurrently. Use interior mutability for state changed by these closures.
- [`930a7ba52`](https://www.github.com/tauri-apps/tauri/commit/930a7ba52753f97658ce8a26cf49fc2682728b5e) ([#16135](https://www.github.com/tauri-apps/tauri/pull/16135)) Plugin hooks no longer run with the plugin store locked, so a plugin can add or remove plugins or exit the app from any of its callbacks without deadlocking. As a result, `Plugin` now requires `Sync`, and `window_created`, `webview_created`, `on_navigation`, `on_page_load`, `on_event` and `run_invoke_handler` take `&self` instead of `&mut self`, and may be called concurrently. `initialize` still takes `&mut self`.
- [`930a7ba52`](https://www.github.com/tauri-apps/tauri/commit/930a7ba52753f97658ce8a26cf49fc2682728b5e) ([#16135](https://www.github.com/tauri-apps/tauri/pull/16135)) A plugin is only added to the app once its `initialize` (or `setup`) returns, so its own hooks do not run during it. A removed plugin is dropped once its hooks that are already running return.
- [`cac606ee6`](https://www.github.com/tauri-apps/tauri/commit/cac606ee682d4cfb259e06ccde245aab52861e18) Removed the `objc-exception` feature flag, which has been a no-op since 2.3.0.
- [`20b45cc2c`](https://www.github.com/tauri-apps/tauri/commit/20b45cc2cd58f7c0834854f6f869bc6f541630ce) ([#12893](https://www.github.com/tauri-apps/tauri/pull/12893)) Removed `App/AppHandle/WebviewWindow/Window/Webview::run_on_main_thread` method, just import `tauri::Manager` trait and use the new `Manager::run_on_main_thread`.
- [`20b45cc2c`](https://www.github.com/tauri-apps/tauri/commit/20b45cc2cd58f7c0834854f6f869bc6f541630ce) ([#12893](https://www.github.com/tauri-apps/tauri/pull/12893)) Renamed `TrayIcon::with_inner_tray_icon` to `TrayIcon::with_inner_blocking`.
- [`9d00f5916`](https://www.github.com/tauri-apps/tauri/commit/9d00f59169f6c0e49651d9e64b5f3c31ccbcf11d) ([#15971](https://www.github.com/tauri-apps/tauri/pull/15971)) Removed the position and size parameters from the unstable `Window::add_child` API, use the new `bounds/size/position` methods on `WebviewBuilder`.

<details>
<summary><em><h4>Cargo Publish</h4></em></summary>

```
Updating crates.io index
   Packaging tauri v3.0.0-alpha.3 (/home/runner/work/tauri/tauri/crates/tauri)
    Updating crates.io index
    Packaged 142 files, 1.5MiB (333.2KiB compressed)
   Verifying tauri v3.0.0-alpha.3 (/home/runner/work/tauri/tauri/crates/tauri)
 Downloading crates ...
  Downloaded alloc-stdlib v0.3.0
  Downloaded alloc-no-stdlib v3.0.0
  Downloaded keyboard-types v0.8.3
  Downloaded muda v0.20.0
  Downloaded brotli-decompressor v6.0.1
  Downloaded serialize-to-javascript v0.1.2
  Downloaded serde_repr v0.1.21
  Downloaded serialize-to-javascript-impl v0.1.2
  Downloaded signal-hook-registry v1.4.8
  Downloaded tokio-macros v2.7.2
  Downloaded brotli v9.0.0
  Downloaded tray-icon v0.25.1
  Downloaded tauri-macros v3.0.0-alpha.2
  Downloaded tauri-runtime v3.0.0-alpha.2
  Downloaded tauri-build v3.0.0-alpha.2
   Compiling serde_core v1.0.229
   Compiling zerofrom v0.1.8
   Compiling serde v1.0.229
   Compiling phf_macros v0.13.1
   Compiling yoke v0.8.3
   Compiling zerovec v0.11.8
   Compiling phf_codegen v0.13.1
   Compiling zerotrie v0.2.5
   Compiling tinystr v0.8.4
   Compiling potential_utf v0.1.6
   Compiling icu_locale_core v2.3.0
   Compiling thiserror v2.0.21
   Compiling icu_collections v2.3.0
   Compiling parking_lot_core v0.9.12
   Compiling phf v0.13.1
   Compiling string_cache_codegen v0.6.1
   Compiling serde_json v1.0.151
   Compiling icu_provider v2.3.1
   Compiling icu_properties v2.3.0
   Compiling icu_normalizer v2.3.0
   Compiling web_atoms v0.2.6
   Compiling parking_lot v0.12.5
   Compiling bytes v1.12.1
   Compiling alloc-no-stdlib v3.0.0
   Compiling alloc-stdlib v0.3.0
   Compiling idna_adapter v1.2.2
   Compiling string_cache v0.9.0
   Compiling getrandom v0.4.3
   Compiling toml_datetime v1.1.1+spec-1.1.0
   Compiling serde_spanned v1.1.1
   Compiling form_urlencoded v1.2.2
   Compiling toml v1.1.6+spec-1.1.0
   Compiling uuid v1.26.1
   Compiling idna v1.1.0
   Compiling brotli-decompressor v6.0.1
   Compiling selectors v0.38.0
   Compiling cssparser v0.37.0
   Compiling url v2.5.8
   Compiling brotli v9.0.0
   Compiling markup5ever v0.39.0
   Compiling http v1.5.0
   Compiling html5ever v0.39.0
   Compiling jsonptr v0.7.1
   Compiling cfb v0.14.0
   Compiling erased-serde v0.4.10
   Compiling time v0.3.55
   Compiling dom_query v0.28.0
   Compiling serde-untagged v0.1.9
   Compiling schemars v1.2.2
   Compiling tokio v1.53.1
   Compiling cargo_metadata v0.19.2
   Compiling plist v1.10.1
   Compiling infer v0.22.0
   Compiling json-patch v4.2.0
   Compiling crc32fast v1.5.2
   Compiling urlpattern v0.6.0
   Compiling serde_with v3.23.0
   Compiling flate2 v1.1.10
   Compiling http-body v1.1.0
   Compiling rustc_version v0.4.1
   Compiling futures-task v0.3.34
   Compiling slab v0.4.12
   Compiling futures-util v0.3.34
   Compiling embed-resource v3.0.11
   Compiling bitflags v2.13.2
   Compiling tauri-utils v3.0.0-alpha.2
   Compiling crossbeam-utils v0.8.23
   Compiling png v0.17.16
   Compiling tauri-winres v0.3.6
   Compiling cargo_toml v1.0.1
   Compiling futures-channel v0.3.34
   Compiling tower v0.5.3
   Compiling ico v0.5.0
   Compiling hyper v1.11.1
   Compiling sha2 v0.10.9
   Compiling png v0.18.1
   Compiling dpi v0.1.2
   Compiling muda v0.20.0
   Compiling tauri-runtime v3.0.0-alpha.2
   Compiling hyper-util v0.1.21
   Compiling tokio-util v0.7.19
   Compiling crossbeam-channel v0.5.17
   Compiling tower-http v0.6.11
   Compiling keyboard-types v0.8.3
   Compiling http-body-util v0.1.5
   Compiling serialize-to-javascript-impl v0.1.2
   Compiling raw-window-handle v0.6.2
   Compiling serialize-to-javascript v0.1.2
   Compiling reqwest v0.13.5
   Compiling tauri-build v3.0.0-alpha.2
   Compiling tauri-codegen v3.0.0-alpha.2
   Compiling serde_repr v0.1.21
   Compiling mime v0.3.17
   Compiling tauri v3.0.0-alpha.3 (/home/runner/work/tauri/tauri/target/package/tauri-3.0.0-alpha.3)
   Compiling tauri-macros v3.0.0-alpha.2
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 30.52s
   Uploading tauri v3.0.0-alpha.3 (/home/runner/work/tauri/tauri/crates/tauri)
    Uploaded tauri v3.0.0-alpha.3 to registry `crates-io`
note: waiting for tauri v3.0.0-alpha.3 to be available at registry `crates-io`
help: you may press ctrl-c to skip waiting; the crate should be available shortly
   Published tauri v3.0.0-alpha.3 at registry `crates-io`
```

</details>

Related Repositories