Skip to content
Back to skills

Desktop Framework Choice

ASecurity

Decide Electron vs Tauri vs native vs PWA by the app's real needs (bundle size, native-API depth, team skills, security surface, update needs), then set the process/security model and the renderer/backend boundary.

  • 7 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 23, 2026
ai-agentsrustgoswiftshellnodeapibackendsecurity

Works with

  • api

Security analysis

A100/100

Scanned September 23, 2026

npx -y skills add mcorbett51090/RavenClaude --skill desktop-framework-choice --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Desktop Framework Choice?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Desktop Framework Choice
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/mcorbett51090-desktop-framework-choice/badge)](https://www.skillsdirectory.com/skills/mcorbett51090-desktop-framework-choice)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: desktop-framework-choice
description: "Decide Electron vs Tauri vs native vs PWA by the app's real needs (bundle size, native-API depth, team skills, security surface, update needs), then set the process/security model and the renderer/backend boundary."
---

# Desktop Framework Choice

## The decision

| Need | Approach |
|---|---|
| Large existing web UI, deep native integration, one cross-platform team, mature ecosystem | **Electron** (bundled Chromium + Node; heavy bundle, ~100–200MB) |
| Small footprint, tight security surface, Rust comfort, system-webview acceptable | **Tauri** (Rust core + system webview; small bundle, secure-by-default capabilities) |
| Top-tier per-OS UX, platform-native feel, no web layer | **Native** (SwiftUI / WinUI / Qt / GTK) |
| Mostly web, light OS needs (notifications, install) | **PWA** — skip the desktop shell entirely |

Name the trade; don't default to what the team already knows.

## The non-negotiable: the renderer is untrusted

Web content can be compromised. It gets OS access **only** through a narrow allow-list:

- **Electron:** `contextIsolation: true`, `nodeIntegration: false`, `sandbox: true`, a strict CSP, and a minimal `contextBridge` backed by validated `ipcMain.handle` handlers.
- **Tauri:** a least-privilege **capabilities/permissions** set (v2) — only the commands a window needs, no wildcard `fs`/`shell` scopes.

## The renderer/backend line

Secrets, signing keys, privileged OS calls, and the data/sync API live behind the native process or a remote backend — never in the webview bundle. Route the remote contract to `api-engineering`/`backend-engineering`.

## Storage

App data in the per-OS app-data directory; secrets in the OS keychain/credential store (never plaintext `config.json`).

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…