Dipublikasikan 15 Juni 2026
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.
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.
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@latestUntuk 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.comKage 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.
Command paling sederhana adalah clone domain ke direktori default $HOME/data/kage/<host>/:
kage clone paulgraham.comProses 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 2Jika hanya ingin meng-clone bagian tertentu, gunakan --scope-prefix. Contoh berikut hanya mengambil dokumentasi Go:
kage clone go.dev --scope-prefix /docUntuk situs dengan subdomain dan lazy-loaded image, aktifkan opsi tambahan:
kage clone example.com --subdomains --scrollFlag --scroll memicu lazy loading dengan menggulir halaman sebelum snapshot diambil.
Setelah clone selesai, preview hasilnya menggunakan server lokal:
kage serve $HOME/data/kage/paulgraham.comBuka 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.
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.zimUntuk membuat executable yang menyatukan server dan konten:
kage pack paulgraham.com --format binary -o paulgraham\n./paulgrahamBinary 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.
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.
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
Dapatkan feedback, users, dan eksposur dari komunitas kreator, developer, dan entrepreneur digital Indonesia.
Submit Produk → Pelajari Dulu