kage(影,“shadow”)是一个开源(MIT)、纯 Go 的命令行工具,可将整个网站克隆到纯 HTML 文件文件夹中,并移除所有脚本。它逐页驱动无头 Chrome,等待页面稳定,抓取渲染后的 DOM,删除所有 script 标签、事件处理程序和 javascript: URL,并下载 CSS、图片和字体,重写为相对本地路径。命令涵盖 clone、serve、pack 和 open;镜像可以打包为 ZIM 存档(Kiwix 背后的开放格式),或打包为约 13 MiB 加内容的独立二进制文件,无需安装任何东西即可离线提供站点,还可选 --app 桌面构建和 webview 构建以在原生窗口中打开。它作为 ghcr 容器随 Chromium 一起发布,并提供 Homebrew、Scoop、apt 和 dnf 包。

用户想要的是整个站点,而不只是单个页面:用无头 Chrome 渲染、抓取用户看到的 DOM 快照、去掉所有脚本,并让结果可以离线浏览。

Duc-Tam Nguyen(tamnd)因常见的“另存为”失败而构建 kage:几个月后,保存的页面打开为空白,显示无休止的加载指示器,或仍会向已失效的分析服务器回传数据。他将页面描述为从未真正属于你——只是别人 JavaScript 的一个瘦客户端——并于 2026-06-14 以标语“Shadow any website to a single binary for offline viewing”在 Show HN 上发布了该工具。

该讨论串火了,获得了 712 分和 141 条评论。评论者将 kage 与 SingleFile 比较,并询问它与“另存为”有何不同;Nguyen 澄清说 kage 镜像整个网站及其所有子页面——他的例子是 Paul Graham 的所有文章,供离线阅读——而 SingleFile 打包单个页面。他还提到了一个更大的伞形愿景:构建一个“从零开始的 Google”开源项目,包括爬虫、索引器、存储和服务层。Gigazine 于 2026-07-25 以英文报道了 kage,演示了在 Docker 中克隆 gigazine.biz、打包 ZIM,以及从 0.3.10 版本构建一个 24.4 MiB 的单二进制 Windows 查看器。

截至 2026-09-02,kage 仍是一个独立的、MIT 许可的开源项目,没有公司或资金支持;仓库记录了包管理器安装、含 Chrome 的容器以及包括 Chrome 驱动的端到端测试在内的完整测试套件,文档网站 kage.tamnd.com 持续更新。

“另存为”生成的副本仍会回传数据,或当标记由 JavaScript 在运行时构建时显示为空白。

SingleFile 解决了单个页面的问题,但留下了整个站点镜像——真正的存档用例——给那些保真度较低的工具。

无头 Chrome 使镜像能在移除任何 JavaScript 之前捕获人看到的内容。

像 ZIM 这样的开放格式使存档可由其他工具(如 Kiwix)读取,而不是将用户锁定在项目中。

一个独立的二进制文件意味着接收者无需安装任何东西即可阅读镜像。

先渲染,后剥离:先抓取人看到的内容,然后移除运行时,这样“另存为”副本就成了任何人都能离线打开的持久制品。

截至 2026-09-02,kage 仍是一个独立的 MIT 项目,没有公司或资金支持。开发活跃:爬虫读取 robots.txt,从 sitemap.xml 获取种子,恢复中断的运行,并且每个 URL 只获取一次;打包是确定性的,镜像相对路径映射到存档中。发布自动化构建多平台二进制文件、包、含 Chrome 的容器、SBOM 和签名。作者将 kage 与更大的开源搜索栈联系起来。已知权衡:爬取需要 Chrome/Chromium,ZIM 打包省略了 Kiwix 的全文索引,而二进制文件在内容之前增加约 13 MiB。

从这里,追溯依据

参考来源

  1. tamnd/kage: Shadow any website for offline viewing, with the JavaScript stripped out GitHub · github.com
  2. Show HN: Kage - Shadow any website to a single binary for offline viewing Hacker News · news.ycombinator.com ·
  3. 'kage' removes JavaScript from web pages, saves the entire site locally, and allows you to view it offline Gigazine · gigazine.net ·
  4. About - Duc-Tam Nguyen tamnd.github.io · tamnd.github.io