desktop-electron.md 5.1 KB


name: desktop-electron category: desktop public: false database: optional hosting_hints:

  • github-releases
  • autoupdate-servers
  • mac-app-store
  • microsoft-store
  • snap-store
  • aur audit_stack:
  • analyze
  • code-clean
  • cso
  • design-review
  • perf
  • a11y
  • doc plugins: context7: yes ui-ux-pro-max: yes gstack: optional ---

Desktop Electron

Application desktop basée sur Electron (Chromium + Node.js). Distribution binaires pour macOS / Windows / Linux.

Detection signals

Strong signals (×3)

  • DEP: package.json contient "electron"
  • STRING_IN_FILE: tout .js/.ts du projet contient "app.whenReady()" OR "new BrowserWindow(" OR "require('electron')" OR "import .* from 'electron'"
  • FILE: electron-builder.json OR electron-builder.yml OR forge.config.js OR forge.config.ts

Medium signals (×2)

  • DEP: "electron-builder" OR "@electron-forge/cli"
  • DIR: src/main/ (main process) AND src/renderer/ (renderer)
  • FILE: main.js OR main.ts OR src/main/index.ts (main process entry)
  • FILE: preload.js OR src/preload/index.ts

Weak signals (×1)

  • DIR: build/ avec icons (icon.icns, icon.ico, icon.png)
  • DEP: "electron-updater"
  • DEP: "electron-store"
  • FILE: .env.production avec vars Electron

Composition overlays

  • Tauri (NOT Electron but similar archetype) : DEP @tauri-apps/* ET src-tauri/ — à traiter avec archétype desktop-tauri (à créer plus tard)
  • Frontend framework inside renderer : React / Vue / Svelte detected → noter

Implications

  • Distribution : GitHub Releases, autoupdate servers, Mac App Store, Microsoft Store, Snap Store, AUR
  • Base de données : OPTIONNELLE — souvent SQLite via better-sqlite3 ou electron-store (JSON)
  • SEO/GEO : N/A (app native desktop)
  • Surface sécurité : CRITIQUE — accès file system, shell, nodeIntegration si mal config = RCE
  • UI/UX : CRITIQUE — conventions desktop par OS

Typical pain points

  • nodeIntegration: true et contextIsolation: false dans BrowserWindow → XSS = exécution code natif arbitraire
  • contextBridge non utilisé (preload expose Node API brut au renderer)
  • webSecurity: false (CORS désactivé dans renderer — risque énorme)
  • Secrets / API keys dans le bundle (déchiffrable par n'importe quel user — asar non chiffré)
  • URL chargée remote dans BrowserWindow → MITM sur un site compromis = RCE
  • Pas de code signing (macOS Gatekeeper / Windows SmartScreen avertissements)
  • Pas d'autoupdate (electron-updater) → users bloqués sur vieilles versions faillibles
  • Electron version obsolète (updates mensuelles critiques)
  • Shell IPC non validé (renderer peut exécuter commandes shell via ipcMain mal filtré)
  • navigator.userAgent leak (app detectable, fingerprint)
  • Menu context / clipboard : permissions non gérées
  • Deep links (app://) non validés → phishing
  • Accessibilité OS : ARIA ignoré, screen readers non testés
  • Taille du bundle énorme (Chromium = 150-200MB)
  • Performances : main process bloqué par ops synchrones (fs sync dans main)
  • Memory leaks : BrowserWindows non fermés, event listeners non cleanup
  • Pas de crash reporting natif (electron-log, Sentry Electron)
  • Pas de tests E2E (Spectron déprécié, Playwright Electron recommandé)

Interview questions (adaptive)

En plus du set minimum business :

  • Framework build : electron-builder / electron-forge / autre ?
  • Frontend dans renderer : React / Vue / Svelte / vanilla / autre ?
  • IPC : ipcMain+ipcRenderer directs / contextBridge secure / @electron/remote (déprécié) ?
  • BrowserWindow config : nodeIntegration / contextIsolation / sandbox / webSecurity ?
  • Auth : OAuth desktop / tokens locaux / SSO entreprise ?
  • Stockage : electron-store / SQLite (better-sqlite3) / IndexedDB / file system direct / cloud ?
  • Code signing : macOS (Developer ID + notarization) / Windows (EV Cert) / aucun ?
  • Autoupdate : electron-updater / custom / aucun ?
  • Distribution : GitHub Releases / Homebrew Cask / MS Store / Mac App Store / autre ?
  • OS cibles : macOS min / Windows min / Linux distros ?
  • Architecture : x64 / arm64 / universal2 (macOS) ?
  • Electron version + cycle d'upgrade ?
  • Crash reporting : Sentry Electron / electron-log / aucun ?
  • Analytics : respecte RGPD (opt-in, désactivable) ?
  • Tests : unit + Playwright Electron ?
  • CI/CD : builds multi-OS (GitHub Actions matrix / CircleCI) ?
  • Deep links / protocol handlers registered ?
  • App menu + accelerators ?
  • Accessibilité OS native testée ?

Plugin recommendations

  • context7 : ON — Electron évolue vite (mensuel), breaking changes fréquents
  • ui-ux-pro-max : ON
  • gstack : OPTIONAL — Playwright peut tester le renderer

Example project layout

package.json
forge.config.ts           OR   electron-builder.json
src/
  main/
    index.ts              (main process)
    window.ts
    menu.ts
    ipc-handlers.ts
  preload/
    index.ts              (contextBridge)
  renderer/
    index.html
    main.tsx              (React/Vue/Svelte app)
    components/
resources/
  icon.icns
  icon.ico
  icon.png
build/
  entitlements.mac.plist
  background.png
.env.example