Kage : l'outil open source qui transforme n'importe quel site web en un seul fichier exécutable, sans JavaScript ni traqueurs

Kage : l’outil open source qui transforme n’importe quel site web en un seul fichier exécutable, sans JavaScript ni traqueurs

Cette fois, votre « Enregistrer sous » ne mourra plus dans six mois

Vous connaissez sûrement cette frustration. Vous tombez sur un article de blog exceptionnel, un tutoriel de développement particulièrement bien fait, une documentation technique claire comme de l’eau de roche. Par réflexe, vous faites un « Enregistrer sous » dans votre navigateur, convaincu d’avoir sécurisé le contenu pour toujours.

Six mois plus tard, vous rouvrez ce fichier. Écran blanc. Une roue qui tourne indéfiniment sans jamais rien afficher. Ou pire : une copie qui tente encore silencieusement de contacter un serveur d’analytics qui, entretemps, a disparu de la surface du web. La page n’a jamais vraiment été à vous. C’était un client léger, entièrement dépendant du JavaScript de quelqu’un d’autre.

C’est précisément ce problème qu’un nouvel outil open source baptisé Kage, 影, qui signifie « ombre » en japonais, vient résoudre avec une élégance technique qui a rapidement conquis la communauté des développeurs. Son créateur, tamnd, a publié le projet sur GitHub, et il a déjà rassemblé son lot d’admirateurs séduits par une promesse simple : cloner n’importe quel site dans un dossier consultable hors-ligne, avec absolument tout le JavaScript retiré.

Le problème que Kage résout : le web moderne n’est pas fait pour durer

Avant de voir comment Kage fonctionne concrètement, il faut comprendre pourquoi les méthodes d’archivage classiques échouent aussi souvent.

Pourquoi votre « Enregistrer sous » ne fonctionne pas vraiment

Un site web moderne n’est presque jamais un simple document statique. C’est une application : une page qui charge un squelette HTML minimal, puis exécute du JavaScript pour aller chercher le vrai contenu, l’afficher progressivement, gérer les interactions, et souvent envoyer des données vers des serveurs distants (analytics, publicité, authentification).

Quand vous faites un « Enregistrer sous » classique dans votre navigateur, vous ne capturez que ce squelette initial. Le JavaScript, lui, reste actif dans le fichier sauvegardé et sans connexion Internet pour aller chercher ses dépendances, ce JavaScript échoue silencieusement, laissant souvent une page vide ou incomplète.

La philosophie de Kage : capturer le résultat, pas le processus

Kage prend le problème à l’envers. Plutôt que de sauvegarder le code source qui produit la page, il pilote un vrai navigateur (Chrome ou Chromium, en mode headless, c’est-à-dire sans interface graphique visible), laisse la page terminer intégralement son exécution JavaScript comme si un humain la visitait, capture le résultat final tel qu’il apparaît réellement à l’écran, puis arrache tout le code JavaScript de cette capture.

Le résultat : des fichiers .html que vous pouvez ouvrir directement depuis votre disque dur, transmettre à un ami, ou compresser dans un fichier unique et oublier pendant une décennie. Sans traqueur, sans appel réseau, sans surprise.

Comment fonctionne Kage sous le capot : les quatre étapes du processus

Pour bien comprendre la robustesse de cet outil, voici le déroulé technique exact, tel que documenté par son créateur.

Étape 1 : Le rendu dans un vrai navigateur

Kage pilote une instance de Chrome ou Chromium en mode headless. Chaque page ciblée est chargée normalement, avec l’exécution complète de son JavaScript, exactement comme si vous la visitiez avec votre navigateur habituel. L’outil attend patiemment que la page se stabilise avant de passer à l’étape suivante, un point crucial pour les sites qui chargent du contenu de façon différée.

Étape 2 : La capture du DOM final

Une fois la page stabilisée, Kage prend un instantané (snapshot) du DOM, le Document Object Model, c’est-à-dire la structure finale de la page telle qu’elle apparaîtrait réellement dans les yeux d’un visiteur humain, après que tout le JavaScript a fini son travail.

Étape 3 : L’assainissement (« sanitize »)

