Build desktop apps with Tauri 2.0 — Rust commands, IPC events, capability system, and the updater plugin.
0 / 5 completed
1 / 5
What is the fundamental architecture of a Tauri desktop application?
Tauri architecture: the Rust backend handles system calls, file I/O, and business logic. The frontend (any web framework) runs in the OS's built-in webview. Because Tauri bundles no Chromium, apps are typically 3-10 MB versus 100+ MB for Electron.
2 / 5
What is a Tauri command and how is it invoked from the frontend?
Tauri commands: you annotate a Rust function with #[tauri::command] and register it in tauri::Builder::default().invoke_handler(tauri::generate_handler![my_fn]). The frontend calls invoke("my_fn", { arg: value }) which serialises arguments via JSON and receives the return value as a resolved Promise.
3 / 5
How do Tauri events differ from commands?
Tauri events: use app_handle.emit("update-progress", payload) in Rust to push data to the frontend, which listens with listen("update-progress", handler). This is ideal for long-running Rust tasks (downloads, file watching) that need to report progress without the frontend polling.
4 / 5
What does the Tauri allowlist (Tauri 1) / capabilities (Tauri 2) system control?
Capabilities (Tauri 2): by default the webview cannot access the filesystem, shell, or system APIs. You grant access in tauri.conf.json or capability JSON files. This least-privilege model means a compromised frontend cannot exfiltrate files unless the app explicitly permitted filesystem access.
5 / 5
How does Tauri handle application updates (updater plugin)?
Tauri updater: you host an update.json file specifying the version and download URL. The plugin verifies the update bundle against a public key embedded in your app. Signature verification prevents man-in-the-middle attacks from delivering a malicious binary to your users.