Choose Desktop Stack
Desktop stack choice is about OS integration, renderer consistency, packaging, and update channels.
Decision Table
| Need | Pick | Why | Watch out |
|---|---|---|---|
| Small local-first cross-platform app | Tauri 2 | Lightweight shell, Rust core, explicit security config/capabilities | WebView differences, Rust requirement, platform packaging |
| Chromium-consistent productivity UX | Electron | Same Chromium engine, Node ecosystem, mature distribution docs | Heavier footprint, security hardening required |
| New Windows-native app | Windows App SDK + WinUI 3 | Microsoft recommended modern Windows platform | WinUI 3 is not UWP; AI often uses stale APIs |
| Existing Windows internal tool | WPF/WinForms | Stable, productive, no rewrite tax | Not the right default for new modern Windows UX |
| Go backend plus desktop web UI | Wails | Go-first desktop shell and bindings | Smaller ecosystem than Electron/Tauri |
| Technical automation with minimal UI | CLI | Smallest surface, easiest to script | Not discoverable for non-technical users |
Tauri vs Electron
| Factor | Tauri 2 | Electron |
|---|---|---|
| Renderer | OS WebView | Bundled Chromium |
| Backend | Rust | Node.js/main process, optional sidecars |
| Footprint | Usually smaller | Usually heavier |
| Security model | Explicit capabilities/CSP/security config | Requires hardening around Node/preload/isolation |
| Best fit | Local-first utilities, native shell, smaller app | Complex web UX, command palettes, Node ecosystem, consistent rendering |
Windows Native Trap
Windows App SDK + WinUI 3 is the modern native Windows default, but do not let AI paste UWP-era code. Check DispatcherQueue, AppLifecycle, windowing, packaging, and WinUI test-project requirements against current docs.
Tip: For a desktop app, prove a packaged build early. A dev window proves almost nothing about signing, installer behavior, updater shape, or user trust.