tauri

Builds Tauri v2 desktop apps with Rust IPC, capabilities, plugins, and signed updater packaging.

22|Updated Sep 10, 2026
One-click install
npx skills add https://github.com/Lynricsy/HyperSkills --skill tauri-lynricsy
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: tauri
Source: https://github.com/Lynricsy/HyperSkills/tree/main/skills/tauri
Command: npx skills add https://github.com/Lynricsy/HyperSkills --skill tauri-lynricsy

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? Tauri v2 apps fail in ways that are invisible at compile time: commands vanish at runtime, state mismatches panic, capabilities silently deny plugin calls, and updater builds ship unsigned. This Skill encodes the exact rules, workflows, and reference material needed to build, debug, harden, and ship a Tauri v2 desktop application correctly. ## Core Features & Use Cases - IPC and command correctness: Enforces single generate_handler! registration, async command rules, camelCase argument keys, typed error enums, managed-state typing, and binary responses via tauri::ipc::Response and channels. - Security hardening: Guides capability-per-window-label design, scope enforcement, CSP and devCsp configuration, and replacing primitive commands with product operations. - Release and migration workflows: Covers updater signing keys, manifest rules, platform config merge semantics, sidecar naming, code signing, and the full Tauri 1 to 2 upgrade path. - Use Case: A packaged app throws "Command not found" and "Permission denied" after release. The fix-runtime-failure workflow maps each symptom to its root cause — a second invoke_handler call and a missing plugin permission — and verifies the fix in a debug bundle. ## Quick Start Ask the agent to review your src-tauri crate and capability files for runtime failures and permission problems using the tauri skill.

Frequently Asked Questions about tauri

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
Why does my Tauri command fail with Command not found at runtime?

Command not found almost always means the command is missing from the single tauri::generate_handler! list, or a second .invoke_handler() call replaced the first one. Only the last invoke_handler call survives, so register every command in one call.

How do I fix Permission denied errors in a Tauri v2 app?

Permission denied means a plugin or core: command lacks a matching permission in the capability targeting that window label. Add the narrowest permission identifier from gen/schemas to the capability; your own commands registered via invoke_handler are allowed for all windows by default.

Why does my Tauri window freeze when a command runs?

A command without async executes on the main thread, so any blocking I/O freezes the UI. Make the command async or annotate it with #[tauri::command(async)] so it is spawned onto the async runtime instead.

Does Tauri v2 support auto-updates and code signing?

Yes, but the updater refuses unsigned artifacts unconditionally. Set bundle.createUpdaterArtifacts, put the public key content in plugins.updater.pubkey, and supply the private key through the TAURI_SIGNING_PRIVATE_KEY environment variable.

How do I migrate a Tauri 1 app to v2?

Restructure the crate with a lib.rs run() entry point, run tauri migrate, then move config keys by hand (tauri to app, distDir to frontendDist), replace the allowlist with per-privilege capability files, and add plugin crates for APIs that left core.

Why do my Tauri command arguments arrive as undefined?

Command arguments cross the IPC boundary as a JSON object with camelCase keys, so project_path must be invoked as projectPath. Declare #[tauri::command(rename_all = "snake_case")] if you want snake_case keys instead.