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):
go install github.com/tamnd/kage/cmd/kage@latest
Methode 2: Über Homebrew (macOS)
brew install --cask tamnd/tap/kage
Methode 3: Über Scoop (Windows)
scoop bucket add tamnd https://github.com/tamnd/scoop-bucket
scoop install kage
Methode 4: Über apt (Ubuntu/Debian)
# 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)
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:
docker run --rm -v "$PWD/out:/out" ghcr.io/tamnd/kage clone paulgraham.com
Nach der Installation prüfen
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
--chromebzw. die UmgebungsvariableKAGE_CHROMEan.
Schnellstart: In 3 Minuten ein Website klonen
Nehmen wir Paul Grahams Blog als Beispiel und klonen ihn komplett lokal:
# 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:
# 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:
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:
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:
# Mit Strg+C unterbrechen, beim nächsten Mal wird automatisch fortgesetzt
kage clone paulgraham.com
4. Subdomains einbeziehen
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:
# 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:
# 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:
# 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:
# 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
# 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
# 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:
# Als Cron-Job, monatliche automatische Aktualisierung
# 0 2 1 * * kage clone example.com --refresh
Wichtige Hinweise
- robots.txt: kage beachtet standardmäßig
robots.txt. Für Tests in einer Entwicklungsumgebung kannst du--no-robotsverwenden. - Chrome-Abhängigkeit: Außer bei Docker muss Chrome/Chromium auf dem Host-System installiert sein.
- Festplattenspeicher: Große Websites können nach dem Klonen mehrere GB belegen.
- 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.
- GitHub: tamnd/kage
- Website: kage.tamnd.com
- Lizenz: MIT
- Installation:
go install github.com/tamnd/kage/cmd/kage@latest
Wenn du regelmäßig Dokumente ohne Netzwerkverbindung lesen musst oder bestimmte Websites für immer sichern willst, gehört kage definitiv in deinen Werkzeugkasten.