C’est ici que Kage retire tout le code JavaScript de cette capture, scripts, gestionnaires d’événements, liens en javascript: ne laissant que du HTML et CSS purs. C’est cette étape qui garantit qu’aucun code ne pourra s’exécuter une fois le site archivé, et donc qu’aucun traqueur ne pourra fonctionner.

Étape 4 : La localisation des ressources

Enfin, Kage télécharge et rapatrie localement toutes les ressources externes (feuilles de style CSS, images, polices de caractères) en réécrivant systématiquement tous les liens pour qu’ils pointent vers ces copies locales plutôt que vers les serveurs d’origine.

Le résultat de ce processus ressemble, sur votre disque, à ceci :

paulgraham.com/
├── index.html                  # la page d'accueil, scripts retirés
├── greatwork.html              # un article, par exemple
├── _kage/                      # dossier réservé aux ressources
│   ├── paulgraham.com/site.css  # feuille de style rapatriée localement
│   ├── paulgraham.com/pg.png
│   └── state.json              # état de la capture, pour pouvoir reprendre
└── ...

Installer Kage : plusieurs options selon votre profil

Pour les développeurs Go

Si vous avez déjà un environnement Go installé sur votre machine, l’installation se résume à une seule commande :

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

Pour ceux qui préfèrent un binaire prêt à l’emploi

Kage propose également des archives précompilées, des paquets .deb, .rpm ou .apk selon votre distribution Linux, ainsi que des sommes de contrôle (checksums) pour vérifier l’intégrité du téléchargement, le tout disponible directement sur la page des releases du projet GitHub.

Pour éviter d’installer Chrome vous-même : l’image Docker

Kage a besoin d’un vrai navigateur Chrome ou Chromium installé sur la machine hôte pour fonctionner, c’est le prix de son approche fidèle au rendu réel des pages. Si vous préférez éviter cette installation, une image Docker toute prête embarque directement Chromium :

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

Le tutoriel pratique : archiver votre premier site en quelques commandes

Prenons l’exemple concret proposé par la documentation officielle : archiver les essais du célèbre entrepreneur et essayiste Paul Graham, disponibles sur paulgraham.com, pour pouvoir les lire dans un avion, sur un ordinateur sans wifi, ou même dans plusieurs décennies après que le site aura changé de design.

Étape 1 : Cloner le site

kage clone paulgraham.com

Cette commande déclenche un parcours méthodique (crawl) du site, en respectant le fichier robots.txt, en s’appuyant sur le sitemap.xml du site pour identifier les pages à visiter, et en restant, par défaut, cantonné au domaine d’origine. Le résultat atterrit dans un dossier par défaut, généralement $HOME/data/kage/paulgraham.com/.

Étape 2 : Prévisualiser votre archive hors-ligne

kage serve $HOME/data/kage/paulgraham.com

Cette commande démarre un petit serveur web local, accessible à l’adresse http://127.0.0.1:8800, qui vous permet de naviguer dans votre copie exactement comme si vous étiez sur le vrai site avec des liens qui fonctionnent normalement entre les pages.

Étape 3 : Compresser le tout en un seul fichier

C’est ici que la magie opère vraiment. Une fois votre site cloné, Kage propose de le compresser dans un fichier unique, bien plus pratique à archiver ou à transmettre qu’un dossier contenant potentiellement des milliers de petits fichiers :

kage pack paulgraham.com

Cette commande produit un fichier paulgraham.com.zim.

Étape 4 : Et pour un fichier exécutable autonome

Voilà la fonctionnalité la plus spectaculaire, celle qui donne tout son sens au titre de cet article :

kage pack paulgraham.com --format binary -o paulgraham
./paulgraham

Cette commande produit un fichier exécutable unique qui, littéralement, est le site. Vous le lancez, il se lance lui-même comme un mini-serveur, et sert le contenu archivé sans que quiconque n’ait besoin d’installer quoi que ce soit au préalable, ni Kage, ni un lecteur spécifique.

Le format ZIM : pourquoi Kage ne réinvente pas la roue

Un choix technique de Kage mérite une attention particulière : plutôt que d’inventer son propre format d’archive propriétaire, l’outil s’appuie sur le format ouvert ZIM.

Un format déjà éprouvé par des millions d’utilisateurs

