Files
wiki/Catalogue-Self-Hosted/apps/app-leafwiki.md
T
2026-06-09 18:40:21 +02:00

152 lines
7.4 KiB
Markdown

---
title: LeafWiki
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, wiki, golang, single-binary, sqlite, markdown, minimaliste, docker]
confidence: high
contested: false
sources: [https://selfh.st/apps/?tag=Wiki, https://github.com/perber/leafwiki, https://leafwiki.com/]
---
# 🌿 LeafWiki
> **Wiki single-binary en Go, sans base externe** : un binaire autonome avec SQLite et Markdown sur disque, pensé pour les ingénieurs et self-hosters qui veulent une **documentation structurée et durable** sans Node.js, Redis ni Postgres.
## 📋 Informations Générales
| Champ | Valeur |
| :--- | :--- |
| **Site web** | [leafwiki.com](https://leafwiki.com/) |
| **GitHub** | [perber/leafwiki](https://github.com/perber/leafwiki) |
| **Licence** | MIT |
| **Langage** | Go |
| **Étoiles GitHub** | 356 ⭐ |
| **Dernière MAJ** | 2026-06-04 (v0.10.2) |
| **Catégorie** | [[cat-wiki]] |
## 📝 Description
**LeafWiki** est un wiki **self-hosted** qui assume pleinement la philosophie *"une documentation long-terme doit être lisible en dehors de l'application"*. Concrètement : le contenu des pages est stocké comme de simples fichiers `.md` sur disque, et seule la métadonnée (utilisateurs, tags, index de recherche) est dans un fichier **SQLite embarqué**. Pas de base externe, pas de runtime Node.js, pas de Redis : **un seul binaire Go** fait tout. Les sauvegardes sont un simple `cp -r` du dossier de données.
L'auteur le destine explicitement à ceux qui trouvent **Wiki.js, Outline, BookStack ou XWiki "trop à opérer"** pour leur besoin. L'application fonctionne sur **Linux, macOS, Windows et Raspberry Pi** (x86_64 et ARM64), ce qui en fait un choix naturel pour les homelabs, les notebooks d'ingénieur ou les runbooks d'équipe. La **navigation arborescente explicite** (vs. flux de notes à plat) est un parti-pris fort : on pense en *folders*, pas en *feed*, à la manière d'un Obsidian ou d'un Emacs Org-mode.
Côté fonctionnalités, LeafWiki offre une **recherche full-text** sur titres et contenu avec filtrage par tags, des **backlinks** détectés automatiquement par page, un **statut de lien** (incoming, outgoing, broken), un **éditeur Markdown** avec live preview, autocomplétion des liens internes et raccourcis clavier. Les extensions Markdown supportées incluent **tables, task lists, footnotes, callouts** (`:::info`, `:::warning`), **Mermaid** et **HTML inline sanitizé**. La gestion des utilisateurs couvre trois rôles (**admin, editor, viewer**) avec un **mode lecture publique + édition authentifiée**. Un **importeur ZIP** permet de migrer depuis Obsidian ou un dépôt Markdown existant. LeafWiki n'est pas conçu pour l'édition collaborative temps réel (pas de CRDT) et n'est pas un remplacement de Notion/Confluence : c'est un **outil de documentation personnelle ou de petite équipe** qui privilégie la sobriété opérationnelle.
## 🚀 Installation
### Option recommandée : Docker Compose
```yaml
# docker-compose.yml
services:
leafwiki:
image: ghcr.io/perber/leafwiki:latest
container_name: leafwiki
user: "1000:1000"
restart: unless-stopped
ports:
- "8080:8080"
environment:
- LEAFWIKI_JWT_SECRET=change-me-long-random-secret-32-bytes
- LEAFWIKI_ADMIN_PASSWORD=change-me-strong-password
- LEAFWIKI_ALLOW_INSECURE=true
volumes:
- ./leafwiki-data:/app/data
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://localhost:8080/"]
interval: 30s
timeout: 10s
retries: 3
```
> ⚠️ `LEAFWIKI_ALLOW_INSECURE=true` est **obligatoire en HTTP** (pour le développement). En HTTPS via reverse proxy, retirer cette option et s'assurer que le proxy transmet bien `X-Forwarded-Proto: https`.
### Option 2 : Script d'installation Linux (systemd)
```bash
sudo /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/perber/leafwiki/main/install.sh)"
```
Installe un service systemd et le binaire dans `/opt/leafwiki`. Mode non-interactif disponible avec `--env-file`.
### Option 3 : Binaire direct
Télécharger depuis [GitHub Releases](https://github.com/perber/leafwiki/releases) et lancer :
```bash
./leafwiki --jwt-secret=***-me --admin-password=*** --allow-insecure=true
```
### Reverse proxy (Nginx)
```nginx
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
```
LeafWiki supporte aussi `--base-path` pour être servi sous un sous-chemin.
## ⚙️ Configuration
- **`--jwt-secret`** : clé JWT obligatoire, longue et aléatoire (`openssl rand -hex 32`).
- **`--admin-password`** : mot de passe du compte admin créé au premier démarrage.
- **`--allow-insecure=true`** : à retirer en production HTTPS.
- **`--enable-revision`** : active l'historique de révisions (opt-in, désactivé par défaut).
- **`--enable-link-refactor`** : réécrit automatiquement les liens lors d'un renommage de page.
- **`--custom-stylesheet`** : chemin vers un CSS custom.
- **Reverse-proxy auth** (v0.10+) : si l'auth est gérée par le reverse proxy (ex. Authelia), LeafWiki peut faire confiance à un header HTTP.
- **Import Obsidian** : uploader un ZIP depuis l'admin, avec réécriture des wiki links.
## 🔄 Alternatives
### Open Source
- [[app-wiki-go]] — Wiki Go plus riche avec Kanban intégré
- [[app-otter-wiki]] — Wiki Python/Git minimaliste
- [[app-wikidocs]] — Wiki PHP flat-file WYSIWYG
- [[app-pepperminty-wiki]] — Wiki PHP single-file
- [[app-trilium-notes]] — PKM hiérarchique, plus puissant mais plus complexe
- **Wiki.js** — Wiki Node.js complet
- **Raneto** — KB Markdown Node.js
### Propriétaires
- **Notion** — Workspace moderne, beaucoup plus large
- **Obsidian Sync** — Sync payant d'Obsidian (le format reste local)
- **Dropbox Paper** — Docs collaboratifs
- **Slab** — Knowledge base d'équipe
## 🔐 Sécurité
-**Pas de base externe** : surface d'attaque minimale (SQLite local embarqué).
-**HTTPS obligatoire** en production pour que les JWT et cookies soient protégés.
-**JWT secret** long et stocké hors du dépôt Git.
- ⚠️ **`--allow-insecure=true`** : à supprimer dès que HTTPS est en place.
-**Rôles stricts** : admin / editor / viewer, pas d'ACL par page.
-**Mode lecture publique** possible : limiter l'auth à l'édition.
-**Backups** : un `cp -r leafwiki-data/` suffit (Markdown + SQLite).
-**Reverse-proxy auth** : permet d'intégrer Authelia/Authentik/Keycloak en amont.
- ⚠️ **Optimistic locking** : pas de merge automatique, le dernier écrivant gagne.
## 📚 Ressources
- [Site officiel leafwiki.com](https://leafwiki.com/)
- [Dépôt GitHub perber/leafwiki](https://github.com/perber/leafwiki)
- [Démo en ligne](https://demo.leafwiki.com/) (reset horaire)
- [Devlog #1 sur dev.to](https://dev.to/perber/leafwiki-my-take-on-a-simpler-self-hosted-wiki-khi)
- [Documentation install Nginx](https://github.com/perber/leafwiki/blob/main/docs/install/nginx.md)
- [Documentation install Raspberry Pi](https://github.com/perber/leafwiki/blob/main/docs/install/raspberry-pi.md)
## Pages Liées
- [[cat-wiki]] — Vue d'ensemble de la catégorie Wiki
- [[app-wiki-go]] — Wiki Go plus complet avec Kanban
- [[app-otter-wiki]] — Alternative Python/Git
- [[app-trilium-notes]] — PKM plus puissant
- [[recettes-docker-compose]] — Templates Docker
- [[securisation-home-lab]] — Bonnes pratiques de sécurité