Make frontend and Rust agree
Specify command names, argument casing, serialized results and error handling before debugging both sides at once.
Skill
Make the desktop app work beyond the dev server.
A Tauri 2 development skill for the boundary between webview, Rust and companion processes. Turn “it opens” into clear contracts for requests, streaming, permissions and shutdown.
Fictional contract: import sidecar Ready: expected versioned health response before deadline Startup failure: show reason, retry and cancel Owner: application retains child handle Exit: graceful stop, then bounded kill fallback Release check: correct target-triple binary included
Fictional worked example. It illustrates the intended output; it is not a measured result or a real customer story.
Specify command names, argument casing, serialized results and error handling before debugging both sides at once.
Use a bounded readiness check, an owned child handle and explicit failure recovery.
Separate source checks, mocked IPC, the running desktop app and the packaged release.
The film
In 71 seconds, Duffel the hound sleeps in the sidecar while the app waits three seconds, hopes, and sends the first import to nobody. Build with Tauri treats running and ready as two different things: the app holds the sidecar, waits for a ready signal with a deadline, and writes down what ready means, what failure shows and how it stops. Then you break it on purpose. Captions are on the player; a transcript is below.
Your desktop app is a motorbike. Duffel rides in the sidecar.
You start both, wait three seconds, and hope.
The timer pings. The first import goes out. Duffel sleeps on.
On your machine, it worked every time.
Build with Tauri treats running and ready as two different things.
Your app holds the sidecar, and waits for a ready signal with a deadline.
Out comes the contract: what ready means, what failure shows, how it stops.
Then you break it on purpose: a wrong field, a slow start, a crash.
The skill ships no desktop app. You test drive on your own machines.
On screen: Running is not ready.
Build with Tauri. Make the desktop app work beyond the dev server.
The photo importer and its sidecar contract are a fictional example. The film shows how the skill behaves; it does not report results.
Fictional worked example. It illustrates the intended output; it is not a measured result or a real customer story.
Inspect lockfiles, configuration, capabilities, Rust entrypoints and target operating system.
Choose request/response, channel or event behavior; declare permissions and lifecycle ownership.
Test wrong fields, startup failure, repeated launch, cancellation and app exit before checking release packaging.
Fictional example
The brief A fictional desktop import tool starts a local sidecar and immediately sends requests.
A fixed sleep and a successful spawn are treated as readiness.
Keep a child handle, wait for the expected versioned health response with a deadline, show retry/cancel, and clean up on every app exit path.
A running process, a ready service, and a successful user task are distinct observations.
Use when creating or repairing Tauri 2 project structure, IPC, permissions, or sidecar lifecycle.
The app layout, target platforms, or build boundary is unclear.
A versioned map of frontend, Rust shell, capabilities, and packaged binaries.
A frontend action needs Rust data, progress, or an error.
A typed command/channel/event contract with lifecycle and permission checks.
A companion process must start, serve, recover, and stop.
An explicit readiness, ownership, failure, and cleanup contract.
Build a desktop app whose frontend and sidecar agree.
Read package.json, the frontend lockfile, src-tauri/Cargo.toml, Cargo.lock, configuration, capability files, Rust entrypoints, and the actual target platform. Record the versions. Decide whether the task belongs in the frontend, Rust shell, a plugin, or a companion process. Keep application-specific examples separate from Tauri's general protocol.
Use project structure to trace frontend build → shell configuration → Rust setup → bundle output. Preserve the project's package manager and platform setup. Run existing build commands, not a newly invented parallel build system. Check the packaged asset paths and CSP against actual configuration.
Use IPC patterns as the baseline, with the current corrections. Write a contract for command name, argument names/casing, serialized return/error values, caller window, and permission scope. Register all commands in the actual builder. Prefer commands for request/response, channels for ordered streaming tied to a request, and events for suitable broadcast notifications. Clean up every listener on unmount or cancellation; test failure and repeated mounting.
An async signature does not make blocking filesystem or CPU work nonblocking. Use an appropriate asynchronous API or a blocking task. Application commands and plugin permissions follow different rules: do not invent a per-command capability entry as a universal fix. Inspect the project's application-command ACL and the relevant plugin's generated permissions.
Use sidecar integration and the current corrections. Define the binary name and target-triple artifact, allowed arguments, transport, readiness response/version, bounded timeout, stderr handling, restart policy, cancellation, and shutdown owner. A successful process spawn is not readiness. Keep the child handle; prefer graceful shutdown before a bounded kill fallback. Test startup failure, occupied port, crashed child, repeated launch, and application exit. Window destruction alone may not mean the application exits in a multi-window/tray app.
Run formatting/type/build checks first, then IPC checks with deliberately mismatched fields and rejected permissions, then the actual desktop app on the target OS. Confirm release packaging contains the correct sidecar architecture. A dev server success does not establish the installed app works. Record which layer ran and which remains blocked. This repository supplies reference patterns, not an executable contract fixture, Tauri compiler or desktop acceptance test. Create boundary checks in the actual app and record what they exercise.
Return changed interfaces, minimum permissions, version/source evidence, exact checks, and a reproducible unresolved case. Keep real-user usability and accessibility claims within the evidence actually collected.
Bring the app, target operating system and one failure you can reproduce.
The download contains the complete skill folder. Extract it into the skills directory supported by your agent, keeping its references and license together. Or use the source installer below. Python 3.11+ is required for that installer.
git clone https://github.com/michaeljabbour/amplifier-skill-build-tauri.git
cd amplifier-skill-build-tauripython3 scripts/capability.py doctor
python3 scripts/capability.py install --dest ~/.agents/skillsKeep the complete skill folder together, including its references and license. The host applies the method in your context; the skill does not start a background service.
Use Build with Tauri on this Tauri 2 app. Its import sidecar starts slowly and the first request fails. Trace startup, define readiness and shutdown ownership, and propose the smallest fix with target-OS checks.Use after installing in a host that loads skill folders. Supply your own task files and review the result.
Read the guide · License · Changes · Release metadata · Install guide · Migration · Validation · Native guide · consolidation
The retained references were reviewed against the linked official Tauri 2 contracts, and the portable package is checked. No desktop executable is supplied; operating-system lifecycle and release packaging must be tested in your app.
Confirmed distinctions for application vs plugin ACL, async vs blocking work, channels vs broadcast events, and target-triple sidecars. No Tauri desktop executable is part of this source repository; OS runtime and packaging acceptance not measured.
All operations passed. No runtime activation or effectiveness measured.
Skill is valid. This is a structural check, not a behavioral benchmark.
The retained references were reviewed against the linked official Tauri 2 contracts, and the portable package is checked. No desktop executable is supplied; operating-system lifecycle and release packaging must be tested in your app.
Fictional examples explain the capability. Tests check the stated behavior. Outside-user outcomes need their own evidence.