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é) :

BASH
go install github.com/tamnd/kage/cmd/kage@latest

Méthode 2 : via Homebrew (macOS)

BASH
brew install --cask tamnd/tap/kage

Méthode 3 : via Scoop (Windows)

BASH
scoop bucket add tamnd https://github.com/tamnd/scoop-bucket
scoop install kage

Méthode 4 : via apt (Ubuntu/Debian)

BASH
# 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)

BASH
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 :

BASH
docker run --rm -v "$PWD/out:/out" ghcr.io/tamnd/kage clone paulgraham.com

Vérifier l'installation

BASH
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 --chrome ou la variable d'environnement KAGE_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 :

BASH
# 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 :

BASH
# 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 :

BASH
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 :

BASH
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 :

BASH
# Interrompre avec Ctrl+C, la prochaine exécution reprendra automatiquement
kage clone paulgraham.com

4. Inclure les sous-domaines

BASH
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 :

BASH
# 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 .zim créé 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 :

BASH
# 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 :

BASH
# 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 :

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

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

BASH
# 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 :

BASH
# Ajouter au cron, mise à jour automatique mensuelle
# 0 2 1 * * kage clone example.com --refresh

Points d'attention

  1. robots.txt : kage respecte par défaut le fichier robots.txt. Ajoutez --no-robots si vous devez l'ignorer (environnement de dev/test).
  2. Dépendance Chrome : Sauf via Docker, Chrome/Chromium doit être installé sur la machine hôte.
  3. Espace disque : Un gros site cloné peut occuper plusieurs Go.
  4. 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.