
Rust Tauri Apps
- 5 installs
- 5 repo stars
- Updated August 5, 2026
- bjornmelin/dev-skills
Rust-tauri-apps is a Claude Code skill for building Tauri v2 desktop and mobile apps with secure Rust command surfaces and typed IPC.
About
Rust-tauri-apps is a Claude Code skill for building Tauri v2 desktop and mobile applications with a Rust backend. It focuses on small Rust command surfaces, secure least-privilege capabilities and permissions, typed IPC contracts, app state, plugins, and distribution. A developer uses it when working on src-tauri commands, capabilities, secure IPC, sidecars, updater, and bundling for a Tauri app.
- Builds Tauri v2 apps with small, secure Rust command surfaces
- Enforces least-privilege capabilities and typed IPC contracts
- Covers bundling, updater, sidecars, and desktop/mobile distribution
Rust Tauri Apps by the numbers
- 5 all-time installs (skills.sh)
- Ranked #93 of 121 Rust skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
rust-tauri-apps capabilities & compatibility
Free; uses the Rust toolchain and Tauri v2.
- Capabilities
- tauri app · secure ipc · desktop app · rust backend
- Use cases
- frontend · api development · security audit
- Pricing
- Free
What rust-tauri-apps says it does
Build Tauri v2 applications with small Rust command surfaces, secure capabilities, explicit IPC contracts, and maintainable distribution workflows.
Keep the capability model least-privilege by default.
Keep frontend-originated paths, URLs, and shell arguments untrusted until validated.
npx skills add https://github.com/bjornmelin/dev-skills --skill rust-tauri-appsAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 5 |
|---|---|
| repo stars | ★ 5 |
| Last updated | August 5, 2026 |
| Repository | bjornmelin/dev-skills ↗ |
What it does
Build Tauri v2 apps with secure Rust command surfaces, least-privilege capabilities, and typed IPC.
Who is it for?
Tauri v2 Rust command design, secure capabilities/permissions, typed IPC, app state, plugins, and distribution.
Skip if: Non-Tauri Rust work or pure frontend framework tasks handled by a general Tauri or web skill.
When should I use this skill?
Building Tauri apps, Rust commands, invoke contracts, capabilities/permissions, secure IPC, updater, or bundling.
What you get
Tauri v2 applications with small Rust command surfaces, secure least-privilege capabilities, and explicit IPC contracts.
- Rust command surfaces
- least-privilege capability config
- typed IPC DTOs
By the numbers
- 5-point operating model
- 3 reference guides
Files
Rust Tauri Apps
Build Tauri v2 applications with small Rust command surfaces, secure capabilities, explicit IPC contracts, and maintainable distribution workflows.
Operating Model
1. Inspect the Tauri version and generated structure first: src-tauri, tauri.conf.json, capabilities, permissions, plugins, frontend invocation code, and CI/release scripts. 2. Treat every command as a public bridge contract. Validate input, return typed serializable results, and keep filesystem/shell/network capabilities narrow. 3. Prefer app-owned Rust services behind commands. Do not put large domain logic directly in #[tauri::command] functions. 4. Keep the capability model least-privilege by default. Avoid broad filesystem, shell, opener, and dialog permissions unless the user workflow truly needs them. 5. Coordinate with the general tauri-v2 skill when available for framework-specific current docs; use this skill for Rust architecture, security, testing, and command design.
Reference Map
references/tauri-v2-rust-backend.mdfor command/state/plugin architecture and typed IPC.references/capabilities-security.mdfor permissions, filesystem/shell risk, secrets, updater, and secure defaults.references/distribution-mobile.mdfor bundling, updater, sidecars, signing, desktop/mobile packaging, and release checks.
Defaults
- Keep commands async only when they await I/O. Do CPU-heavy work off the main runtime.
- Use
serdeDTOs at the IPC boundary and convert to domain types inside services. - Use
tauri::Statefor shared app services with clear ownership; avoid global mutable statics. - Use plugin APIs instead of hand-rolled platform code when mature official plugins cover the use case.
- Keep frontend-originated paths, URLs, and shell arguments untrusted until validated.
Verification
Use repo-native checks first, then add Tauri-specific validation:
cargo fmt --all --check
cargo test --manifest-path src-tauri/Cargo.toml --all-targets
cargo clippy --manifest-path src-tauri/Cargo.toml --all-targets --all-features -- -D warningsFor command changes, add Rust tests around service behavior and frontend tests or contract fixtures for IPC shapes when the app already has a frontend test lane.
display_name: Rust Tauri Apps
short_description: Rust Tauri app architecture.
default_prompt: Use $rust-tauri-apps to design, implement, test, or review Tauri v2 Rust backends and IPC.
policy:
allow_implicit_invocation: true
metadata:
skill_category: rust
primary_domains:
- tauri
- secure-ipc
- desktop
- mobile
[
{
"query": "Add a Tauri v2 Rust command that validates input and returns a typed result to the frontend.",
"should_trigger": true,
"reason": "Tauri command and IPC design are direct triggers."
},
{
"query": "Review src-tauri capabilities for filesystem and shell permissions.",
"should_trigger": true,
"reason": "Tauri capability security is in scope."
},
{
"query": "Design a Tauri updater and bundling workflow for desktop releases.",
"should_trigger": true,
"reason": "Distribution and updater work belong to this skill."
},
{
"query": "Build a Ratatui table widget for terminal logs.",
"should_trigger": false,
"reason": "Terminal UI work belongs to rust-tui-ratatui."
},
{
"query": "Implement clap parser aliases for a cargo-style CLI.",
"should_trigger": false,
"reason": "CLI parser design belongs to rust-cli-clap."
},
{
"query": "Add Axum middleware for request IDs.",
"should_trigger": false,
"reason": "HTTP services belong to rust-web-services."
}
]
Capabilities and Security
Least Privilege
Capabilities are part of the app security boundary. Keep them narrow:
- Limit filesystem scope to required directories.
- Avoid shell permissions unless there is a clear user workflow and strict argument validation.
- Prefer opener/dialog plugins over custom shell calls.
- Gate dangerous commands behind explicit UI actions and clear confirmation.
Input Validation
Treat frontend input as untrusted:
- Normalize and validate paths.
- Reject traversal outside allowed roots.
- Validate URLs, schemes, and hosts.
- Validate command arguments as data, not strings to concatenate.
- Enforce file size and content type limits when reading user-selected files.
Secrets
Do not send secrets to the frontend unless the frontend must display them. Prefer platform keychain/secure storage plugins for durable secrets and short-lived in-memory tokens for command work.
Updater
Updater configuration should be explicit:
- signed update artifacts
- stable channels
- clear rollback plan
- environment-specific endpoints
- tests or smoke scripts for update metadata
Audit Checklist
Before shipping risky permissions, answer:
- Which user action requires this capability?
- What exact paths, commands, or hosts are allowed?
- What happens if the frontend is compromised?
- Is there an official plugin with a smaller permission surface?
Distribution and Mobile
Desktop Packaging
For release work, inspect existing scripts before changing Tauri config. Common checks:
cargo testandcargo clippyinsrc-tauri- frontend build
tauri buildfor target platforms- signing/notarization configuration where required
- installer metadata and icons
- update artifacts and signatures
Sidecars
Sidecars need explicit lifecycle ownership:
- versioned binary source
- checksum verification
- platform-specific paths
- startup/shutdown behavior
- stdout/stderr capture policy
- failure reporting
Do not shell out to arbitrary paths supplied by the frontend.
Mobile
When mobile is in scope:
- Confirm plugin mobile support.
- Audit permissions separately for iOS and Android.
- Keep filesystem assumptions platform-aware.
- Test deep links, notifications, and secure storage on real/simulator lanes where available.
Release Automation
Prefer reproducible release scripts over hand-run build sequences. Keep secrets in CI secret stores and avoid local-only signing assumptions unless the project intentionally releases manually.
Tauri v2 Rust Backend
Command Shape
Keep commands as thin adapters:
1. Deserialize DTOs. 2. Validate frontend-provided values. 3. Call an app-owned service. 4. Map domain result/error into a stable IPC response.
Avoid embedding business logic, filesystem traversal, or subprocess orchestration directly in command functions.
IPC Contracts
- Use explicit request/response structs for anything beyond trivial commands.
- Keep field names stable and documented through TypeScript bindings or generated fixtures where the repo supports it.
- Return structured errors instead of stringly catch-all failures when the frontend branches on error kind.
- Do not leak internal paths, tokens, or raw subprocess output unless the UI explicitly needs them.
App State
Use tauri::State for shared clients, stores, and services. Make ownership clear:
- immutable config
- async clients with internal pooling
- mutex-protected mutable state only when truly shared
- channels for background workers
Avoid global mutable statics. If singletons are needed, initialize them in app setup and inject them through state.
Plugins
Prefer maintained Tauri plugins for common platform features. Before adding a plugin:
- Check current Tauri v2 compatibility.
- Review required permissions.
- Confirm mobile/desktop support if cross-platform is needed.
- Add only the plugin surface actually used.
Frontend Bridge
Keep invoke names centralized in frontend code. For larger apps, generate or hand-maintain a small typed client module rather than scattering raw string command names.
Related skills
FAQ
How does rust-tauri-apps keep Tauri secure?
It keeps the capability model least-privilege by default and validates frontend-originated paths, URLs, and shell arguments as untrusted.
Where should domain logic live?
In app-owned Rust services behind commands, not directly inside #[tauri::command] functions.