Knowledge base
CodexGuild Knowledge Base

Tauri 2.12 (MSRV 1.90, Windows 7 dropped) and the Tauri 3 alpha

as of Oct 1, 2026 · applies to tauri >= 2.12.0 · canonical · codexguild.com/kb/kb-tauri-2-12-and-v3-alpha-2026 · exported 2026-10-11
Canonical as of Oct 1, 2026

Tauri 2.12 (MSRV 1.90, Windows 7 dropped) and the Tauri 3 alpha

Tauri 2.12 (2026-09-26, latest 2.12.1) drops Windows 7, raises MSRV to 1.90 and adds webview permission handling. Tauri 3 is in alpha (alpha.0 on 2026-09-13), with a pluggable runtime (wry or CEF) and MSRV 1.95. Stay on 2.x for production.

Tauri 2.12 and the Tauri 3 alpha

As of: 2026-10

Current state

  • Stable: Tauri 2.12.1 (crate tauri-v2.12.1 and @tauri-apps/cli/@tauri-apps/api 2.12.1, released 2026-09-30). 2.12.0 came out on 2026-09-26, and the Tauri blog calls it "the biggest update so far in the 2.x releases".
  • Next major: tauri-v3.0.0-alpha.0 was published 2026-09-13 and the latest is 3.0.0-alpha.4 (2026-10-01). It is alpha, so don't use it in production.

Tauri 2.12: changes that break older assumptions

  • Windows 7 is no longer supported. The current WebView2 installer crashes on Windows 7.
  • MSRV raised to Rust 1.90, up from the long-held 1.77. The new policy is MSRV = stable - 3, bumped only in minor or major releases. CI images that pin an old toolchain will fail to build.
  • Webview permission handler:
WebviewWindowBuilder::new(app, "main", WebviewUrl::App("index.html".into()))
  .on_permission_request(|_, kind| match kind {
    PermissionKind::Geolocation => PermissionResponse::Allow,
    _ => PermissionResponse::Default,
  })
  .build()?;
  • Resource handles (for example plugin-fs files) support await using. Older webviews need a Symbol.asyncDispose polyfill and "lib": ["es2022","esnext.disposable","dom"].
  • Android:
    • $VIDEO / video_dir() now resolves to the app-specific Movies directory instead of the cache directory. Files written to the old path are not migrated.
    • The tauri android init template moves to Gradle 9, Kotlin 2 and targetSdk 37.
    • Gradle scripts use compilerOptions instead of kotlinOptions, and the minimum Gradle version is now 8.13. To regenerate the wrapper, delete gen/android/gradle/wrapper/gradle-wrapper.properties and re-run init.
    • Plugin authors should rename proguard-rules.pro to consumer-rules.pro and remove the release buildTypes block.

Tauri 3 alpha: what is changing

These notes come from the tauri-v3.0.0-alpha.0 release notes:

  • The runtime is chosen at build time. Apps depend on a runtime crate directly, either tauri-runtime-wry or the new tauri-runtime-cef (Chromium Embedded Framework), and pass it to tauri::Builder::runtime. Runtime-specific APIs move into extension traits in those crates.
  • The devtools, macos-private-api and unstable features must be enabled on the runtime crate.
  • tauri::webview_version() is removed. Use App::webview_version or AppHandle::webview_version.
  • The custom-scheme URL format (tauri://localhost vs http://tauri.localhost) is now defined by the runtime.
  • On Linux, GTK is selected with the gtk3/gtk4 features. The tray icon defaults to the ksni (StatusNotifierItem) backend; use the linux-libappindicator feature to keep the old backend.
  • tauri::android_binding! moves to tauri_runtime_wry::android_binding!.
  • tauri-build no longer copies resources into the target directory, so in dev builds resources resolve from their source paths.
  • MSRV 1.95.

What to do now

  1. For production, upgrade to tauri 2.12.x and run cargo update together with the matching @tauri-apps/cli and @tauri-apps/api versions.
  2. Make sure CI uses Rust 1.90 or newer. Tell any users still on Windows 7 that support has ended.
  3. Android projects: re-run tauri android init or update Gradle to 8.13+ by hand, and migrate any files written via $VIDEO.
  4. Only try the 3.x alpha on a branch, and don't write code that depends on its APIs staying the same.

Sources