Files
ObsiGate/desktop
bruno 82fe053c7d
CI / lint (push) Successful in 26s
CI / security (push) Successful in 13s
CI / test (push) Successful in 31s
CI / build (push) Successful in 6s
CI / e2e (push) Failing after 33s
Desktop Build / build-windows (push) Has been cancelled
Desktop Build / build-linux (push) Has been cancelled
feat: Phase 3 Desktop — native menu, auto-update, hidden terminal
- #![windows_subsystem = "windows"]: no console window on Windows release builds
- CREATE_NO_WINDOW (0x08000000): Python backend subprocess hidden on Windows
- Native menu bar: Fichier (N/Fermer/Quitter) + Edition (Undo/Redo/Cut/Copy/Paste/SelectAll) + Aide (About)
- Auto-update: tauri-plugin-updater checks Gitea releases endpoint
- tauri.conf.json: updater plugin config with passive install mode
- ROADMAP: Phase 3 marked as complete (11/11 subtasks done)
2026-07-27 00:45:23 -04:00
..

ObsiGate Desktop

Application desktop native pour ObsiGate — construite avec Tauri (Rust + webview système).

🚧 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.

Table des matières


Installation (binaires pré-buildés)

Les releases sont publiées sur Gitea.

Linux

# .deb (Debian/Ubuntu/Deepin) — installation système
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

Dépendances runtime (normalement déjà présentes) :

sudo apt install libwebkit2gtk-4.1-0 libgtk-3-0 libayatana-appindicator3-1

Windows

:: .msi — installation standard
:: 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

macOS

Non supporté pour le moment (priorité Linux/Windows).


Build depuis les sources

Prérequis communs

  • Rust stable ≥ 1.75
  • Tauri CLI : cargo install tauri-cli
  • Python 3.11+
  • Git

Linux

# 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
./build-linux.sh

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 (via Scoop)

# 1. Installer Scoop (si pas déjà fait)
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
irm get.scoop.sh | iex

# 2. Prérequis via Scoop
scoop install rustup curl git
rustup default stable
cargo install tauri-cli

# 3. Cloner
git clone https://git.dracodev.net/Projets/ObsiGate.git
cd ObsiGate\desktop

# 4. Build
.\build-windows.bat

Le script télécharge automatiquement Python 3.11 embed et les dépendances backend.

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)
    • 💡 Premier lancement recommandé depuis un terminal pour voir le mot de passe admin généré
  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 (écran de connexion si l'auth est activée)
  4. Connecte-toi avec le compte admin créé automatiquement (voir Compte administrateur)
  5. Sélectionne le dossier parent de tes vaults Obsidian via le sélecteur natif
  6. L'indexation démarre automatiquement

Compte administrateur

Au premier démarrage, un compte administrateur est créé automatiquement :

  • Login : admin (modifiable via la variable d'environnement OBSIGATE_ADMIN_USER)
  • Mot de passe : généré aléatoirement (16 caractères) et affiché une seule fois dans les logs

Le mot de passe apparaît dans la sortie du terminal sous cette forme :

============================================================
PREMIER DÉMARRAGE — Compte admin créé automatiquement
  Utilisateur : admin
  Mot de passe : XXXXXXXXXXXXXXXX
CHANGEZ CE MOT DE PASSE dès la première connexion !
============================================================

⚠️ Note le mot de passe immédiatement — il n'est affiché qu'une seule fois. Si tu rates les logs, supprime le dossier data/ et relance l'application pour régénérer un nouveau compte.

Prédéfinir le mot de passe (recommandé) :

Avant le premier lancement, définis les variables d'environnement suivantes :

  • Windows (PowerShell) : $env:OBSIGATE_ADMIN_PASSWORD="MonMotDePasse"
  • Linux : export OBSIGATE_ADMIN_PASSWORD="MonMotDePasse"

Tu peux aussi définir OBSIGATE_ADMIN_USER pour changer le nom d'utilisateur.

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

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
{
  "vaults_path": "/home/bruno/Documents",
  "backend_port": 17890,
  "theme": "system"
}

Architecture

desktop/
├── Cargo.toml              # Dépendances Rust (Tauri 2, plugins)
├── tauri.conf.json          # Config Tauri (fenêtre, bundle, plugins)
├── build.rs                 # Script build Tauri
├── src/
│   └── main.rs              # Point d'entrée Rust : spawn backend + webview
├── python-embed/
│   ├── venv/                # Environnement Python isolé
│   └── ...                  # site-packages gelés
├── build-linux.sh            # Script build Linux (.deb + .AppImage)
├── build-windows.bat         # Script build Windows (.msi + NSIS)
└── icons/                    # Icônes desktop (.ico, .png, .icns)

Cycle de vie

Démarrage :
  1. Tauri lance python-embed/venv/bin/python → uvicorn backend.main:app
  2. Health check GET /api/health (timeout 15s)
  3. Webview ouvre http://127.0.0.1:17890

Arrêt (tray → Quitter ou Ctrl+C) :
  1. SIGTERM envoyé au processus Python
  2. Backend s'arrête proprement (10s timeout)
  3. Tauri ferme la webview
  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

# 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é

# 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

# 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