Le ZIM est un format de fichier ouvert et documenté, conçu précisément pour cet usage : compresser un site web entier, voire l’intégralité de Wikipedia, dans un seul fichier indexé, en lecture seule. C’est le format qui alimente Kiwix, le projet de contenu hors-ligne que des utilisateurs à travers le monde utilisent pour emporter Wikipédia, Stack Overflow ou le Projet Gutenberg sur des bateaux, dans des salles de classe sans connexion Internet, ou sur un téléphone lors d’un long vol.

L’avantage de ne pas être enfermé dans l’écosystème Kage

Parce que le format ZIM est un standard documenté, et non une invention propre à Kage, un fichier paulgraham.com.zim que vous créez aujourd’hui s’ouvrira toujours dans n’importe quel lecteur ZIM dans plusieurs années, que ce soit avec Kage lui-même, avec Kiwix Serve, avec l’application Kiwix Desktop, ou même avec les applications Kiwix pour Android et iOS.

kage open paulgraham.com.zim            # relire avec kage
kiwix-serve paulgraham.com.zim          # ou servir avec Kiwix

Petite précision technique honnête : Kage écrit une archive structurellement valide avec les métadonnées standards, mais elle ne construit pas l’index de recherche plein texte que les archives Kiwix officielles embarquent habituellement. La navigation et les clics fonctionnent partout, mais la recherche interne au lecteur reste limitée sur les archives produites par Kage.

Le déterminisme, un détail technique qui compte

La mise en paquet (packing) réalisée par Kage est déterministe : la même archive source produira toujours un fichier byte-identique, avec un identifiant unique dérivé du contenu lui-même plutôt qu’aléatoire, ce qui rend chaque fichier ZIM produit fiable à vérifier par somme de contrôle et sûr à mettre en cache.

Le fichier exécutable autonome : comment ça marche vraiment

Revenons plus en détail sur cette fonctionnalité qui distingue vraiment Kage de la plupart de ses concurrents.

Un exécutable universel, indépendant de la plateforme

L’option --format binary agglomère l’archive à une copie de Kage lui-même, produisant un exécutable unique qui sert le site hors-ligne dès qu’on le lance. La personne à qui vous envoyez ce fichier n’a besoin d’installer strictement rien : ni Kage, ni un lecteur ZIM, ni quoi que ce soit d’autre.

Un détail technique intéressant : l’archive ajoutée à l’exécutable est indépendante de la plateforme, seul l’exécutable de base porte la spécificité de l’architecture (Windows, macOS, Linux). Cela signifie que vous pouvez, depuis un Mac, générer un exécutable Windows en pointant simplement l’option --base vers une version de Kage compilée pour Windows :

# Depuis un Mac, produire un lecteur pour Windows
kage pack paulgraham.com --format binary --base kage-windows-amd64.exe
# -> paulgraham.exe

Le compromis à connaître : la taille du fichier

Cette flexibilité a un prix : l’exécutable embarque une copie complète de Kage, ce qui lui fait peser environ 13 Mo au minimum, quelle que soit la taille réelle du contenu archivé. Si vous n’avez besoin que du contenu pur, sans le confort de l’auto-exécution, le format ZIM classique reste largement plus léger.

Une vraie fenêtre plutôt qu’un onglet de navigateur

Par défaut, un exécutable Kage ouvre votre navigateur système habituel pour afficher le contenu, ce qui signifie que le site apparaît comme un onglet de plus, à côté des quarante-sept que vous avez probablement déjà ouverts. Mais Kage propose une option de compilation avec le tag webview, qui ouvre le contenu dans sa propre fenêtre dédiée, s’appuyant sur le composant WebView natif du système d’exploitation (WKWebView sur macOS, WebView2 sur Windows, WebKitGTK sur Linux). Le résultat ressemble et se comporte comme une vraie application autonome.

make build-webview
kage pack paulgraham.com --format binary --base bin/kage -o paulgraham
./paulgraham   # ouvre une fenêtre, sans navigateur en vue

Les options avancées pour affiner votre archivage

Kage propose une série d’options en ligne de commande particulièrement utiles pour des cas d’usage plus précis :

