152 lines
7.4 KiB
Markdown
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é
|