--- 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 ```