OptionCe qu’elle fait
-o, --outChoisir le dossier de destination de l’archive
-p, --max-pagesLimiter le nombre de pages archivées (utile pour tester rapidement sur un grand site)
-d, --max-depthLimiter la profondeur de liens à suivre
--scope-prefixNe cloner qu’une section précise d’un site (par exemple, uniquement /doc)
--subdomainsInclure également les sous-domaines du site cible
--scrollFaire défiler automatiquement chaque page pour déclencher le chargement des images en lazy loading
--workersNombre de pages rendues simultanément (4 par défaut)
--no-robotsIgnorer le fichier robots.txt (à utiliser avec discernement et courtoisie)
-f, --forceSupprimer une archive existante avant de recommencer entièrement
--refreshRe-parcourir un site déjà archivé pour capturer le contenu ajouté depuis

Un crawl intelligent et reprenable

Un détail d’ingénierie particulièrement soigné : le processus de clonage de Kage est idempotent. Chaque page est identifiée de façon unique par le fichier qu’elle produit, ce qui signifie qu’un même article accessible via http ou https, avec ou sans slash final, ne sera récupéré qu’une seule fois. Si vous interrompez le processus avec Ctrl-C, Kage sauvegarde sa progression et reprend exactement où il s’était arrêté lors du prochain lancement, un vrai confort pour l’archivage de très grands sites qui peut prendre du temps.

Pour qui cet outil est-il vraiment pertinent ?

Les développeurs et documentalistes techniques

Kage est particulièrement précieux pour conserver des documentations techniques de bibliothèques ou de frameworks, des ressources dont on sait, par expérience, qu’elles peuvent disparaître, changer radicalement de structure, ou passer derrière un mur payant du jour au lendemain.

Les voyageurs et les zones à connectivité limitée

Pour quiconque doit travailler dans des environnements sans connexion fiable (avion, train, zones rurales, déplacements internationaux) pouvoir emporter une documentation complète, un blog technique favori, ou une base de connaissances entière dans un unique fichier exécutable représente un gain de productivité concret.

Les bibliothécaires numériques et archivistes

Le choix du format ZIM ancre naturellement Kage dans l’écosystème plus large de la préservation numérique, aux côtés de projets comme Kiwix, dont la mission est précisément de rendre la connaissance accessible sans dépendre d’une connexion Internet permanente, un enjeu qui dépasse largement le confort individuel pour toucher à des questions d’accès équitable à l’information.

Les créateurs de contenu qui veulent partager sans dépendance

Envoyer un dossier de mille petits fichiers à un collègue ou un client est peu pratique. Envoyer un unique fichier exécutable, qui « est » littéralement le site archivé, simplifie radicalement le partage de contenu web hors ligne.

Les limites à connaître avant de vous lancer

Voici ses limites actuelles, honnêtement documentées par son propre créateur.

  • Kage nécessite un vrai navigateur Chrome ou Chromium installé sur la machine qui effectue le clonage (sauf si vous utilisez l’image Docker qui l’embarque).
  • La recherche plein texte n’est pas incluse dans les archives ZIM produites par Kage, contrairement aux archives officielles distribuées par le projet Kiwix.
  • Les exécutables autonomes pèsent un minimum de 13 Mo, même pour archiver une seule petite page, un coût fixe qui peut sembler disproportionné pour de très petits contenus.
  • Kage retire systématiquement tout le JavaScript, ce qui signifie que les sites reposant fondamentalement sur des interactions dynamiques complexes (formulaires interactifs avancés, applications web à page unique très riches) perdront ces fonctionnalités dans la version archivée, puisque seul le résultat visuel final est conservé, pas la logique interactive.

À propos Kamleu Noumi Emeric

Je suis un ingénieur en télécommunications et je suis le créateur du site tech-connect.info. J'ai une grande passion pour l'art, les hautes technologies, les jeux, les vidéos et le design. Aimant partager mes connaissances, Je suis également blogueur pendant mon temps libre. Vous pouvez me suivre sur ma page sociale Facebook.

Consultez également

OpenLogi votre souris Logitech sans compte ni télémétrie

OpenLogi : votre souris Logitech sans compte ni télémétrie

Vous venez d’acheter une souris Logitech MX Master, et pour remapper trois malheureux boutons, voilà …

guest
0 Commentaires
Les plus récents
Les plus anciens Les plus votés
0
J'adorerais savoir ce que vous en pensez, S'il vous plaît laisser un commentaire.x