
Kage:把任意网站「影」到本地,生成离线单二进制的神奇工具
Kage 是一个 Go 语言编写的开源工具,能将任意网站渲染、剥离 JavaScript 并通过 headless Chrome 快照后保存到本地。它支持导出为 ZIM 归档、自包含二进制乃至双击可执行的原生应用,甚至支持跨平台编译。634 个 HN 点赞证明了它的实。
2026 年 6 月中旬,一个名为 Kage 的开源工具登上了 Hacker News 首页,获得了 634 个点赞和热烈讨论。名字"Kage"是日语"影"的发音——寓意它像影子一样捕捉网站。它的功能听起来简单但执行极其精妙:把任意网站克隆到本地,剥离所有 JavaScript,生成一个可离线浏览的静态镜像,甚至可以打包成一个单文件的可执行程序。
不是简单的 wget
你可能觉得"下载网站"不是什么新鲜事,wget 的 --mirror 参数几十年前就能做这个。但 Kage 的核心差异在于它的工作方式:它不下载 HTML 源码,而是驱动一个真实的 headless Chrome 浏览器渲染页面。
这意味着什么?它捕获的是 JavaScript 执行之后的最终 DOM 状态——那些依赖 AJAX 动态加载的数据、懒加载的图片、CSS 生成的样式、Web 字体,所有东西都在页面渲染完成的那一刻被序列化保存。传统 wget 对现代 Web 应用几乎没有用处,因为大部分内容根本不在初始 HTML 中。
Kage 的工作流程:
种子 URL → headless Chrome 渲染 → DOM 快照 → 剥离 JS → 本地化资源 → 保存到磁盘
—— 广告 ——
安装与快速上手
Kage 用 Go 编写,安装非常简便:
# Go 安装
go install github.com/tamnd/kage/cmd/kage@latest
# 或者用 Docker(内置 Chromium)
docker run --rm -v "$PWD/out:/out" ghcr.io/tamnd/kage clone paulgraham.comDebian/RPM/APK 包也都提供在 releases 页面上,Linux 用户可以直接用包管理器安装。
核心命令只有四个:
# 1. 克隆网站(最简单的用法)
kage clone paulgraham.com
# 2. 在本地起一个 HTTP 服务器浏览克隆内容
kage serve ~/data/kage/paulgraham.com
# 3. 打包为单个 ZIM 文件
kage pack paulgraham.com
# 4. 或者打包为自包含的可执行文件
kage pack paulgraham.com --format binary -o paulgraham
./paulgraham # 直接运行就是一个离线网站服务器三种打包格式
Kage 最令人印象深刻的是它的打包能力——不只是保存文件,而是把整个网站做成便于分发和使用的格式。
1. ZIM 归档(默认格式)
ZIM 是一种开放的文件格式,被 Kiwix 等离线阅读器广泛使用。Kage 生成的 ZIM 文件是确定性的——对于相同的镜像内容,输出字节完全相同,UUID 由内容推导生成,适合用来做内容分发和长期存档。
2. 自包含二进制
这是最炫酷的模式:kage pack --format binary 将整个网站的 HTML、CSS、图片、字体全部嵌入一个 Go 可执行文件中。运行这个二进制文件,它就在 8800 端口上启动 HTTP 服务器提供服务。由于是 Go 编译的静态二进制,它没有任何运行时依赖。
更厉害的是,你可以在 Linux 上交叉编译出 Windows 版本的离线网站:
kage pack paulgraham.com --format binary --base kage-windows-amd64.exe -o paulgraham.exe生成的 .exe 文件在没有安装任何软件的 Windows 机器上也能直接运行。
3. 双击应用
# macOS
kage pack paulgraham.com --app # → paulgraham.app
# Linux (需要 appimagetool)
kage pack paulgraham.com --app --base kage-linux-amd64 # → .AppDir + .AppImage包装成原生的平台应用格式,图标自动从网站的 favicon 提取。
深度功能
除了基本的离线镜像,Kage 还有一些值得注意的细节:
- 礼貌爬取:读取
robots.txt,并从sitemap.xml获取种子 URL - 可恢复:Ctrl-C 保存状态,重新运行从断点继续,不必从头开始
- 幂等性:相同页面的不同 URL(http/https、有无尾部斜杠)只获取一次
- 精确路径映射:每个 URL 映射到唯一的本地文件路径,不会出现命名冲突
- 触发懒加载:
--scroll参数自动滚动页面,激活图片懒加载 - 排除路径:
--exclude跳过不希望下载的路径 - 并发控制:
--workers调节渲染并发度(默认 4 个)
它还支持 --scope-prefix 只下载特定路径下的内容,--subdomains 包含子域名。
什么场景适合用 Kage?
Kage 最突出的价值场景包括:
- 知识存档:将优秀的个人博客、技术文档在本地存档,避免原站下线后无法访问
- 演示与培训:用自包含二进制包将完整网站演示环境分发到没有网络的机器上
- 隐私浏览:剥离所有 JS 的版本让你可以安心阅读内容,无需担心跟踪脚本
- 内容审核与对比:离线版本可以作为网站某个时间点的"快照"供后续对比
- 旅行/飞机上阅读:打包成手机可读的 ZIM,在 Kiwix 中离线阅读
局限与注意事项
Kage 不是一个"网站全部功能"的副本——它刻意移除了所有 JavaScript,所以任何 JS 驱动的交互功能(评论区、搜索、登录表单、动态数据加载)都不会工作。它的定位是静态内容阅读工具,而不是完整站点备份方案。
另外,大规模爬取时需要注意 robots.txt 限制和服务器负载,最好先设定 --max-pages 限制数量,避免对目标站点造成压力。
总评
Kage 在"下载网站"这个已经有无数解决方案的领域里,找到了一个精巧且实用的切入点。headless Chrome 渲染后剥离 JS 的方式让它能够处理现代 Web 应用中的动态内容;而打包成自包含二进制文件的能力则是锦上添花——一个 15MB 左右的可执行文件就能完整提供一个网站的阅读体验,这在访谈、教育、存档等场景中有着极高的实用价值。
对于经常需要保存网页内容做离线研究或知识管理的开发者,Kage 值得放入工具箱。
原文来源:GitHub - tamnd/kage — Kage 是一个 Go 编写的开源工具,能通过 headless Chrome 渲染任意网站、剥离 JavaScript 并打包为离线可浏览的静态镜像或单文件二进制。
© 2026 四月 · CC BY-NC-SA 4.0
原文链接:https://aprilzz.com/tools/kage-offline-browser
相关文章
Open Design:开源 Claude Design 替代品,GitHub 60K+ Stars 的 Agent 原生设计工具
一个本地优先、开源、Agent 原生的设计工具。支持 150+ 设计系统、261+ 插件、21 种 Agent CLI,从原型到视频全覆盖。
Lathe:让 AI 教你写代码,而不是替你写代码
Lathe 是一个开源 CLI 工具,它能根据你的需求即时生成多章节动手教程,让你在浏览器中一步步跟着实操,真正学会一个新领域
shadcn/improve — 让最强的 AI 模型规划,让便宜的模型执行
shadcn 的新开源项目 improve 定义了一种全新的 AI 编码工作流:用你最强的模型(如 Claude Opus 4.6)审计代码库并制定详细执行计划,然后交给便宜的模型去执行。一个优雅的成本优化策略。