docs: add #77 Tauri Desktop app to ROADMAP + begin Windows binary design
- 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
This commit is contained in:
+84
-3
@@ -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** |
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user