Hast du dich schon mal damit herumschlagen müssen?

Du hast einen großartigen Artikel gespeichert und öffnest ihn Monate später wieder – nur um eine leere Seite zu sehen, einen endlos drehenden Lade-Spinner oder eine Anfrage an einen längst abgeschalteten Analytics-Server, die die ganze Seite einfrieren lässt. Diese Seite hat dir niemals gehört. Sie war nur ein dünner Client für fremdes JavaScript.

Ein weiteres Szenario: Du brauchst Zugriff auf eine Dokumentationsseite ohne Internetverbindung (im Flugzeug, im Feld oder in einem Serverraum), oder du möchtest den Inhalt einer Website für immer sichern, bevor sie eines Tages verschwindet.

Das heute vorgestellte Tool kage (japanisch für „Schatten", ausgesprochen /ka-ge/) wurde genau für diese Probleme entwickelt.


Was ist kage?

kage ist ein quelloffenes Kommandozeilen-Tool in Go. Es nutzt headless Chrome, um Seiten tatsächlich zu rendern, wartet auf den vollständigen Seitenaufbau, erstellt einen Schnappschuss des DOM und entfernt danach sämtliches JavaScript automatisch. CSS, Bilder und Schriftarten werden lokal heruntergeladen. Das Ergebnis ist eine Sammlung von .html-Dateien, die direkt von der Festplatte geöffnet werden können – komplett ohne Netzwerk und ohne die Ausführung von Skripten.

  • ⭐ GitHub Stars: 2.600+ (im Juni 2026 gestartet, rasantes Wachstum)
  • 🏷️ Sprache: Go
  • 📜 Lizenz: MIT
  • 🧑💻 Autor: tamnd

kage vs. herkömmliches „Seite speichern unter"

Merkmal Browser „Seite speichern" wget / curl kage
JavaScript-Rendering ❌ ❌ ✅ headless Chrome mit vollständigem Rendering
Automatisches JS-Entfernen ❌ ❌ ✅ entfernt alle Skripte restlos
SPA/dynamische Inhalte ❌ ❌ ✅ unterstützt Vue/React/Angular
Komplettes Website-Klonen ❌ ⚠️ begrenzt ✅ folgt automatisch Links, Breadth-First-Crawling
Als einzelne Datei packen ❌ ❌ ✅ ZIM / eigenständige ausführbare Datei
Offline verfügbar ⚠️ oft fehlerhaft ⚠️ oft fehlerhaft ✅ perfekt offline

So funktioniert es unter der Haube

URL aufrufen → headless Chrome rendert → Seite stabilisieren lassen → finalen DOM aufnehmen → alle <script> löschen → CSS/Bilder/Schriftarten herunterladen → lokal speichern → nächste Links verfolgen

kage lädt nicht einfach den HTML-Quellcode herunter, sondern rendert die Seite wie ein echter Browser. Das Endergebnis ist genau das, was du auch im Browser siehst.


kage installieren

kage bietet verschiedene Installationsmethoden für Linux, macOS und Windows.

Methode 1: Über Go

Wenn du Go installiert hast (Go 1.21+ empfohlen):

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

Methode 2: Über Homebrew (macOS)

BASH
brew install --cask tamnd/tap/kage

Methode 3: Über Scoop (Windows)

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

Methode 4: Über apt (Ubuntu/Debian)

BASH
# Repository-Schlüssel und -Quelle hinzufügen
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

Methode 5: Über dnf (Fedora/RHEL)

BASH
sudo dnf config-manager --add-repo https://tamnd.github.io/linux-repo/dnf/tamnd.repo
sudo dnf install kage

Methode 6: Über Docker (keine Chrome-Installation nötig)

Das Docker-Image enthält bereits Chromium und funktioniert sofort:

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

Nach der Installation prüfen

BASH
kage --version
kage completion bash  # oder zsh / fish, für Tab-Vervollständigung

Hinweis: kage benötigt Chrome oder Chromium – außer bei der Docker-Methode. Du musst Chrome/Chromium auf dem Host-System installieren. kage sucht automatisch nach der Installationspfad oder du gibst ihn über --chrome bzw. die Umgebungsvariable KAGE_CHROME an.


Schnellstart: In 3 Minuten ein Website klonen

Nehmen wir Paul Grahams Blog als Beispiel und klonen ihn komplett lokal:

BASH
# 1. Das gesamte Website nach $HOME/data/kage/paulgraham.com/ klonen
kage clone paulgraham.com

# 2. Lokal in der Vorschau anzeigen
kage serve $HOME/data/kage/paulgraham.com
# Im Browser öffnen: http://127.0.0.1:8800

Das war's! Alle Artikel, Bilder und Stylesheets sind jetzt auf deiner Festplatte gespeichert – null Netzwerkabhängigkeit erforderlich.

Den Klonbereich einschränken

Für einen schnellen Test kannst du den Umfang begrenzen:

BASH
# Nur die ersten 50 Seiten, maximal 2 Link-Ebenen
kage clone paulgraham.com --max-pages 50 --max-depth 2

# Nur ein bestimmtes Unterverzeichnis klonen
kage clone go.dev --scope-prefix /doc

# Bestimmte Pfade überspringen (z. B. Werbung oder irrelevante Seiten)
kage clone example.com --exclude /ads --exclude /track

Wichtige Parameter auf einen Blick

Parameter Standardwert Beschreibung
-o, --out $HOME/data/kage Ausgabeverzeichnis
-p, --max-pages 0 (unbegrenzt) Maximal N Seiten klonen
-d, --max-depth 0 (unbegrenzt) Link-Verfolgungstiefe
--scope-prefix keiner Nur Pfade mit diesem Präfix klonen
--subdomains false Subdomains einbeziehen
--scroll false Seite automatisch scrollen (Lazy Loading auslösen)
--workers 4 Anzahl paralleler Rendering-Seiten
--no-robots false robots.txt ignorieren
--refresh false Inkrementelle Aktualisierung bestehender Klone

Erweiterte Funktionen

1. Automatisches Scrollen für Lazy Loading

Viele moderne Websites nutzen Lazy Loading – Bilder werden erst beim Scrollen geladen. kage kann automatisch scrollen:

BASH
kage clone example.com --scroll

Damit scrollt kage jede Seite automatisch bis zum Ende, sodass alle verzögert geladenen Bilder, iFrames und ähnlicher Inhalt vollständig gerendert und gespeichert werden.

2. Inkrementelle Aktualisierung (--refresh)

Hat der Blog vor einem Monat neue Artikel bekommen? Kein kompletter Neustart nötig:

BASH
kage clone paulgraham.com --refresh

--refresh rendert vorhandene Seiten neu und holt neue Inhalte ab. Das Klonen bei kage ist idempotent: Dieselbe Seite wird nur einmal gespeichert, egal ob sie über http oder https aufgerufen wird.

3. Unterbrechen und Fortsetzen

Du drückst Strg+C während des Klonens? Kein Problem – kage speichert automatisch den Fortschritt:

BASH
# Mit Strg+C unterbrechen, beim nächsten Mal wird automatisch fortgesetzt
kage clone paulgraham.com

4. Subdomains einbeziehen

BASH
kage clone example.com --subdomains

Das klont gleichzeitig blog.example.com, docs.example.com und andere Subdomains.


Packen: Vom Ordner zur einzelnen Datei

Nach dem Klonen hast du einen Ordner mit tausenden kleinen Dateien. Herumkopieren ist langsam. kage kann das komplette Archiv in eine einzige Datei packen.

Option 1: Als ZIM-Datei packen

ZIM ist ein offenes Offline-Format des Kiwix-Projekts, speziell für Langzeitarchivierung:

BASH
# Packen
kage pack paulgraham.com               # erzeugt paulgraham.com.zim

# Öffnen
kage open paulgraham.com.zim           # lokale Vorschau

# Oder mit Kiwix öffnen
kiwix-serve paulgraham.com.zim         # HTTP-Server

Warum ZIM? ZIM ist ein offener Standard. Eine heute mit kage erstellte .zim-Datei lässt sich auch in zehn Jahren noch mit jedem Kiwix-Leseprogramm öffnen. Sie unterstützt zstd-Komprimierung – Text wird stark komprimiert, Bilder und Medien unverändert gespeichert.

Option 2: Als eigenständige ausführbare Datei packen

Das ist die wohl coolste Funktion von kage – eine ausführbare Datei = ein ganzes Website:

BASH
# Als selbstständiges Binary packen
kage pack paulgraham.com --format binary -o paulgraham

# Direkt ausführen, null Abhängigkeiten
./paulgraham
# Startet automatisch einen HTTP-Server, einfach im Browser öffnen

Der Empfänger der Datei muss nichts installieren – kein kage, kein Browser, kein ZIM-Leseprogramm. Einfach starten und die Offline-Version des Websites ist da.

Die Binärdatei ist ca. 13 MiB (kage selbst) + der Website-Inhalt groß.

Plattformübergreifend packen

Du kannst unter macOS eine Windows-Datei erstellen:

BASH
# Auf dem Mac eine Windows-EXE erzeugen
kage pack paulgraham.com --format binary \
  --base kage-windows-amd64.exe
# Ausgabe: paulgraham.exe

Dafür brauchst du nur das Binary der Zielplattform von der Releases-Seite als --base anzugeben.

Option 3: Desktop-App mit Doppelklick-Start

Mit dem --app-Parameter erstellt kage eine Desktop-Anwendung mit Icon:

BASH
# macOS → .app-Paket
kage pack paulgraham.com --app
open paulgraham.app

# Linux → AppImage
kage pack paulgraham.com --app --base kage-linux-amd64
# Ausgabe: paulgraham.AppDir / paulgraham.AppImage

Doppelklick und kein Terminalfenster – direkt auf die Website.


Praktische Anwendungsfälle

Szenario 1: Technik-Blogs als Offline-Wissensdatenbank sichern

BASH
# Alle Artikel von Paul Graham klonen
kage clone paulgraham.com --scroll -o ~/docs/paulgraham

# Als ZIM packen, auf Kindle/Handy unterwegs lesen
kage pack paulgraham.com

# Oder als einzelne Datei packen und an Freunde schicken
kage pack paulgraham.com --format binary -o ~/share/paulgraham-essays

Szenario 2: Dokumentationsseite für unterwegs

BASH
# Go-Offizielldokumentation klonen
kage clone go.dev --scope-prefix /doc --max-depth 3

# Kein Netzwerk auf Geschäftsreise? Lokal serve starten
kage serve ~/data/kage/go.dev

Szenario 3: Langzeitarchivierung

Manche Websites werden irgendwann abgeschaltet oder migriert. Mit kage kannst du regelmäßig sichern:

BASH
# Als Cron-Job, monatliche automatische Aktualisierung
# 0 2 1 * * kage clone example.com --refresh

Wichtige Hinweise

  1. robots.txt: kage beachtet standardmäßig robots.txt. Für Tests in einer Entwicklungsumgebung kannst du --no-robots verwenden.
  2. Chrome-Abhängigkeit: Außer bei Docker muss Chrome/Chromium auf dem Host-System installiert sein.
  3. Festplattenspeicher: Große Websites können nach dem Klonen mehrere GB belegen.
  4. Legalität: Respektiere die Urheberrechte und robots.txt der Websites. Verwende kage nicht für kommerzielle Zwecke oder urheberrechtlich geschützte Inhalte.

Fazit

kage ist derzeit das eleganteste Tool für Website-Offline-Klonen. Es nutzt headless Chrome für echtes Rendering, entfernt sämtliches JavaScript und verwandelt dynamische Webseiten in statisches HTML, das wirklich dir gehört. Mit ZIM-Packen und eigenständigen Binärdateien ist es die perfekte Lösung für Langzeitarchivierung und Weitergabe.

Wenn du regelmäßig Dokumente ohne Netzwerkverbindung lesen musst oder bestimmte Websites für immer sichern willst, gehört kage definitiv in deinen Werkzeugkasten.