From 8fd69b4b50f8385ac6aea16607a82a4e51882876 Mon Sep 17 00:00:00 2001 From: bruno Date: Fri, 24 Jul 2026 17:59:04 -0400 Subject: [PATCH] docs: add #77 Tauri Desktop app to ROADMAP + begin Windows binary design MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - New P2 section: Desktop native app with Tauri/Rust - Architecture: Rust shell → spawn Python backend → webview frontend - 6 phases: init, Python sidecar, native features, build, UX, tests - Windows .msi + Linux .AppImage/.deb targets - Auto-update, tray icon, file associations, system theme - Updated effort summary: +1 item, 60-80 jours total --- docs/ROADMAP.md | 87 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 84 insertions(+), 3 deletions(-) diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 0d368c6..9542c6e 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -681,15 +681,96 @@ --- +## 🔵 En cours (P2) — Application Desktop + +### 77. Application Desktop native — Tauri (Windows / Linux / macOS) + +- **Effort :** 8-12 jours | **Impact :** 🟡 | **Framework :** Tauri v2 (Rust + Webview) + +- **Description :** Packager ObsiGate en application desktop native autonome. L'utilisateur télécharge un `.exe` (Windows) ou `.AppImage` (Linux), l'installe, et lance ObsiGate comme n'importe quelle app — sans Docker, sans terminal, sans navigateur. Le backend Python est embarqué, le frontend s'affiche dans une webview native. L'expérience est identique à l'application web, avec des capacités supplémentaires (accès fichiers natif, notifications OS, tray icon). + +- **Architecture :** + ``` + ObsiGate.exe (Tauri shell ~5 Mo) + ├── python-embed/ ← Python 3.11 embarqué (~30 Mo) + │ ├── backend/ ← Code FastAPI existant + │ └── site-packages/ ← Dépendances gelées + ├── frontend/ ← HTML/CSS/JS (identique au web) + └── obsigate-desktop ← Binaire Rust (lance Python + ouvre webview) + ``` + +- **Pourquoi Tauri plutôt qu'Electron ?** + - Binaire de ~35-40 Mo contre ~180 Mo pour Electron (pas de Chromium embarqué) + - RAM idle ~50 Mo contre ~200 Mo — la webview utilise le moteur du navigateur système + - Rust gère le cycle de vie du backend Python (spawn, health check, kill propre) + - Signature de code native Windows/macOS pour éviter les faux positifs antivirus + - Auto-update natif via le mécanisme de Tauri (vérifie un endpoint JSON) + +- **Sous-tâches :** + +##### A. Initialisation du projet Tauri (1 jour) + - [ ] Installer Rust + toolchain Tauri : `cargo install tauri-cli` + - [ ] Initialiser `tauri init` dans `/desktop/` avec config Windows/Linux + - [ ] Configurer `tauri.conf.json` : fenêtre 1200×800, sans cadre, titre "ObsiGate" + - [ ] Configurer le build : cibles `.msi`/`.nsis` (Windows), `.deb`/`.AppImage` (Linux) + - [ ] Ajouter les icônes desktop (`.ico` Windows, `.png` Linux) dans `desktop/icons/` + +##### B. Intégration du backend Python (2-3 jours) + - [ ] Bundle Python : créer un dossier `python-embed/` avec `python3.11-embed` + `site-packages/` (requirements.txt gelés) + - [ ] Script `sidecar.py` : lance uvicorn sur `localhost:17890`, log dans `%APPDATA%/ObsiGate/logs/` + - [ ] Code Rust `main.rs` : spawn le sidecar comme processus fils, health check (boucle `GET /api/health` avec timeout 10s), kill propre au `SIGTERM` + - [ ] Menu tray : icône dans la barre des tâches avec options « Ouvrir ObsiGate », « Quitter » + - [ ] Gestion du port : détecter si 17890 est déjà utilisé → incrémenter (17891, 17892...) + +##### C. Fonctionnalités desktop natives (2-3 jours) + - [ ] **Sélecteur de dossier** : commande Tauri `dialog.open()` pour choisir un vault → appelle l'API backend pour l'ajouter + - [ ] **Thème système** : détecter `prefers-color-scheme` OS → appliquer dark/light automatiquement + - [ ] **Notifications natives** : via `tauri-plugin-notification` — remplace le service worker Push API + - [ ] **Associations de fichiers** : `.md` → « Ouvrir avec ObsiGate » (registre Windows, mime Linux) + - [ ] **Menu natif** : Fichier (Nouveau vault, Ouvrir, Quitter), Édition, Aide (À propos) + - [ ] **Raccourcis clavier** : `Ctrl+N` nouveau fichier, `Ctrl+O` ouvrir vault, `Ctrl+,` paramètres + +##### D. Build et distribution (2 jours) + - [ ] **Build Windows** : `tauri build --target x86_64-pc-windows-msvc` → `.msi` + `.exe` installer + - [ ] **Build Linux** : `tauri build --target x86_64-unknown-linux-gnu` → `.deb`, `.rpm`, `.AppImage` + - [ ] **Auto-update** : endpoint `GET /api/desktop/update` → compare version → télécharge nouveau `.msi` + - [ ] **Signature de code** : configurer le certificat (optionnel mais recommandé pour Windows) + - [ ] **Page de release** : intégrer le build desktop dans les releases Gitea + README d'installation + +##### E. Expérience utilisateur (1 jour) + - [ ] Écran de chargement pendant le démarrage du backend (« ObsiGate démarre... » avec spinner) + - [ ] Gestion des erreurs : backend crash → message explicite + bouton « Redémarrer » + - [ ] Sauvegarde des préférences desktop (taille fenêtre, position, dernier vault) + - [ ] Première expérience : wizard « Choisissez votre vault » au premier lancement + - [ ] Icône dans le menu Démarrer / dock Linux avec jumplist (vaults récents) + +##### F. Tests (1 jour) + - [ ] Test : installation → premier lancement → wizard vault → ouverture fichier + - [ ] Test : tray icon → réduire dans la barre → restaurer + - [ ] Test : notifications natives → fichier modifié → popup OS + - [ ] Test : association `.md` → double-clic → ouvre dans ObsiGate + - [ ] Test : auto-update → nouvelle version dispo → téléchargement → installation + - [ ] Test : cleanup → désinstallation propre (pas de fichiers résiduels) + +- **Prérequis techniques :** + - Rust ≥ 1.75 (stable) — installé via `rustup` + - Tauri CLI ≥ 2.0 — `cargo install tauri-cli` + - Python 3.11 embed — téléchargé depuis python.org + - NSIS (Windows) — pour le générateur d'installateur `.exe` + - AppImageKit (Linux) — pour le packaging portable + +--- + ## 📊 Résumé des efforts | Priorité | Items | Effort total estimé | |---|---|---| | ✅ Complété | #1 → #57 | ~65 jours | || 🔵 P1 | ✅ #58 (Playwright E2E) | Terminé | -|| P3 | #59, #61-66, #74, #75, #76 (10 items) | 32-42 jours | -| ⚪ P4 | #67 → #73 (7 items) | 18-23 jours | -|| **Total restant** | **18 items** | **52-68 jours** | +|| 🔵 P2 | 🔨 #77 (Tauri Desktop) | 8-12 jours | +|| ⚪ P3 | #59, #61-66, #74, #75, #76 (10 items) | 32-42 jours | +|| ⚪ P4 | #67 → #73 (7 items) | 18-23 jours | +|| **Total restant** | **19 items** | **60-80 jours** | ---