Kage: Clone Website Lengkap untuk Offline Viewing Tanpa JavaScript
AW
Axel W

Dipublikasikan 15 Juni 2026

Kage: Clone Website Lengkap untuk Offline Viewing Tanpa JavaScript

Fitur Save As pada browser sering gagal menyimpan website secara utuh. Beberapa bulan kemudian, halaman yang tersimpan bisa jadi blank screen, spinner tak berhenti, atau masih mencoba menghubungi server analitik yang sudah tidak ada. Kage menawarkan solusi yang berbeda: meng-clone website menggunakan headless Chrome, menunggu DOM stabil, lalu menghapus semua JavaScript dan menyimpan hasilnya sebagai file HTML yang benar-benar offline.

Apa itu Kage dan Cara Kerjanya

Kage (u5f71, artinya bayangan) adalah tool CLI berbasis Go yang membuka setiap halaman website di browser headless, menunggu render selesai, mengambil snapshot DOM yang dilihat manusia, lalu menghapus seluruh script dan mengunduh CSS, gambar, serta font ke path lokal. Hasil akhirnya adalah file HTML yang bisa dibuka langsung dari disk, dibagikan ke teman, atau dipack menjadi satu file executable.

Perbedaan utama dengan wget atau curl: Kage tidak mengunduh source HTML mentah. Ia mengunduh DOM yang sudah dirender sepenuhnya, termasuk konten yang dihasilkan JavaScript. Perbedaan dengan browser Save As: Kage menghapus JavaScript sebelum menyimpan, sehingga tidak ada tracking, analytics, atau network call yang tersisa.

Instalasi Kage

Kage tersedia sebagai binary prebuilt, package Debian/RPM/APK, atau container Docker. Cara termudah untuk pengguna Go adalah install langsung dari source:

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

Untuk binary prebuilt, unduh dari halaman releases. Jika ingin menghindari instalasi Chrome manual, gunakan container image yang sudah bundling Chromium:

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

Kage mendeteksi instalasi Chrome secara otomatis. Jika Chrome berada di lokasi non-standar, arahkan dengan flag --chrome atau variabel lingkungan KAGE_CHROME. Shell completion juga tersedia: kage completion bash|zsh|fish|powershell.

Clone Website ke Folder Lokal

Command paling sederhana adalah clone domain ke direktori default $HOME/data/kage/<host>/:

kage clone paulgraham.com

Proses ini akan membuka setiap halaman yang ditemukan di domain, menunggu render selesai, lalu menyimpan DOM tanpa script ke folder lokal. Untuk membatasi scope, gunakan flag --max-pages dan --max-depth:

kage clone paulgraham.com --max-pages 50 --max-depth 2

Jika hanya ingin meng-clone bagian tertentu, gunakan --scope-prefix. Contoh berikut hanya mengambil dokumentasi Go:

kage clone go.dev --scope-prefix /doc

Untuk situs dengan subdomain dan lazy-loaded image, aktifkan opsi tambahan:

kage clone example.com --subdomains --scroll

Flag --scroll memicu lazy loading dengan menggulir halaman sebelum snapshot diambil.

Preview Offline dengan kage serve

Setelah clone selesai, preview hasilnya menggunakan server lokal:

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

Buka browser ke http://127.0.0.1:8800 untuk melihat mirror yang sudah sepenuhnya offline. Semua link internal berfungsi, gambar tampil, dan stylesheet diterapkan. Perbedaan dengan situs live hanya pada hilangnya fitur dinamis seperti komentar atau form.

Pack ke Satu File atau Binary

Salah satu fitur unggulan Kage adalah kemampuannya mengemas mirror menjadi satu file ZIM atau binary self-contained. File ZIM bisa dibuka dengan kage open, sedangkan binary bisa dieksekusi langsung tanpa dependensi apa pun:

kage pack paulgraham.com\nkage open paulgraham.com.zim

Untuk membuat executable yang menyatukan server dan konten:

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

Binary ini akan menjalankan server lokal yang menyajikan konten dari dalam dirinya sendiri. Ukuran binary sama dengan ukuran konten plus overhead server ringan. Ini sangat berguna untuk distribusi offline atau arsip jangka panjang.

Arsitektur Internal: Dari Chrome ke Disk

Kage menggunakan Chrome DevTools Protocol (CDP) untuk berkomunikasi dengan instance headless Chrome. Ia menavigasi ke URL, menunggu event load dan idle network, lalu mengambil snapshot DOM lengkap. Setiap elemen <script> dihapus dari tree, referensi eksternal dikonversi ke path relatif, dan resource yang direferensikan diunduh secara rekursif.

Proses ini memastikan konten yang tersimpan identik dengan apa yang dilihat user, tanpa kejutan di kemudian hari. Kage juga menangani edge case seperti font Google Fonts, CSS yang diimport, dan gambar responsive dengan atribut srcset.

Kesimpulan

Kage mengisi celah antara browser Save As yang tidak sempurna dan wget yang tidak mengerti JavaScript. Dengan mengandalkan headless Chrome untuk rendering dan menghapus script untuk keamanan, Kage menghasilkan arsip website yang benar-benar milik user. Tool ini cocok untuk researcher, arsiparis, atau siapa saja yang ingin membaca konten tanpa khawatir link rot atau tracking.

Sumber: github.com/tamnd/kage