docs: ajouter section Desktop (Tauri) dans README principal + refonte desktop/README.md
CI / lint (push) Successful in 56s
CI / security (push) Successful in 14s
CI / test (push) Successful in 28s
CI / build (push) Successful in 7s
CI / e2e (push) Failing after 28s
Desktop Build / build-windows (push) Has been cancelled
Desktop Build / build-linux (push) Has been cancelled

- README.md: nouvelle section Desktop avec install binaires (.deb/.AppImage/.msi), build from source, architecture
- desktop/README.md: refonte complète — install binaires, build, démarrage, config vaults, dépannage
This commit is contained in:
2026-07-26 10:01:36 -04:00
parent ec32030afc
commit cf30dfb48c
2 changed files with 311 additions and 36 deletions
+92
View File
@@ -35,6 +35,7 @@
- [🔒 Authentification](#-authentification) - [🔒 Authentification](#-authentification)
- [Ajouter une nouvelle vault](#-ajouter-une-nouvelle-vault) - [Ajouter une nouvelle vault](#-ajouter-une-nouvelle-vault)
- [Build & déploiement avec build.sh](#-build--déploiement-avec-buildsh) - [Build & déploiement avec build.sh](#-build--déploiement-avec-buildsh)
- [Desktop (Tauri) — Application native](#-desktop-tauri--application-native)
- [Utilisation](#-utilisation) - [Utilisation](#-utilisation)
- [API](#-api) - [API](#-api)
- [Performance](#-performance) - [Performance](#-performance)
@@ -495,6 +496,97 @@ curl -X POST http://localhost:2020/api/attachments/rescan/MonVault
--- ---
## 🖥️ Desktop (Tauri) — Application native
ObsiGate Desktop est une application native construite avec [Tauri](https://tauri.app/) (Rust + webview système). Elle embarque le backend Python et le frontend dans un exécutable standalone — zéro Docker, zéro ligne de commande.
> 🚧 **Version 2.0.0 — binaires en cours de stabilisation.** Pour l'instant, le build depuis les sources est recommandé.
### Fonctionnalités desktop natives
| Fonctionnalité | Web | Desktop |
|---|---|---|
| Accès fichiers local | Via upload | Natif (sélecteur dossier) |
| Thème système | Manuel | Auto (suit OS dark/light) |
| Notifications | Service Worker | Natif OS |
| Associations `.md` | ❌ | ✅ « Ouvrir avec ObsiGate » |
| Tray icon | ❌ | ✅ Barre des tâches |
| Auto-update | ❌ | ✅ Vérifie les releases Gitea |
| Mode hors-ligne | Limité | Complet (backend local) |
### Téléchargement (binaires pré-buildés)
Les releases sont publiées sur [Gitea](https://git.dracodev.net/Projets/ObsiGate/releases) :
| Plateforme | Format |
|---|---|
| **Linux** | `.deb` + `.AppImage` |
| **Windows** | `.msi` + `.exe` (NSIS) |
#### Linux
```bash
# .deb (Debian/Ubuntu/Deepin)
sudo dpkg -i obsigate_2.0.0_amd64.deb
# Lancer : ObsiGate depuis le menu applications ou `obsigate-desktop`
# .AppImage (toute distrib)
chmod +x ObsiGate_2.0.0_amd64.AppImage
./ObsiGate_2.0.0_amd64.AppImage
```
#### Windows
```cmd
:: Double-cliquer sur ObsiGate_2.0.0_x64.msi
:: Ou lancer ObsiGate depuis le menu Démarrer
```
### Démarrage
1. **Lance l'application** depuis le menu ou la ligne de commande
2. Le backend Python démarre automatiquement sur `127.0.0.1:17890`
3. La fenêtre s'ouvre et charge l'interface ObsiGate
4. **Premier lancement** : sélectionne le dossier de tes vaults Obsidian via le sélecteur natif
5. Pour fermer : icône tray → Quitter (arrêt propre du backend)
### Build depuis les sources
Voir le [guide détaillé dans desktop/](./desktop/README.md).
```bash
# Linux
cd desktop
chmod +x build-linux.sh
./build-linux.sh
# → target/release/bundle/deb/obsigate_2.0.0_amd64.deb
# → target/release/bundle/appimage/ObsiGate_2.0.0_amd64.AppImage
```
```cmd
REM Windows
cd desktop
build-windows.bat
REM → target/release/bundle/msi/ObsiGate_2.0.0_x64.msi
```
### Architecture Desktop
```
┌────────────────────────────────────────────┐
│ Tauri (Rust) │
│ ├─ Webview (webview système) │
│ │ └─ Frontend (HTML/JS/CSS) │
│ └─ Sidecar Python │
│ └─ uvicorn backend.main:app │
│ └─ port 127.0.0.1:17890 │
└────────────────────────────────────────────┘
```
Cycle de vie : Tauri spawn le backend Python → health check → ouvre la webview. À la fermeture : SIGTERM → arrêt propre → nettoyage.
---
## �📖 Utilisation ## �📖 Utilisation
### Interface web ### Interface web
+219 -36
View File
@@ -1,80 +1,263 @@
# ObsiGate Desktop # ObsiGate Desktop
Application desktop native pour [ObsiGate](https://git.dracodev.net/Projets/ObsiGate) — construite avec [Tauri](https://tauri.app/). Application desktop native pour [ObsiGate](https://git.dracodev.net/Projets/ObsiGate) — construite avec [Tauri](https://tauri.app/) (Rust + webview système).
> 🚧 **Phase de conception** — les binaires ne sont pas encore disponibles. > 🚧 **Version 2.0.0 — les binaires sont en cours de stabilisation.** Le build depuis les sources est la méthode recommandée pour le moment.
## Prérequis ## Table des matières
### Windows - [Installation (binaires pré-buildés)](#installation-binaires-pré-buildés)
- [Rust](https://rustup.rs/) (stable ≥ 1.75) - [Build depuis les sources](#build-depuis-les-sources)
- Tauri CLI : `cargo install tauri-cli` - [Démarrage](#démarrage)
- NSIS (inclus dans le build) - [Configuration des vaults](#configuration-des-vaults)
- Python 3.11 embed (téléchargé automatiquement) - [Architecture](#architecture)
- [Fonctionnalités natives](#fonctionnalités-desktop-natives)
- [Dépannage](#dépannage)
---
## Installation (binaires pré-buildés)
Les releases sont publiées sur [Gitea](https://git.dracodev.net/Projets/ObsiGate/releases).
### Linux ### Linux
```bash ```bash
sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev # .deb (Debian/Ubuntu/Deepin) — installation système
cargo install tauri-cli sudo dpkg -i obsigate_2.0.0_amd64.deb
# Lancement : menu applications → ObsiGate, ou :
obsigate-desktop
# .AppImage (toute distribution) — portable, pas d'installation
chmod +x ObsiGate_2.0.0_amd64.AppImage
./ObsiGate_2.0.0_amd64.AppImage
``` ```
## Build Dépendances runtime (normalement déjà présentes) :
```bash
sudo apt install libwebkit2gtk-4.1-0 libgtk-3-0 libayatana-appindicator3-1
```
### Windows ### Windows
```cmd ```cmd
cd desktop :: .msi — installation standard
build-windows.bat :: Double-cliquer sur ObsiGate_2.0.0_x64.msi
:: → Crée un raccourci bureau + entrée menu Démarrer
:: .exe NSIS — installateur interactif
:: Mêmes options, inclut le raccourci
``` ```
→ Produit `target/release/bundle/msi/ObsiGate_2.0.0_x64.msi` + `.exe` NSIS
### macOS
> Non supporté pour le moment (priorité Linux/Windows).
---
## Build depuis les sources
### Prérequis communs
- [Rust](https://rustup.rs/) stable ≥ 1.75
- Tauri CLI : `cargo install tauri-cli`
- Python 3.11+
- Git
### Linux ### Linux
```bash ```bash
cd desktop # 1. Dépendances système
sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev curl
# 2. Cloner le projet
git clone https://git.dracodev.net/Projets/ObsiGate.git
cd ObsiGate/desktop
# 3. Build (tout-en-un)
chmod +x build-linux.sh chmod +x build-linux.sh
./build-linux.sh ./build-linux.sh
``` ```
→ Produit `target/release/bundle/deb/obsigate_2.0.0_amd64.deb` + `.AppImage`
Le script s'occupe de :
1. Vérifier Rust + Tauri CLI + dépendances système
2. Créer l'environnement Python (venv + requirements)
3. Copier le frontend
4. Builder Tauri en mode release
Produits :
- `target/release/bundle/deb/obsigate_2.0.0_amd64.deb`
- `target/release/bundle/appimage/ObsiGate_2.0.0_amd64.AppImage`
### Windows
```cmd
:: 1. Prérequis (PowerShell admin)
winget install Rustlang.Rustup
cargo install tauri-cli
:: 2. Cloner
git clone https://git.dracodev.net/Projets/ObsiGate.git
cd ObsiGate\desktop
:: 3. Build
build-windows.bat
```
Produits :
- `target\release\bundle\msi\ObsiGate_2.0.0_x64.msi`
- `target\release\bundle\nsis\ObsiGate_2.0.0_x64-setup.exe`
---
## Démarrage
### Premier lancement
1. **Lance l'application** (menu ou ligne de commande)
2. Le backend Python démarre automatiquement → health check sur `127.0.0.1:17890`
3. La fenêtre s'ouvre sur l'interface ObsiGate
4. **Sélectionne le dossier parent de tes vaults** Obsidian via le sélecteur natif
5. L'indexation démarre automatiquement
### Lancements suivants
- L'application mémorise le dernier dossier configuré
- Le backend démarre en ~2 secondes
- Les vaults sont ré-indexées au démarrage (incrémental si inchangé)
### Arrêt
- **Icône tray → Quitter** (recommandé) : SIGTERM → arrêt propre du backend → fermeture webview
- **Fermeture fenêtre (X)** : minimise dans le tray (backend continue de tourner)
- **Ctrl+C** dans le terminal (si lancé en dev) : arrêt immédiat
### Mode développement
```bash
cd desktop
cargo tauri dev
# → Lance le backend Python + ouvre la webview avec hot-reload
```
---
## Configuration des vaults
Au premier lancement, le sélecteur de dossier natif te demande le **dossier parent** contenant tes vaults Obsidian. Exemple :
```
/home/bruno/Documents/
├── Obsidian-Recettes/ ← vault #1
├── Obsidian-IT/ ← vault #2
└── Obsidian-Perso/ ← vault #3
```
Tous les sous-dossiers contenant un dossier `.obsidian` sont automatiquement détectés comme vaults.
### Configuration avancée
Le fichier de config desktop est stocké dans :
- **Linux** : `~/.config/obsigate-desktop/config.json`
- **Windows** : `%APPDATA%\ObsiGate\config.json`
```json
{
"vaults_path": "/home/bruno/Documents",
"backend_port": 17890,
"theme": "system"
}
```
---
## Architecture ## Architecture
``` ```
desktop/ desktop/
├── Cargo.toml # Dépendances Rust ├── Cargo.toml # Dépendances Rust (Tauri 2, plugins)
├── tauri.conf.json # Config Tauri (fenêtre, bundle, plugins) ├── tauri.conf.json # Config Tauri (fenêtre, bundle, plugins)
├── build.rs # Script build Tauri ├── build.rs # Script build Tauri
├── src/ ├── src/
│ └── main.rs # Point d'entrée Rust : spawn backend + webview │ └── main.rs # Point d'entrée Rust : spawn backend + webview
├── python-embed/ ├── python-embed/
│ ├── sidecar.py # Lance uvicorn sur 127.0.0.1:17890 │ ├── venv/ # Environnement Python isolé
│ └── ... # Python 3.11 + site-packages (gelés) │ └── ... # site-packages gelés
├── build-windows.bat # Script build Windows ├── build-linux.sh # Script build Linux (.deb + .AppImage)
├── build-linux.sh # Script build Linux ├── build-windows.bat # Script build Windows (.msi + NSIS)
└── icons/ # Icônes desktop (.ico, .png, .icns) └── icons/ # Icônes desktop (.ico, .png, .icns)
``` ```
## Fonctionnalités desktop natives ### Cycle de vie
| Fonctionnalité | Web | Desktop |
|---|---|---|
| Accès fichiers local | Via upload | Natif (sélecteur dossier) |
| Thème système | Manuel | Auto (suit OS dark/light) |
| Notifications | Service Worker | Natif OS |
| Associations `.md` | ❌ | ✅ « Ouvrir avec ObsiGate » |
| Tray icon | ❌ | ✅ Barre des tâches |
| Auto-update | ❌ | ✅ Vérifie releases Gitea |
| Mode hors-ligne | Limité | Complet (backend local) |
## Cycle de vie
``` ```
Démarrage : Démarrage :
1. Tauri lance python-embed/python → uvicorn backend.main:app 1. Tauri lance python-embed/venv/bin/python → uvicorn backend.main:app
2. Health check GET /api/health (timeout 15s) 2. Health check GET /api/health (timeout 15s)
3. Webview ouvre http://127.0.0.1:17890 3. Webview ouvre http://127.0.0.1:17890
Arrêt (tray → Quitter ou fermeture fenêtre) : Arrêt (tray → Quitter ou Ctrl+C) :
1. SIGTERM envoyé au processus Python 1. SIGTERM envoyé au processus Python
2. Backend s'arrête proprement (10s timeout) 2. Backend s'arrête proprement (10s timeout)
3. Tauri ferme la webview 3. Tauri ferme la webview
4. Processus nettoyé — aucun résidu 4. Processus nettoyé — aucun résidu
``` ```
---
## Fonctionnalités desktop natives
| Fonctionnalité | Web (Docker) | Desktop (Tauri) |
|---|---|---|
| Accès fichiers local | Via upload | Natif (sélecteur dossier) |
| Thème | Manuel (toggle) | Auto (suit OS dark/light) |
| Notifications | Service Worker | Natif OS |
| Associations `.md` | ❌ | ✅ « Ouvrir avec ObsiGate » |
| Tray icon | ❌ | ✅ Barre des tâches |
| Auto-update | ❌ (docker pull) | ✅ Vérifie releases Gitea |
| Mode hors-ligne | Limité | Complet (backend local) |
| RAM au repos | ~150 MB (Docker) | ~80 MB (natif) |
| Démarrage à froid | ~5s (Docker) | ~2s |
---
## Dépannage
### Le backend ne démarre pas
```bash
# Vérifier que le port 17890 est libre
ss -tlnp | grep 17890
# Lancer le backend manuellement pour voir les logs
cd ObsiGate
python -m uvicorn backend.main:app --host 127.0.0.1 --port 17890 --log-level debug
```
### La fenêtre reste blanche
- Vérifier que le backend répond : `curl http://127.0.0.1:17890/api/health`
- Si "connection refused" → le backend n'a pas démarré (voir section précédente)
- Si le healthcheck répond mais la webview est blanche → problème CSP ou webview
### Erreur libwebkit2gtk non trouvé
```bash
# Ubuntu/Debian/Deepin
sudo apt install libwebkit2gtk-4.1-0
# Si l'erreur persiste, installer la version dev
sudo apt install libwebkit2gtk-4.1-dev
```
### Build échoue sur Linux
```bash
# Nettoyer et rebuild
cargo clean
rm -rf python-embed/venv
./build-linux.sh
# Si erreur de linking, vérifier les -dev packages
sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev libssl-dev
```