Side by side
| Question | Tauri | Krate |
|---|---|---|
| What you ship | An installer or bundle per platform: DMG or app bundle, a Windows installer, AppImage, deb, RPM, Flatpak or Snap. | One .krate file for macOS, Windows and Linux. |
| Interface | Your web frontend in the system WebView: WebView2, WKWebView or webkit2gtk. | Krate's own UI interfaces. No WebView. |
| App logic | Rust commands, with plugins in Rust, Swift or Kotlin. | A WebAssembly component. Rust today. |
| Permissions | Capability files the developer writes grant or deny commands per window. | The app requests access in its manifest; the person running it grants or refuses. |
| Signing | Required on most platforms. Direct macOS downloads also need notarization. | No per-OS signing of the app file. Optional Krate signature with your own key. |
| Platforms | Windows, macOS, Linux, Android and iOS. | macOS, Windows and Linux. iOS and Android exist only as reference ports. |
| Maturity | Version 2, stable since 2024. | Young (0.5.x). |
Tauri facts: distribution, capabilities and WebView versions.
Who holds the permissions
Tauri's capabilities limit what the frontend in the WebView may call. They are chosen by the developer, and Tauri's own docs say they do not protect against malicious or insecure Rust code in the app itself. They protect users from a compromised frontend.
In Krate, the whole app is the guest. It cannot call the operating system directly; it calls Krate interfaces, and the runtime checks protected calls against what the person running it allowed. The model is young and its gaps are on the limits page.
Shipping a release
With Tauri, a release means building on each platform, usually in a CI job per system, signing for each platform, and hosting and updating each package. With Krate, a release is one new .krate file that you send or publish. Recipients need a compatible runtime, and runtime updates are separate from yours.
When Tauri is the better choice
- You want a web frontend, or already have one.
- You need Android or iOS from the same project.
- You call native libraries from Rust. A
.kratecannot link a native library. - You need its plugin ecosystem.
Moving a Tauri app to Krate
Inventory your Rust commands, plugins and WebView interactions, then run the scan, which reads source without building it:
krate port ./my-tauri-app
Pure Rust logic may carry over. The WebView interface and native plugins need adapting to Krate's widgets, canvas and host interfaces. See the porting guide.
Questions
Which one should a Rust developer pick?
Pick Tauri when you want a web frontend, mobile targets or its mature plugin set today. Pick Krate when you want one file for every desktop, no WebView, and permissions the user approves before the app opens.
What does the person I send it to install?
With Tauri, your app's own installer or bundle for their system. With Krate, the Krate runtime once; after that every .krate opens from the file, with no WebView involved.
Is Krate built on Tauri?
No. Krate is its own runtime, built on Wasmtime. It does not use a WebView.
Can a Tauri app run in Krate unchanged?
No. A Tauri app is a native program with a web frontend. A Krate app is a WebAssembly component written against Krate's interfaces, so moving one is a port.
Which one makes smaller downloads?
It depends on what you count. A Tauri app relies on the system WebView, so its package can be small. A Krate app file is small too, but a first-time recipient also downloads the Krate runtime once. Compare runtime plus app for the first app, and the app alone after that.