Migrate Tauri apps from v1 or v2 beta to v2 stable, covering breaking changes, configuration updates, API migrations, and plugin system changes. USE WHEN upgrading a Tauri project to v2 stable, resolving v1-to-v2 breaking changes, or running the automated Tauri migrate CLI.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
A direct command skips the review prompt. Inspect the source before running it.
Migrate Tauri apps from v1 or v2 beta to v2 stable, covering breaking changes, configuration updates, API migrations, and plugin system changes. USE WHEN upgrading a Tauri project to v2 stable, resolving v1-to-v2 breaking changes, or running the automated Tauri migrate CLI.
cluster
tauri
version
1.0.0
Tauri Migration Guide
This skill covers migrating Tauri applications to v2 stable from either v1 or v2 beta.
Migration Paths
Source Version
Target
Complexity
Tauri v1.x
v2 stable
High - significant breaking changes
Tauri v2 beta
v2 stable
Low - minor breaking changes
Automated Migration
Both migration paths support automated migration via the Tauri CLI:
# Install latest CLI first
npm install @tauri-apps/cli@latest
# Run migration
npm run tauri migrate
# or: yarn tauri migrate | pnpm tauri migrate | cargo tauri migrate
IMPORTANT: The migrate command automates most tasks but is NOT a complete substitute for manual review. Always verify changes after running.
Use "v1Compatible" for existing distributions to maintain backward compatibility.
BREAKING: Allowlist Replaced with Capabilities
The v1 allowlist system is completely replaced with a capability-based ACL system.
Creating Capabilities
Create JSON files in src-tauri/capabilities/:
src-tauri/capabilities/default.json:
{"identifier":"default","description":"Default capabilities for the main window","windows":["main"],"permissions":["core:default","shell:allow-open","dialog:allow-open","fs:allow-read-text-file"]}
The tauri migrate command auto-generates capabilities from your v1 allowlist.
Cargo.toml Changes
Removed Features
These features no longer exist in v2:
reqwest-client
reqwest-native-tls-vendored
process-command-api
shell-open-api
windows7-compat
updater
system-tray
New Features
linux-protocol-body - Custom protocol request body parsing support
BREAKING: API Module Removal
The entire api module is removed. Functionality moved to plugins:
v1 API
v2 Replacement
tauri::api::dialog
tauri-plugin-dialog
tauri::api::http
tauri-plugin-http
tauri::api::process
tauri-plugin-process
tauri::api::path functions
tauri::Manager::path
BREAKING: Rust API Changes
Removed APIs
v1
v2 Alternative
App::clipboard_manager
tauri-plugin-clipboard-manager
App::global_shortcut_manager
tauri-plugin-global-shortcut
App::get_cli_matches
tauri-plugin-cli
tauri::updater
tauri-plugin-updater
Renamed Types/Methods
v1
v2
Window
WebviewWindow
Manager::get_window
Manager::get_webview_window
Menu API Changes
Before:
use tauri::{Menu, CustomMenuItem};
letmenu = Menu::new()
.add_item(CustomMenuItem::new("quit", "Quit"));
After:
use tauri::menu::{MenuBuilder, MenuItemBuilder};
letmenu = MenuBuilder::new(app)
.item(&MenuItemBuilder::with_id("quit", "Quit").build(app)?)
.build()?;
Tray API Changes
Before:
use tauri::SystemTray;
SystemTray::new().with_menu(menu);