Skip to content

tauri

The core Tauri runtime.

2.12.x

2.12.0

Sep 26, 2026
New Features
  • 3f62c70d6 (#13848) Add WebviewBuilder::limit_navigations_to_app_bound_domains, WebviewWindowBuilder::limit_navigations_to_app_bound_domains, and limitNavigationsToAppBoundDomains to tauri.config.json.
  • 7dbfc1fe5 (#14620) Added the app > appDirectoriesOverride config to override the directories returned by the app_*_dir path APIs, either with a single root directory or per directory. This lets apps keep all of their data, including the data of Tauri itself and of plugins that use these APIs, in a single place of their choosing, such as next to the executable for portable apps. The override can also be set at runtime through Context::config_mut.
  • d8d02ba60 (#14767) Added the exit function to @tauri-apps/api/app, backed by the new plugin:app|exit command (core:app:allow-exit permission), to exit the app without requiring the @tauri-apps/plugin-process plugin.
  • 460ec3544 (#14786) Add Webview::convert_file_src and WebviewWindow::convert_file_src, the Rust equivalent of the JavaScript convertFileSrc function. The returned URL uses the scheme the webview was configured with (useHttpsScheme), so it always matches what the webview can load.
  • 21ec647cf (#15223) Add Builder::activate_ignoring_other_apps on macOS to control whether the app activates at launch when another app is already active.
  • d203f74a2 (#15274) Added Image::from_app_icon_resource and Image::from_icon_resource on Windows for loading images from icon resources embedded in the executable (identified by an IconResource id or name), and the default default_window_icon from tauri::generate_context macro is now loaded using from_app_icon_resource. The resource id tauri-build embeds the application icon with is exposed as tauri_utils::platform::WINDOWS_APP_ICON_RESOURCE_ID.
  • 29265557c (#15410) Added app > windows > noRedirectionBitmap config option to disable the window redirection bitmap on Windows.
  • 29265557c (#15410) Added WindowBuilder/WebviewWindowBuilder::no_redirection_bitmap method to disable the window redirection bitmap on Windows.
  • 382dd6ccc (#14865) Expose the wry permission handler API through Tauri. This includes support for permission types such as DisplayCapture, Midi, Sensors, MediaKeySystemAccess, LocalFonts, WindowManagement, PointerLock, AutomaticDownloads, FileSystemAccess, and Autoplay. Added PermissionResponse::{Allow, Deny, Default} for runtime permission decisions.
  • 6edc2f4d4 (#14926) Added Window::set_fullscreen_on_monitor, WebviewWindow::set_fullscreen_on_monitor and the setFullscreenOnMonitor JavaScript API to make a window fullscreen on the monitor containing a given physical position, along with the core:window:allow-set-fullscreen-on-monitor permission.
Enhancements
  • aebf38c84 (#15694) Migrate the Android Gradle scripts from the deprecated kotlinOptions DSL to compilerOptions, which is accepted by both Kotlin Gradle Plugin 1.9.x and 2.x. This lets projects move to Kotlin 2.x without hitting the hard error that 2.3+ raises on the old DSL.

    This increased the minimum supported Gradle version to 8.13, if your gradle is on an earlier version, delete src-tauri/gen/android/gradle/wrapper/gradle-wrapper.properties and re-run tauri android init to update it.

  • d3108ff9a (#15578) State had Send and Sync trait bounds that were already implied, remove them from the struct definition.

  • 4a5065653 (#14454) Added Regular and Clear Liquid Glass window effects, and the interactive window effects option (macOS 27.0+) that enables the glass' visual response to user interactions.

  • 459fc315e (#15711) Fix different build and runtime debug assertion profiles on the tauri-utils crate can resulting in compilation errors.

Bug Fixes
  • 0349b6fb8 (#16072) Fix the runtime ACL denying a command for every origin when any capability denied it: deny permissions are now correctly scoped to the capability's execution context (local/remote) instead of denying the command for every origin. Previously a capability that denied a command for a remote URL also denied it for the local app (and vice-versa), because the origin match result was discarded. The debug message reporting an explicit denial now also only references the capabilities that actually deny the requesting origin.

  • d8d02ba60 (#14767) On Android, AppHandle::exit (and the process plugin exit command) now finishes the activity instead of exiting the process directly, so the app closes with the system transition instead of flashing a blank screen.

  • e3e3474d3 On Android, Invoke.resolveObject and the other values serialized with the plugin JSON mapper now write JSObject and JSArray as JSON objects and arrays. They were serialized through their private fields, so a JSArray reached the frontend as { "values": [...] } and a JSObject as { "nameValuePairs": {...} }.

  • 020919a1b (#15798) On Android, fixed requesting permission in a plugin fails after the first activity closed.

  • cb2ecac53 (#15949) On Android, fixed a crash when an activity is destroyed while another one is already running — installing an APK over the running app is the common way to hit it. The plugin manager tried to move its activity result launchers to the surviving activity, and registerForActivityResult rejects that with IllegalStateException: LifecycleOwner ... is attempting to register while current state is RESUMED. Each activity now registers its own launchers when it is created.

  • f9ed1a3fd (#15838) Fix malformed asset:// multi-range responses: the multipart body now ends with the closing boundary, Content-Type is only multipart/byteranges, and the status is 206 Partial Content.

  • 127aa176b (#16050) Load asset:// files asynchronously instead of on the event loop thread, so a slow or unreachable path no longer freezes every window.

  • 97f6666b9 (#16088) Bump tray-icon to 0.25 and muda to 0.20 to pick up the fix for left-click events being swallowed by the tray menu on macOS 27 (fix #16035).

  • 1417768f9 (#15679) Remove the Channel used to send event to JavaScript side on dropping the menu

  • 17717757b (#15617) Remove Rust-side event listeners bound to a window or webview when that target is destroyed, so listen/once handlers registered on a Window, Webview or WebviewWindow no longer leak after it is closed.

  • 0aeadb6b2 (#15821) Transfer the exit code from the window.app_handle().exit(1) call to the run_return() result instead of always returning 0.

  • 82c706e26 Stop queuing large channel payloads once the target webview is closed. They were kept in memory until the app exited, and a new webview reusing the same label could fetch them.

  • 023fe7f59 (#15291) Fix capabilities added at runtime through add_capability (feature dynamic-acl) being merged into the command scopes of the build time ACL, which polluted unrelated plugin scopes and made their deserialization fail. Scope values are also no longer duplicated when a scoped permission allows more than one command.

  • 4a0e1df18 (#15604) Remove a webview's JS event listeners from the backend Listeners map when that webview is destroyed. Previously the entries keyed by the source webview label lingered after the webview was dropped, so they could never be delivered and leaked until the app exited — forcing apps to manually unlisten() before closing a window.

  • d727d6316 (#15630) Query monitor information (primary_monitor, monitor_from_point, available_monitors) on the main thread from the app-level runtime handle instead of touching the event loop's window target directly.

  • a370f6533 (#15224) Avoid leaking Objective-C objects in WebviewMessage::WithWebview on Apple targets by replacing Retained::into_raw with scoped retained bindings and Retained::as_ptr pointer handoff.

  • 406feea75 (#15800) Guard the handler lookup in the generated unlisten script. When the unlisten function ran before its listener registration eval reached the webview, the entry was still missing and reading its handlerId threw, which aborted _unlisten before it sent the backend plugin:event|unlisten and left the listener registered.

  • 448d39ee2 (#15860) Fix menu related commands can panic if called with invalid input through invoke directly.

    • The internal do_menu_item! macro now returns Err(crate::Error::UnexpectedMenuKind) instead of unreachable!()
    • Added a new error type tauri::Error::UnexpectedMenuKind
    • menu:new with the Predefined kind now returns an error instead of panicking when the item option is missing
    • Converting an Image to a menu or tray icon now returns tauri::Error::InvalidIcon when the RGBA buffer does not match the image size, instead of panicking on Linux when the icon is rendered
  • e517fa18e (#15450) Fix run_main_thread! macro used by things like MenuItem and some other APIs deadlock when called on main thread with MockRuntime

  • 2087bcae2 (#15920) Fix path.normalize("") returning an empty string instead of ".", matching Node.js and the existing path.join("") behavior.

  • 08acfb3fa (#15625) Fix webview don't get focus when Alt-Tab back to the window if unstable feature is enabled on Windows

  • 5a882eccf (#15701) On Linux, fix resize cursor for undecorated Window not being set correctly when mouse is over a resize edge.

  • 08acfb3fa (#15625) Fix WindowEvent::Focused events emitted when dragging the window on Windows

  • f4feb2ba7 (#15950) On Windows, fixed Window::is_focused always returns false in multi-webview mode

Performance Improvements
  • 26a876a9f (#16049) Skip redundant rgba buffer copies in icon conversions (muda::Icon/tray_icon::Icon), Image::from_bytes, and submenu icon construction.
  • ba0828c76 (#15955) Skip serializing to JSON for Image::rgba
What's Changed
  • 1fbadc877 (#15952) Internal refactors removing an Arc and a Mutex. Deprecate InvokeMessage::state and InvokeMessage::state_ref that should accidentally were made public.
  • 2e6e33c85 (#16029) Moved to edition 2024
  • ce3f13b91 (#15887) Lock unstable tauri crates to minor versions.
  • 7cc68e74f (#15307) WindowEvent::Resumed and WindowEvent::Suspended are now only fired for the matching activity window instead of every window.
  • 1cffb01da (#13221) Set MSRV to 1.90.
Security fixes
  • 201437309 Bind channel data IPC queue entries to the webview they were created for and scope their ids per webview. Queued channel payloads and large invoke responses can no longer be read by other webviews, and entries are purged when the owning webview is closed. Fixes GHSA-w28w-mhc8-qvjv.
Dependencies
  • Upgraded to tauri-utils@2.10.0

  • Upgraded to tauri-build@2.7.0

  • Upgraded to tauri-runtime@2.12.0

  • Upgraded to tauri-runtime-wry@2.12.0

  • Upgraded to tauri-macros@2.7.0

  • e2e585ad1 (#15828) On Android, fix missing consumer-rules.pro file in the template.

    IMPORTANT: For plugin authors, update your build.gradle.kts file to remove the

    buildTypes {
    release {
    isMinifyEnabled = false
    proguardFiles(
    getDefaultProguardFile("proguard-android-optimize.txt"),
    "proguard-rules.pro"
    )
    }
    }

    section and rename your proguard-rules.pro to consumer-rules.pro to match the consumerProguardFiles("consumer-rules.pro") in the template.

  • e2e585ad1 (#15828) On Android, updated the template to use Gradle v9.6.1 (com.android.tools.build:gradle v9.3.1) and Kotlin v2.2. Use tauri android init to apply the change.

  • 2bb4fdbd0 (#15592) Updated cargo_toml crate to 1

  • 872428fe9 (#15790) On macOS, updated objc2-* dependencies to 0.3.2

  • 9e9a54dea (#15890) Update swift-rs to support builds using Xcode 27.

  • 51433d740 (#15996) Updated windows to 0.62 and webview2-com to 0.39, this drops Windows 7 support, see https://github.com/microsoft/windows-rs/issues/3808.

Breaking Changes
  • 26cb3d665 (#15563) On Android, $VIDEO and video_dir() now resolve to the app-specific Movies directory instead of external cache storage.

    Migration: Files previously written to the old location (.../cache) will not be discovered at the new location (.../files/Movies). Migrate existing files or update path assumptions accordingly.

2.11.x

2.11.5

Jul 1, 2026
Dependencies

2.11.4

Jun 30, 2026
Dependencies

2.11.3

Jun 17, 2026
Bug Fixes
Performance Improvements
Dependencies
  • Upgraded to tauri-utils@2.9.3
  • Upgraded to tauri-runtime-wry@2.11.3
  • Upgraded to tauri-runtime@2.11.3
  • Upgraded to tauri-macros@2.6.3
  • Upgraded to tauri-build@2.6.3
  • 504ff3f44 (#15364 by @renovate) Updated dependency tray-icon to 0.24

2.11.2

May 16, 2026
Bug Fixes
Dependencies
  • Upgraded to tauri-utils@2.9.2
  • Upgraded to tauri-runtime@2.11.2
  • Upgraded to tauri-runtime-wry@2.11.2
  • Upgraded to tauri-macros@2.6.2
  • Upgraded to tauri-build@2.6.2

2.11.1

May 6, 2026
Enhancements
Bug Fixes
  • 5f479c0c3 (#15336) Fix crash when using the requestPermission API on Android.
Security fixes
  • 1b26769f9 (#15266) Enforce ACL checks for IPC requests from remote origins even when no AppManifest is configured. Previously, custom (non-plugin) commands bypassed ACL entirely without an AppManifest, allowing any origin to invoke them. Now, remote origins are always subject to ACL resolution, and can only reach custom commands if an explicit remote capability has been granted.
  • ba025588f Correctly handle .localhost suffix in local origins on Windows and Android to fix a security issue that made tauri think remote websites that started with a registered scheme were local websites. For example, when registering an app custom protocol, Tauri would think http://app.evil.com/ would be a local URL on Windows/Android.
Dependencies
  • Upgraded to tauri-utils@2.9.1
  • Upgraded to tauri-runtime@2.11.1
  • Upgraded to tauri-runtime-wry@2.11.1
  • Upgraded to tauri-macros@2.6.1
  • Upgraded to tauri-build@2.6.1

2.11.0

Apr 30, 2026
New Features
  • 074299c08 (#14307) Add Bring All to Front predefined menu item type
  • c00a3dbff (#14473) Add support for the rename attribute in the tauri::command macro to allow renaming the command to something other than the function name.
  • a12142a48 (#14357) Add macos support for setting the icon and icon template state in the same step of the main thread, to prevent flickering.
  • 2dd9b15a2 (#15062) Add data-tauri-drag-region="deep" so clicks on non-clickable children will drag as well. Can still opt out of drag on some regions using data-tauri-drag-region="false"
  • 001c8fe3d (#14722) Add a WebView option to control browser-level general autofill behavior. This option does not disable password or credit card autofill. On Windows (WebView2), setting it to true disables the general autofill "Suggestions" UI, which may appear even when autocomplete="off" is specified on input elements. On Linux, macOS, iOS, and Android, this option is currently unsupported and performs no operation.
  • b27be063f (#14925) Add eval_with_callback to the Tauri webview APIs and runtime dispatch layers.
  • d83d2d92b (#14905) Enable track_caller attribute for async_runtime to provide better location information in logs and panics.
  • cc5c97602 (#14486) Implement file association for Android and iOS.
  • cc5c97602 (#14486) Trigger RunEvent::Opened on Android.
  • eb0312ea9 (#15199) Propagates the Event::Suspended and Event::Resumed events from tao when they are emitted on mobile targets.
  • 093e2b47c (#14484) Support creating multiple windows on Android (activity embedding) and iOS (scenes).
  • 093e2b47c (#14484) Added dbus feature flag (enabled by default) which is required for theme detection on Linux.
  • 1063c48c5 (#14523) Add handler for web content process termination on macOS and iOS.
Enhancements
  • d730770bb (#15117) Simplify async-sync code boundaries, no externally visible changes
  • c69d5ca4b (#15262) Remove a clone, no user-facing changes.
  • 4017a7ed7 (#14908) Implement retrieving inner PathBuf from SafePathBuf to ease using APIs that require an owned PathBuf
Bug Fixes
  • 110336c88 (#15250) Fix initial window position when positioning it to another monitor.
  • 9808236eb (#14655) Fix monitor work area Y position on macOS.
What's Changed
  • d34497ef1 (#14862) The new window handler passed to on_new_window no longer requires Sync, and runs on main thread on Windows, aligning with other platforms
Dependencies
  • Upgraded to tauri-macros@2.6.0
  • Upgraded to tauri-build@2.6.0
  • Upgraded to tauri-runtime@2.11.0
  • Upgraded to tauri-runtime-wry@2.11.0
  • Upgraded to tauri-utils@2.9.0
  • 373b7e677 (#15177) Update Specta in lockfile and upgrade dependencies using the removed doc_auto_cfg attribute to fix errors building documentation
  • a219ede00 (#15203) Updated tray-icon to v0.22

2.10.x

2.10.3

Mar 4, 2026
Dependencies
  • Upgraded to tauri-utils@2.8.3
  • Upgraded to tauri-runtime@2.10.1
  • Upgraded to tauri-runtime-wry@2.10.1
  • Upgraded to tauri-macros@2.5.5
  • Upgraded to tauri-build@2.5.6

2.10.2

Feb 4, 2026
Dependencies
  • Upgraded to tauri-macros@2.5.4
  • Upgraded to tauri-build@2.5.5

2.10.1

Feb 2, 2026
Dependencies

2.10.0

Feb 2, 2026
New Features
  • e919a760e (#14619 by @NaamuKim) Add set_simple_fullscreen method to WebviewWindow.

    This method was already available on the Window type and is now also available on WebviewWindow for consistency. On macOS, it toggles fullscreen mode without creating a new macOS Space. On other platforms, it falls back to regular fullscreen.

Bug Fixes
  • 853ed4642 (#14442 by @ish1416) Fixed 500 error when accessing local video files in Android external storage directory via convertFileSrc. Added better error handling and logging for Android external storage access to help diagnose permission and accessibility issues.
  • 4d5d78daf (#14812 by @oscartbeaumont) fix(specta): don't use #[specta(rename = ...)] with tauri::ipc::Channel
  • ff5d76ca2 (#14653 by @Legend-Master) WindowConfig::focus is set to false in WindowConfig::default()
What's Changed
  • 0575dd287 (#14521 by @kandrelczyk) Change the way bundle type information is added to binary files. Instead of looking up the value of a variable we simply look for the default value.
Dependencies
  • Upgraded to tauri-utils@2.8.2
  • Upgraded to tauri-build@2.5.4
  • Upgraded to tauri-runtime-wry@2.10.0
  • Upgraded to tauri-runtime@2.10.0
  • Upgraded to tauri-macros@2.5.3
  • 75057c7c0 (#14778 by @FabianLars) Breaking Change for with_webview users: Updated webkit2gtk-rs crates to v2.0.2.
  • 75057c7c0 (#14778 by @FabianLars) Update wry to v0.54.

2.9.x

2.9.5

Dec 9, 2025
Bug Fixes
Dependencies
  • Upgraded to tauri-runtime-wry@2.9.3

2.9.4

Nov 30, 2025
Performance Improvements
Dependencies
  • Upgraded to tauri-utils@2.8.1
  • Upgraded to tauri-runtime@2.9.2
  • Upgraded to tauri-runtime-wry@2.9.2
  • Upgraded to tauri-macros@2.5.2
  • Upgraded to tauri-build@2.5.3

2.9.3

Nov 13, 2025
Bug Fixes
  • 4b00130b8 (#14385 by @lucasfernog) Fix iOS deadlock when running on the simulator from Xcode by properly piping stdout/stderr messages through the Xcode console and OSLog.
Dependencies
  • Upgraded to tauri-macros@2.5.1
  • Upgraded to tauri-build@2.5.2

2.9.2

Oct 29, 2025
Bug Fixes

2.9.1

Oct 22, 2025
Bug Fixes
Dependencies
  • Upgraded to tauri-build@2.5.1
  • Upgraded to tauri-runtime@2.9.1
  • Upgraded to tauri-runtime-wry@2.9.1

2.9.0

Oct 20, 2025
New Features
  • f5851ee00 (#14089) Adds the scroll_bar_style option to the Webview and WebviewWindow builders. The possible values for this option are gated behind conditional compilation flags, and will need to be applied using conditional compilation if customised.
  • 3397fd9bf (#14133) Added mobile app plugin to support exit and back button press event.
  • 68cb31897 (#14328) Added onStop, onDestroy, onRestart, onConfigurationChanged Android plugin hooks.
  • 2e089f6ac (#14148) Support async Swift plugin methods (completionHandler:) in PluginManager
Bug Fixes
  • 006d59283 (#14260) Properly deserialize Android plugin args with key starting with is (previously treated as a getter instead of a field name).
  • 69476d8e2 (#14170) Fix the stack overflow when having too many commands in a single invoke handler in release build
Dependencies
  • Upgraded to tauri-utils@2.8.0
  • Upgraded to tauri-runtime-wry@2.9.0
  • Upgraded to tauri-runtime@2.9.0
  • Upgraded to tauri-build@2.5.0
  • Upgraded to tauri-macros@2.5.0

2.8.x

2.8.5

Sep 1, 2025
Enhancements
  • 07e134f70 (#14107 by @lucasfernog) Improve error message for request errors on iOS when local network permission has been denied and the app tries to reach the development server.
Dependencies
  • Upgraded to tauri-build@2.4.1

2.8.4

Aug 25, 2025
Bug Fixes
  • 03e7c1193 (#14080 by @lucasfernog) Ignore initial navigation to about:blank so on_new_window does not give a warning on first navigation on macOS.
Dependencies
  • Upgraded to tauri-runtime-wry@2.8.1

2.8.3

Aug 24, 2025
Bug Fixes
  • 534998406 (#14054 by @FabianLars) Fixed an issue that caused the runtime WebView2 detection to fail for FixedRuntime installations.

2.8.2

Aug 19, 2025
Bug Fixes

2.8.1

Aug 18, 2025
Bug Fixes
  • 902727 Move WebviewWindowBuilder::with_related_view behind the wry feature flag.

2.8.0

Aug 18, 2025
New Features
Enhancements
  • 7261a1436 (#14012 by @WSH032) Implemented Webview::on_webview_event for WebviewWindow as well

  • 0e6b5cbe5 (#14009 by @WSH032) re-export PixelUnit, PhysicalUnit, LogicalUnit

  • a3dc42477 (#14013 by @WSH032) export TitleBarStyle for all platforms.

  • f1232671a (#13959 by @petersamokhin) Introduce with_inner_tray_icon for Tauri TrayIcon to access the inner platform-specific tray icon.

    Note that tray-icon crate may be updated in minor releases of Tauri. Therefore, it's recommended to pin Tauri to at least a minor version when you're using with_inner_tray_icon.

  • 72b4226ee (#13809 by @Beanow) Reduced Debug format size for binary buffers.

  • 21ebc6e82 (#14007 by @WSH032) Changed the parameter type of AppHandle::remove_plugin from &'static str to &str.

  • 5ba1c3faa (#13722 by @s00d) Added icon (icon and nativeIcon) support for Submenu:

    • In the Rust API (tauri), you can now set an icon for submenus via the builder and dedicated methods.
    • In the JS/TS API (@tauri-apps/api), SubmenuOptions now has an icon field, and the Submenu class provides setIcon and setNativeIcon methods.
    • Usage examples are added to the documentation and demo app.

    This is a backwards-compatible feature. Submenus can now display icons just like regular menu items.

Dependencies
  • Upgraded to tauri-utils@2.7.0
  • Upgraded to tauri-runtime-wry@2.8.0
  • Upgraded to tauri-runtime@2.8.0
  • Upgraded to tauri-macros@2.3.3
  • Upgraded to tauri-build@2.3.2

2.7.x

2.7.0

Jul 20, 2025
New Features
  • 7bc77a038 (#13609 by @Legend-Master) Added tauri::plugin::Builder::js_init_script_on_all_frames that allows plugins to add initialization scripts that runs on all frames
Enhancements
  • 7f3c98911 (#13837 by @WSH032) Add AppHandle::plugin_boxed and Builder::plugin_boxed methods to allow adding plugins in the form of boxed trait objects.
  • 7bc77a038 (#13609 by @Legend-Master) tauri::plugin::Builder::js_init_script now takes impl Into<String> instead of String
Bug Fixes
Dependencies
  • Upgraded to tauri-runtime-wry@2.7.2
  • Upgraded to tauri-utils@2.6.0
  • Upgraded to tauri-runtime@2.7.1
  • Upgraded to tauri-macros@2.3.2
  • Upgraded to tauri-build@2.3.1

Full Changelog

tauri full changelog

Version List


© 2026 Tauri Contributors. CC-BY / MIT