Ces situations vous disent-elles quelque chose ?
Vous avez bookmarké un excellent article, et quelques mois plus tard, quand vous revenez dessus : page blanche, spinner de chargement infini, ou une requête vers un serveur analytics qui n'existe plus et qui bloque toute la page. Cette page ne vous a jamais vraiment appartenu ; ce n'était qu'un client léger JavaScript géré par quelqu'un d'autre.
Autre scénario : vous devez lire une documentation technique sans connexion internet (dans un avion, sur le terrain, ou dans un data center), ou vous souhaitez archiver définitivement le contenu d'un site au cas où il disparaîtrait du jour au lendemain.
L'outil dont nous parlons aujourd'hui, kage (du japonais「影」, prononcé /ka-ge/), a été créé précisément pour répondre à ces besoins.
Qu'est-ce que kage ?
kage est un outil en ligne de commande open-source écrit en Go. Il utilise Chrome headless pour rendre les pages de manière authentique, attend que la page soit entièrement chargée, capture un instantané du DOM, puis supprime automatiquement tous les fichiers JavaScript et télécharge les ressources statiques (CSS, images, polices) en local. Le résultat : une collection de fichiers .html que vous pouvez ouvrir directement depuis votre disque, sans aucune dépendance réseau et sans exécuter le moindre script.
- ⭐ Stars GitHub : 2600+ (créé en juin 2026, croissance rapide)
- 🏷️ Langage : Go
- 📜 Licence : MIT
- 🧑💻 Auteur : tamnd
kage vs « Enregistrer sous » traditionnel
| Fonctionnalité | Enregistrer sous (navigateur) | wget / curl | kage |
|---|---|---|---|
| Rendu JavaScript | ❌ | ❌ | ✅ Chrome headless, rendu complet |
| Suppression automatique du JS | ❌ | ❌ | ✅ Tous les scripts supprimés |
| Support SPA / contenu dynamique | ❌ | ❌ | ✅ Compatible Vue / React / Angular |
| Clonage intégral du site | ❌ | ⚠️ Limité | ✅ Suit les liens automatiquement, parcours en largeur |
| Empaquetage en fichier unique | ❌ | ❌ | ✅ ZIM / exécutable autonome |
| Disponible hors ligne | ⚠️ Souvent défaillant | ⚠️ Souvent défaillant | ✅ Parfaitement hors ligne |
Fonctionnement de base
Accès à l'URL → Rendu Chrome headless → Attendre la stabilité de la page → Capture du DOM final → Suppression de tous les <script> → Téléchargement CSS / images / polices → Sauvegarde locale → Poursuite du suivi des liens
kage ne se contente pas de télécharger le code source HTML. Il rend la page comme un véritable navigateur, garantissant que le résultat final correspond exactement à ce que l'utilisateur voit à l'écran.
Installer kage
kage propose plusieurs méthodes d'installation, compatibles Linux, macOS et Windows.
Méthode 1 : via Go
Si Go est déjà installé (Go 1.21+ recommandé) :
go install github.com/tamnd/kage/cmd/kage@latest
Méthode 2 : via Homebrew (macOS)
brew install --cask tamnd/tap/kage
Méthode 3 : via Scoop (Windows)
scoop bucket add tamnd https://github.com/tamnd/scoop-bucket
scoop install kage
Méthode 4 : via apt (Ubuntu/Debian)
# Ajouter la clé du dépôt et la source
curl -fsSL https://tamnd.github.io/linux-repo/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/tamnd.gpg
echo "deb [signed-by=/usr/share/keyrings/tamnd.gpg] https://tamnd.github.io/linux-repo/apt stable main" | sudo tee /etc/apt/sources.list.d/tamnd.list
sudo apt update && sudo apt install kage
Méthode 5 : via dnf (Fedora/RHEL)
sudo dnf config-manager --add-repo https://tamnd.github.io/linux-repo/dnf/tamnd.repo
sudo dnf install kage
Méthode 6 : via Docker (sans installer Chrome)
L'image Docker inclut Chromium, tout fonctionne immédiatement :
docker run --rm -v "$PWD/out:/out" ghcr.io/tamnd/kage clone paulgraham.com
Vérifier l'installation
kage --version
kage completion bash # ou zsh / fish, pour activer l'autocomplétion par tabulation
Remarque : kage nécessite Chrome ou Chromium. Sauf si vous utilisez Docker, vous devez installer Chrome/Chromium sur votre machine. kage détecte automatiquement le chemin d'installation système ; vous pouvez aussi le spécifier avec le paramètre
--chromeou la variable d'environnementKAGE_CHROME.
Prise en main : clonez un site en 3 minutes
Prenons le blog de Paul Graham en exemple pour le cloner entièrement en local :
# 1. Cloner le site entier vers $HOME/data/kage/paulgraham.com/
kage clone paulgraham.com
# 2. Prévisualiser en local
kage serve $HOME/data/kage/paulgraham.com
# Ouvrir dans le navigateur : http://127.0.0.1:8800
C'est tout ! Tous les articles, toutes les images, tous les fichiers de style sont figés sur votre disque. Aucune connexion réseau n'est nécessaire.
Limiter l'étendue du clonage
Si vous voulez juste tester rapidement, limitez la profondeur de clonage :
# Cloner seulement les 50 premières pages, avec un suivi de 2 niveaux de liens maximum
kage clone paulgraham.com --max-pages 50 --max-depth 2
# Cloner uniquement un sous-répertoire du site
kage clone go.dev --scope-prefix /doc
# Exclure certains chemins (publicités ou pages inutiles)
kage clone example.com --exclude /ads --exclude /track
Paramètres utiles
| Paramètre | Valeur par défaut | Description |
|---|---|---|
-o, --out |
$HOME/data/kage |
Répertoire de sortie |
-p, --max-pages |
0 (illimité) |
Nombre maximum de pages à cloner |
-d, --max-depth |
0 (illimité) |
Profondeur de suivi des liens |
--scope-prefix |
Aucun | Cloner uniquement les chemins commençant par ce préfixe |
--subdomains |
false |
Inclure les sous-domaines |
--scroll |
false |
Faire défiler automatiquement la page (déclenche le lazy loading) |
--workers |
4 |
Nombre de pages rendues en parallèle |
--no-robots |
false |
Ignorer le fichier robots.txt |
--refresh |
false |
Mise à jour incrémentale d'un clonage existant |
Fonctionnalités avancées
1. Défilement automatique pour le lazy loading
De nombreux sites modernes utilisent le lazy loading pour les images : les images ne se chargent pas si l'utilisateur ne fait pas défiler la page. kage peut simuler ce défilement automatiquement :
kage clone example.com --scroll
kage fait automatiquement défiler chaque page jusqu'en bas, garantissant que toutes les images chargées paresseusement, les iframes et autres contenus sont entièrement rendus et sauvegardés.
2. Mise à jour incrémentale (--refresh)
Le blog cloné il y a un mois a été mis à jour avec de nouveaux articles ? Pas besoin de recommencer depuis zéro :
kage clone paulgraham.com --refresh
L'option --refresh rerendra les pages existantes et récupérera les nouveaux contenus. Le clonage de kage est idempotent : une même page, qu'on y accède par http ou https, n'est sauvegardée qu'une seule fois.
3. Interruption propre et reprise
Vous appuyez sur Ctrl+C pendant le clonage ? Pas de problème, kage sauvegarde automatiquement la progression :
# Interrompre avec Ctrl+C, la prochaine exécution reprendra automatiquement
kage clone paulgraham.com
4. Inclure les sous-domaines
kage clone example.com --subdomains
Cela clonera simultanément blog.example.com, docs.example.com, et tous les autres sous-domaines.
Empaquetage : du dossier au fichier unique
Après clonage, vous obtenez un dossier contenant des milliers de petits fichiers. Copier tout ça est lent. kage permet de compresser le tout en un fichier unique.
Option 1 : Fichier ZIM
ZIM est un format ouvert de lecture hors ligne utilisé par le projet Kiwix, conçu pour l'archivage à long terme :
# Empaquetage
kage pack paulgraham.com # Génère paulgraham.com.zim
# Lecture
kage open paulgraham.com.zim # Prévisualisation locale
# Ou ouvrez avec Kiwix
kiwix-serve paulgraham.com.zim # Service HTTP
Pourquoi ZIM ? ZIM est un standard ouvert public. Un fichier
.zimcréé aujourd'hui avec kage pourra être lu dans dix ans par n'importe quel lecteur Kiwix. Il utilise la compression zstd pour le texte (hautement compressé) et stocke les images/médias tels quels.
Option 2 : Exécutable autonome
C'est sans doute la fonctionnalité la plus impressionnante de kage : un seul exécutable = un site web entier :
# Empaquetage en binaire autonome
kage pack paulgraham.com --format binary -o paulgraham
# Exécuter directement, zéro dépendance
./paulgraham
# Lance automatiquement un service HTTP, ouvrez dans le navigateur
Le destinataire de ce fichier n'a besoin de rien installer : ni kage, ni navigateur, ni lecteur ZIM. Un double-clic suffit pour obtenir la version hors ligne du site.
Le fichier pèse environ 13 Mio (kage lui-même) + la taille du contenu du site.
Empaquetage multi-plateforme
Vous pouvez créer un exécutable Windows depuis macOS :
# Générer un exécutable Windows depuis un Mac
kage pack paulgraham.com --format binary \
--base kage-windows-amd64.exe
# Résultat : paulgraham.exe
Il suffit de télécharger le binaire kage de la plateforme cible depuis la page des releases et de le passer comme --base.
Option 3 : Application de bureau (double-clic)
Avec le paramètre --app, kage génère une application de bureau avec icône :
# macOS → bundle .app
kage pack paulgraham.com --app
open paulgraham.app
# Linux → AppImage
kage pack paulgraham.com --app --base kage-linux-amd64
# Résultat : paulgraham.AppDir / paulgraham.AppImage
Double-cliquez pour l'ouvrir, aucune fenêtre de terminal, l'accès au site est direct.
Cas pratiques
Scénario 1 : Archiver des blogs techniques en base de connaissances hors ligne
# Cloner tous les articles de Paul Graham
kage clone paulgraham.com --scroll -o ~/docs/paulgraham
# Empaquetage en ZIM pour lecture sur Kindle/téléphone
kage pack paulgraham.com
# Ou empaquetage en fichier unique à partager
kage pack paulgraham.com --format binary -o ~/share/paulgraham-essays
Scénario 2 : Documentation technique hors ligne
# Cloner la documentation officielle Go
kage clone go.dev --scope-prefix /doc --max-depth 3
# En voyage, sans réseau ? Servez en local
kage serve ~/data/kage/go.dev
Scénario 3 : Archivage à long terme
Certains sites peuvent fermer ou migrer. kage permet des archivages périodiques :
# Ajouter au cron, mise à jour automatique mensuelle
# 0 2 1 * * kage clone example.com --refresh
Points d'attention
- robots.txt : kage respecte par défaut le fichier
robots.txt. Ajoutez--no-robotssi vous devez l'ignorer (environnement de dev/test). - Dépendance Chrome : Sauf via Docker, Chrome/Chromium doit être installé sur la machine hôte.
- Espace disque : Un gros site cloné peut occuper plusieurs Go.
- Légalité : Respectez les droits d'auteur des sites et le fichier robots.txt. N'utilisez pas ces contenus à des fins commerciales ou pour violer des droits d'auteur.
Conclusion
kage est actuellement l'outil le plus élégant pour le clonage hors ligne de sites web. Grâce à Chrome headless, il rend les pages de manière authentique, supprime tout JavaScript et transforme des pages web dynamiques en fichiers statiques qui vous appartiennent vraiment. Le format ZIM et l'exécutable autonome en font une solution idéale pour l'archivage à long terme et la distribution.
- GitHub : tamnd/kage
- Site officiel : kage.tamnd.com
- Licence : MIT
- Installation :
go install github.com/tamnd/kage/cmd/kage@latest
Si vous devez souvent lire de la documentation hors connexion ou si vous voulez préserver définitivement le contenu de certains sites, kage mérite amplement une place dans votre boîte à outils.