Kage: Biến bất kỳ website nào thành file binary duy nhất để xem offline mãi mãi

Công nghệ14 tháng 6, 2026·4 phút đọc

Kage là công cụ dòng lệnh mạnh mẽ giúp sao chép website vào thư mục cục bộ hoặc đóng gói thành một file binary duy nhất để xem offline. Bằng cách sử dụng headless Chrome để render và loại bỏ toàn bộ JavaScript, Kage đảm bảo nội dung lưu trữ luôn nguyên vẹn, an toàn và không phụ thuộc vào kết nối mạng.

Kage: Biến bất kỳ website nào thành file binary duy nhất để xem offline mãi mãi

Kage: Biến bất kỳ website nào thành file binary duy nhất để xem offline mãi mãi

Kage (影, có nghĩa là "bóng tối" hay "cái bóng") là một công cụ dòng lệnh mới nổi cho phép người dùng sao chép (clone) toàn bộ một website vào một thư mục trên máy tính để duyệt offline. Điểm đặc biệt nhất của Kage là khả năng loại bỏ hoàn toàn các đoạn mã script, biến trang web động thành các tệp tĩnh (.html) sạch sẽ, an toàn và có thể chạy mãi mãi mà không cần internet.

CI StatusCI Status GitHub ReleaseGitHub Release Go Report CardGo Report Card

Vấn đề của việc lưu trang web truyền thống

Bất kỳ ai từng cố gắng lưu một trang web ưa thích bằng chức năng "Save As" của trình duyệt đều từng gặp tình huống xấu xí: sáu tháng sau khi mở lại, bạn chỉ thấy một màn hình trắng, vòng xoay loading vô tận, hoặc trang web vẫn cố gắng kết nối đến một máy chủ phân tích dữ liệu (analytics) không còn tồn tại. Trang web đó thực ra chưa bao giờ thuộc về bạn; nó chỉ là một ứng dụng khách mỏng (thin client) phụ thuộc vào JavaScript của người khác.

Kage đi theo một hướng tiếp cận hoàn toàn khác. Nó điều khiển một trình duyệt thực sự (headless Chrome), để trang web thực hiện mọi thao tác cần thiết, sau đó nắm lấy kết quả cuối cùng và "xé" bỏ mọi đoạn mã script ra khỏi nó. Không theo dõi (tracking), không gọi mạng, không bất ngờ. Chỉ còn lại những tệp .html mà bạn có thể mở trực tiếp từ đĩa cứng, gửi cho bạn bè hoặc đóng gói vào một file duy nhất và quên đi trong cả thập kỷ.

Cơ chế hoạt động: Từ DOM động đến tĩnh

Quy trình làm việc của Kage có thể tóm tắt như sau: Seed URL -> Headless Chrome -> Final DOM -> Strip JS -> Localise Assets -> Disk.

Một nhóm các tab Chrome sẽ hiển thị các trang, trong khi một nhóm riêng biệt sẽ tìm nạp các tài nguyên (ảnh, CSS, font) qua HTTP. Mọi URL được ánh xạ một cách xác định đến một đường dẫn cục bộ, giúp các liên kết được viết lại ngay cả trước khi tài nguyên đích được tải xong. Kết quả là một thư mục chứa cấu trúc giống hệt trang web gốc nhưng chạy hoàn toàn offline.

Các tính năng chính

Clone và Serve

Để sao chép một trang web, ví dụ như các bài viết của Paul Graham, để đọc trên máy bay hay vào năm 2050, bạn chỉ cần chạy:

kage clone paulgraham.com

Sau đó, bạn có thể đọc lại nội dung này offline bằng máy chủ HTTP cục bộ:

kage serve $HOME/data/kage/paulgraham.com
# Mở http://127.0.0.1:8800

Kage hỗ trợ các tùy chọn nâng cao như giới hạn số trang (--max-pages), độ sâu của liên kết (--max-depth), hoặc cuộn trang tự động để tải các ảnh lazy-load.

Đóng gói thành một file duy nhất (Pack)

Thay vì quản lý hàng nghìn tệp nhỏ lẻ, Kage có thể nén toàn bộ bản sao (mirror) vào một artifact duy nhất với hai định dạng:

1. Định dạng ZIM:

kage pack paulgraham.com # -> paulgraham.com.zim

ZIM là định dạng tệp mở được thiết kế để nén toàn bộ một website (hoặc cả Wikipedia) vào một tệp nén, có chỉ mục và chỉ đọc. Tệp này tương thích với hệ sinh thái Kiwix, cho phép bạn đọc trên điện thoại hoặc máy tính bằng các trình đọc ZIM phổ biến.

2. File Binary tự chứa (Self-contained binary):

kage pack paulgraham.com --format binary -o paulgraham
./paulgraham # Chạy file này để xem website

Đây là tính năng ấn tượng nhất. Kage gắn bản sao website vào một bản sao của chính nó, tạo ra một tệp thực thi duy nhất. Khi bạn chạy tệp này, nó tự phục vụ nội dung website. Người nhận file này không cần cài đặt Kage hay bất kỳ phần mềm đọc ZIM nào; họ chỉ cần chạy file.

Cửa sổ Native thay vì tab trình duyệt

Theo mặc định, file binary sẽ mở trang web trong trình duyệt hệ thống. Tuy nhiên, nếu bạn build Kage với thẻ webview, nó sẽ mở trang web trong một cửa sổ riêng biệt, sử dụng WebView của hệ điều hành (WKWebView trên macOS, WebView2 trên Windows). Điều này tạo cảm giác như một ứng dụng thật sự chứ không phải một trang web.

make build-webview
kage pack paulgraham.com --format binary --base bin/kage -o paulgraham
./paulgraham # Mở một cửa sổ độc lập

Cài đặt

Kage được viết bằng ngôn ngữ Go (Golang) và yêu cầu Chrome hoặc Chromium được cài đặt trên máy chủ để hoạt động. Bạn có thể cài đặt nhanh qua go install:

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

Hoặc sử dụng Docker image đã tích hợp sẵn Chromium để tiết kiệm công sức cài đặt:

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

Với Kage, việc lưu trữ kiến thức từ internet trở nên đơn giản, bền vững và an toàn hơn bao giờ hết, giải phóng nội dung khỏi sự phụ thuộc vào các máy chủ hay dịch vụ bên ngoài.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