Épinglez des fichiers pour les retrouver ici.
Épinglez des fichiers pour les retrouver ici.
Préférences personnelles pour personnaliser l'expérience ObsiGate.
Activez l'authentification à deux facteurs (2FA) pour renforcer la sécurité de votre compte.
Choisissez un thème visuel. Chaque thème offre un mode sombre, clair, contraste élevé et sépia.
Ces paramètres s'appliquent immédiatement côté client.
Définissez les patterns de tags à masquer dans la sidebar. Vous pouvez utiliser des wildcards pour cibler les tags de template.
Surveillance des fichiers en temps réel via watchdog. Les modifications sont détectées automatiquement et l'index est mis à jour sans redémarrage.
Ces paramètres sont sauvegardés sur le serveur. Certains nécessitent un redémarrage ou une réindexation.
Statistiques de l'index et du moteur de recherche.
Configurez vos cles API fournisseur par fournisseur. Dépliez une carte pour saisir une clé, puis cliquez sur Tester pour charger les modeles.
Clés utilisées par les outils de l'Assistant IA (recherche web à clé, Gitea, GitHub). Elles sont stockées localement et priment sur les variables d'environnement.
Jetons longue durée pour l'API REST et le serveur MCP. La même clé fonctionne pour les deux (en-tête Authorization: Bearer).
Recevez des notifications web push lorsque des fichiers changent dans vos vaults, même si ObsiGate n'est pas ouvert.
Notifications HTTP vers des services externes lors des changements de fichiers.
Liens de partage publics pour des documents (lecture seule, sans authentification).
Extend ObsiGate with custom renderers, search filters, and editor actions.
ObsiGate est votre porte d'entrée web vers vos vaults Obsidian. Accédez, naviguez et recherchez dans toutes vos notes depuis n'importe quel appareil via une interface moderne et responsive.
ObsiGate est une application web complète construite en couches indépendantes, sans base de données externe : les notes vivent dans vos dossiers Obsidian, l'état applicatif dans des fichiers JSON de data/, l'index de recherche en mémoire.
flowchart TB
subgraph client["Clients"]
UI["SPA vanilla JS\n(frontend/js)"]
PWA["PWA hors-ligne\n(service worker + IndexedDB)"]
DESK["App desktop Tauri\n(fenêtre native)"]
end
subgraph server["Serveur FastAPI (Python 3.11)"]
API["REST /api\nJWT + Argon2id"]
IDX["Index recherche\nTF-IDF + embeddings"]
FS["Accès fichiers\nwatchdog + safe paths"]
PDF["Rendu markdown\nmistune + WeasyPrint"]
AI["Assistant IA\nproviders + outils"]
MCP["Serveur MCP\n/mcp (HTTP)"]
WS["WebSocket\ncollab Yjs + SSE"]
WH["Webhooks\nHMAC-SHA256"]
end
subgraph data["Données"]
V1["Vault 1 (dossier)"]
V2["Vault 2 (dossier)"]
CFG["data/*.json\nconfig, users, audit"]
BK[".obsigate-backup/\nbackups horodatés"]
end
UI -- HTTP --> API
PWA -- "cache + queue" --> API
DESK -- embarqué --> API
API --> IDX
API --> FS
API --> PDF
API --> AI
MCP --> AI
WS --> FS
FS --> V1
FS --> V2
IDX --> V1
IDX --> V2
BK --> V1
API --> CFG
API -- événements --> WH
Le diagramme est interactif dans l'application : zoom, plein écran, copie SVG ou code.
frontend/js/ (~30 modules). Le CSS utilise des variables pour les thèmes.
/mcp) pour les clients externes.
data/), les backups horodatés (.obsigate-backup/), l'audit en JSON lines, les clés API chiffrées dans data/api_keys.json.
Un clic sur un fichier émet GET /api/file/... ; le backend résout le chemin en sécurité, parse le frontmatter, rend le markdown et renvoie le HTML ; le frontend enrichit l'affichage (Mermaid, coloration, wikilinks cliquables). Chaque écriture crée un backup avant application.
La barre supérieure contient les éléments essentiels :
La sidebar est divisée en deux onglets :
Fonctionnalités de la sidebar :
La zone centrale affiche :
Autorisez les notifications (bouton 🔔 de l'en-tête) pour être averti des fins de synchronisation hors-ligne et des événements importants. La gestion des abonnements est dans les Configurations.
Basée sur la Web Push API (clés VAPID) ; fonctionne sur desktop et PWA mobile, sans service tiers : le serveur émet directement vers les endpoints push des navigateurs.
ObsiGate supporte l'ouverture de plusieurs fichiers simultanément dans des onglets.
Tapez dans la barre de recherche en haut pour lancer une recherche fulltext :
Utilisez des opérateurs pour affiner votre recherche :
tag:docker ou
#docker : Filtrer par tag
vault:IT : Rechercher dans un
vault spécifique
title:kubernetes : Chercher
dans les titres uniquement
path:recettes/soupes : Filtrer
par chemin
ext:md : Filtrer par type de
fichier
"phrase exacte" : Recherche de
phrase entre guillemets
Exemples:
ext:sh recherche dans les scripts
bash, ext:py dans les scripts
Python, ext:md dans les fichiers
Markdown.
Exemple combiné :
tag:linux vault:IT ext:md serveur web
recherche "serveur web" dans les fichiers
Markdown du vault IT avec le tag linux.
L'autocomplétion vous aide à trouver rapidement :
Les opérateurs utilisés s'affichent sous forme de chips colorés :
Les résultats incluent des facettes pour affiner :
Activez le bouton « S » de la barre de recherche (ou Alt-S) pour combiner TF-IDF et similarité vectorielle (fusion RRF) : les concepts approchants (« velours » trouve « tissu doux ») remontent mieux.
Le moteur d'embeddings (modèle multilingue) est optionnel : sans lui, un repli par hash conserve une recherche hybride fonctionnelle. Les vecteurs sont recalculés à chaque indexation du vault.
L'onglet Tags de la sidebar affiche un nuage de tags :
ObsiGate supporte deux types de tags :
tags: [docker, linux] ou
tags: docker, linux
#docker dans le contenu
markdown
Dans les Configurations, vous pouvez masquer les tags de template :
#<% ... %> ou
#{{ ... }}
Les fichiers markdown sont rendus avec :
[[lien]] et
[[lien|texte]]
![[image.png]]
Boutons disponibles au-dessus du contenu :
L'éditeur intégré offre :
ObsiGate indexe et affiche :
Le bouton « PDF » d'un document le rend avec le même moteur que la vue (WeasyPrint) : titres, tableaux, listes et code sont conservés. Depuis un lien public, la route /s/{token}/pdf produit le même PDF.
Le menu « Exporter » propose trois formats : HTML autonome (fichier unique, images incluses), ePub pour les liseuses et, pour un dossier, un bundle Markdown en ZIP — liens et ressources résolus pendant l'export.
L'upload en masse (glisser-déposer un dossier sur la sidebar) compare chaque fichier au contenu existant : un fichier déjà présent est ignoré plutôt que dupliqué avec un suffixe « (1) ». Utile pour restaurer un vault sans créer de doublons.
Les fichiers .excalidraw et
.excalidraw.md s'ouvrent dans un éditeur visuel
Excalidraw complet, intégré dans une iframe sandboxée.
.excalidraw dans
l'arborescence : l'éditeur s'ouvre à la place du viewer markdown.
.excalidraw.md compressé) sont
compatibles.
Les blocs ```mermaid de vos notes sont rendus en diagrammes interactifs (Mermaid v11, chargé depuis un CDN).
Types supportés : flowchart, sequence, class, state, ER, gantt, pie, journey, quadrant, radar, mindmap, timeline, C4, xychart, sankey — plus un préprocesseur qui comprend la syntaxe Obsidian.
Les dessins à main levée (.excalidraw, .excalidraw.md) sont couverts dans la section 🎨 Excalidraw.
L'éditeur intégré offre une expérience complète d'édition :
Sur téléphone et tablette, l'édition s'adapte au tactile : barre d'outils flottante, gestes et mode lecture plein écran.
Marquez un fichier d'un ★ (bouton Signet de la barre d'actions) : il rejoint la liste des signets du dashboard. Les fichiers récemment ouverts sont listés automatiquement dans l'onglet « Récents » de la sidebar, avec un filtre de recherche dédié.
Enregistrez une recherche depuis la page de résultats pour la relancer en un clic depuis la sidebar : chaque recherche sauvegardée conserve ses opérateurs et filtres.
Le panneau Backlinks liste toutes les notes qui pointent vers le fichier ouvert. La vue Graphe (bouton 🕸️) affiche les liens entre fichiers : glissez les nœuds, zoomez à la molette, double-cliquez pour ouvrir une note.
Si vous synchronisez le vault avec Syncthing, ObsiGate détecte les fichiers de conflit (copies « sync-conflict ») et propose de les comparer puis résoudre depuis la page dédiée du menu Options.
Les images ![[image.png]], pièces jointes et médias (audio, vidéo, PDF intégrés) dans les notes sont rendus dans le viewer et indexés pour la recherche ; le bouton « Rescan attachments » de la configuration recrée l'index des pièces jointes.
La vue graphe offre une visualisation interactive des connexions entre vos notes via les wikilinks.
La vue utilise l'algorithme Barnes-Hut pour calculer la disposition en O(n log n), garantissant des performances fluides même avec des centaines de nœuds.
Basculez entre les thèmes :
Ctrl+T
Sur desktop, ajustez la largeur de la sidebar :
Le modal Configurations (menu Options) permet de :
Le bouton « Diviser » de la barre d'actions ouvre le document dans un panneau jumeau ; empilez plusieurs panneaux pour comparer deux notes ou lire et éditer en parallèle. Les largeurs se règlent au bord des panneaux et sont mémorisées.
La palette de commandes permet d'accéder rapidement aux fichiers et aux actions sans utiliser la souris.
Tapez le nom d'un fichier pour le trouver
rapidement. La recherche utilise l'API
/api/suggest pour des suggestions
instantanées. Appuyez sur Enter pour
ouvrir le fichier sélectionné.
Tapez > (ou Ctrl+Alt+Espace)
pour voir la liste des actions disponibles :
Ctrl+K ou Cmd+K :
Focaliser la barre de recherche
/ : Focaliser la recherche
(hors champ texte)
Escape : Fermer les suggestions
/ quitter la recherche
↑ / ↓ : Naviguer
dans les suggestions
Enter : Sélectionner la
suggestion active ou lancer la recherche
Escape : Fermer le dropdown de
suggestions
Ctrl+T : Basculer le thème
clair/sombre
Ctrl+Shift+Espace : Palette de
fichiers
Ctrl+Alt+Espace : Palette de
commandes
Escape : Fermer la palette /
les suggestions
Ctrl+W : Fermer l'onglet actif
Ctrl+Tab : Onglet suivantCtrl+Shift+Tab : Onglet
précédent
Ctrl+F : Rechercher dans le
fichier
Ctrl+Z : AnnulerCtrl+Y : RefaireCtrl+S : Sauvegarder (si
configuré)
ObsiGate intègre un assistant IA directement
dans l'éditeur de texte. Pour l'activer,
configurez au moins un provider AI dans le
fichier .env (DeepSeek, OpenRouter
ou Gemini).
.env :
DEEPSEEK_API_KEY=sk-...
docker compose down && docker compose
up -d --build
La barre d'outils contient les boutons suivants :
L'éditeur sauvegarde automatiquement après 2 secondes d'inactivité. Le bouton de sauvegarde flashe en vert brièvement pour confirmer.
| Provider | Variable .env | |
|---|---|---|
| DeepSeek | DEEPSEEK_API_KEY |
deepseek-chat |
| OpenRouter | OPENROUTER_API_KEY |
openai/gpt-4o-mini |
| Gemini | GEMINI_API_KEY |
gemini-2.0-flash |
Pour changer de provider par défaut :
AI_DEFAULT_PROVIDER=openrouter
L'assistant latéral (bouton flottant ou menu contextuel d'un dossier) répond en Markdown formaté et contextualise vos répertoires ou documents.
@ pour joindre un fichier ou un répertoire au
contexte, ou pour attacher une image d'un répertoire.
/ pour lancer un skill (recherche, résumé,
correction, plan…) ou une commande admin
(/help, /providers,
/model, /keys).
ObsiGate permet de partager des documents via un lien public temporaire.
/s/{token}/pdf
Les webhooks permettent à ObsiGate de
notifier automatiquement des services
externes
lorsque des fichiers ou dossiers sont modifiés.
Chaque événement déclenche un
POST HTTP vers l'URL de votre
choix, avec un payload JSON détaillé.
publish: true
| Événement | Déclencheur | Données |
|---|---|---|
file_created
|
Création via l'API ou la palette |
vault,
path
|
file_deleted
|
Suppression via l'API ou l'éditeur |
vault,
path
|
file_renamed
|
Renommage via l'API |
vault,
old_path,
new_path
|
directory_created
|
Création de dossier via l'API |
vault,
path
|
directory_deleted
|
Suppression de dossier via l'API |
vault,
path
|
directory_renamed
|
Renommage de dossier via l'API |
vault,
old_path,
new_path
|
Note : l'événement
file_modified est réservé pour
usage futur. Les modifications de contenu
via l'éditeur ne déclenchent pas encore de
webhook.
Chaque webhook reçoit un POST avec
Content-Type: application/json :
{
"event": "file_created",
"timestamp": "2026-06-03T14:30:00.123456+00:00",
"data": {
"vault": "IT",
"path": "procedures/deploiement.md"
}
}
Si vous configurez un secret, chaque requête
inclut un header
X-ObsiGate-Signature :
X-ObsiGate-Signature: sha256=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
Pour vérifier côté récepteur : calculez
HMAC-SHA256(corps_brut, secret) et
comparez. Le header
X-ObsiGate-Event contient aussi le
type d'événement pour un routage rapide.
Les webhooks se gèrent dans le modal Configurations (⚙️ menu Options), section Webhooks. Réservé aux administrateurs.
Les webhooks peuvent être activés/désactivés,
modifiés ou supprimés à tout moment. Le
last_fired_at indique la dernière
exécution.
from flask import Flask, request\nimport hmac, hashlib\n\napp = Flask(__name__)\nWEBHOOK_SECRET = "mon-secret" # même que dans ObsiGate\n\n@app.route("/webhook", methods=["POST"])\ndef webhook():\n # Vérifier la signature\n signature = request.headers.get("X-ObsiGate-Signature", "")\n body = request.get_data()\n expected = "sha256=" + hmac.new(\n WEBHOOK_SECRET.encode(), body, hashlib.sha256\n ).hexdigest()\n if not hmac.compare_digest(signature, expected):\n return "Invalid signature", 403\n\n payload = request.get_json()\n print(f"Événement: {payload['event']}")\n print(f"Fichier: {payload['data']['vault']}/{payload['data']['path']}")\n return "OK", 200\n\napp.run(port=5000)
https://n8n.monserveur.com/webhook/abc123)
Utilisez un webhook relais (n8n, Make, ou un script) pour transformer le payload ObsiGate en message Discord :
# Exemple avec curl + jq dans un script bash
WEBHOOK_URL="https://discord.com/api/webhooks/..."
OBSIGATE_SECRET="mon-secret"
# Lire le payload depuis stdin
read -r payload
event=$(echo "$payload" | jq -r '.event')
path=$(echo "$payload" | jq -r '.data.path')
curl -H "Content-Type: application/json" -d "{
\"content\": \"📝 **$event** — $path\"
}" "$WEBHOOK_URL"
# Simuler ce qu'ObsiGate envoie (pour tester votre endpoint)
curl -X POST https://votre-serveur.com/webhook \
-H "Content-Type: application/json" \
-H "X-ObsiGate-Event: file_created" \
-H "X-ObsiGate-Signature: sha256=$(echo -n '{"event":"file_created",...}' | openssl dgst -sha256 -hmac 'mon-secret' | cut -d' ' -f2)" \
-d '{"event":"file_created","timestamp":"2026-06-03T14:30:00Z","data":{"vault":"IT","path":"notes/test.md"}}'
file_modified n'est pas encore
dispatché (réservé pour version future)
ObsiGate crée automatiquement des sauvegardes avant chaque modification destructive.
.obsigate-backup/
.obsigate-backup/ dans le
répertoire de la vault
Toutes les opérations sensibles sont tracées dans un journal.
data/audit.log au format JSON
lines
../
Activez la double authentification dans Réglages → Profil : applications TOTP (Authy, Aegis…), clés de sécurité et passkeys (WebAuthn, y compris Windows Hello) et 10 codes de secours à conserver hors ligne. Chaque méthode s'active et se désactive indépendamment.
Le rôle admin ouvre une page dédiée /admin.html (bouton du menu Options) : statut du serveur en direct, utilisateurs, vaults, sessions actives et journal d'audit. Le CRUD utilisateurs est aussi disponible dans les Configurations.
tag: et
vault: accélèrent la recherche
tag:docker tag:linux vault:IT
nginx
ObsiGate expose une API REST couvrant toute l'application (vaults, fichiers, recherche, backups, export, IA, partage, admin), documentée en OpenAPI 3.1 :
/docs — interface Swagger UI pour essayer les requêtes en direct./redoc — référence alternative plus compacte./api — page de garde regroupant les endpoints par catégorie./openapi.json — le schéma machine, à importer dans Postman ou Insomnia.Connectez-vous via POST /api/auth/login pour obtenir un token Bearer (le même jeton est accepté en cookie HttpOnly, ce qui permet aux clients navigateur d'utiliser credentials: "include"). Toutes les routes /api/* exigent ce jeton sauf mention contraire.
Les outils de l'assistant IA (lire, lister, chercher, ouvrir, écrire…) sont exposés à tout client MCP (Claude Desktop, Cursor, Cline…) sur https://votre-instance/mcp avec un token d'API. Configuration et exemples : docs/MCP_GUIDE.md.
Pour automatiser depuis l'extérieur : GET /api/search?q=… et GET /api/file/{vault}?path=… permettent d'indexer ou relire vos notes dans un autre outil ; les webhooks sortants (section 🪝) évitent le polling.
Les plugins étendent ObsiGate : affichage personnalisé des fichiers, filtres de recherche, actions d'édition, widgets et intégrations. Ils s'exécutent dans des Web Workers sandboxés — isolés de la page pour la sécurité.
.zip contenant le manifest
plugin.json + le code du plugin.
Téléchargez le modèle depuis Réglages → Plugins → « Obtenir le
modèle ». Un plugin se compose d'un manifest
plugin.json et d'un fichier principal (ex.
index.js).