“"You hit 'Save As' on a page you want to keep, and six months later you open it to find a blank screen" — tamnd (kage README, https://github.com/tamnd/kage)”
You know that feeling when you save a documentation page before a long flight, open it at 30,000 feet, and get a blank white screen? Modern sites build their content with JavaScript at runtime — the server sends an empty HTML shell and the real content only appears after JavaScript executes and calls external APIs. wget downloads the empty shell. HTTrack downloads the empty shell. Browser 'Save As' downloads the empty shell plus a folder of files that still reference external servers you cannot reach. The page looks right on screen but is structurally broken the moment your internet connection drops.
kage runs Chrome in headless mode (no visible window) and opens the target page exactly as your browser would — JavaScript executes, content loads, images appear. Once the page finishes rendering, kage grabs the final HTML (the DOM after JavaScript finished building it), then removes every script tag and event handler from that HTML. It rewrites all links and asset references to point to local copies it downloads alongside the page, marks crawl state in _kage/state.json so interrupted jobs resume cleanly, then moves to the next page. The finished site tree packs into a .zim archive (readable on any platform via Kiwix) or a Go binary that includes its own web server.
If you regularly save documentation, wikis, or long-form technical articles for offline reading and keep hitting blank pages, kage solves your exact problem. It also fits developers building a pipeline to snapshot sites before they disappear — the resumable crawl and ZIM output make it scriptable. Not useful yet if your target sites require login cookies (cookie handling is open issue #9 as of 2026-06-17), if you need full-text search within the archive, or if the sites you want to archive depend on JavaScript for navigation.
Worth a 30-minute experiment if you have ever been burned by blank offline saves of JS-heavy documentation — the Docker one-liner works and gets you a browsable mirror quickly. Hold off on production pipelines: at v0.3.3, open issues include UTF-8/HTML5 failures (#16), Homebrew tap 404 (#21), and Downloads folder pollution (#32), and the project is 3 days old as of 2026-06-17. The 693-point HN response confirms the problem is real and the approach is architecturally sound; stability is not there yet.
Deep-dive insight, Easy and Pro modes, plus action playbooks — the full breakdown is one tap away.