f3704021cd
* Add mandatory ZIM metadata for zimcheck ZIM archives were missing two pieces of metadata that the spec and zimcheck treat as mandatory: a Description and the Illustrator_48x48@1 favicon Kiwix shows as the book icon. A Name was missing too. Every archive now writes a Name and a Description, defaulting the description to a host-derived line when --description is not given. When the mirror has a usable icon, the favicon is rescaled to a 48x48 PNG and stored as Illustrator_48x48@1 with an image/png MIME, reusing the icon discovery and square-fit scaling the app packer already uses. AddMetadataBytes is added to the zim writer so a binary metadata value can carry its own MIME instead of being forced to text/plain. Verified by reading the output back through the libzim engine: all mandatory keys are present and the illustrator decodes as a 48x48 PNG. * Update docs for ZIM metadata and current flags Document the new mandatory metadata in the packing guide and the Kiwix compatibility note, and default --description in the CLI reference. While in the reference, bring it back in line with the code: add the --app and --icon pack flags (shipped in v0.2.0 but never documented), drop the --max-asset-mb clone flag that does not exist, and fix a stale --resume mention in the configuration layout. Add the v0.2.1 release notes and cut the changelog entry.
5.5 KiB
5.5 KiB
title, description, weight
| title | description | weight |
|---|---|---|
| Release notes | What changed in each kage release. | 40 |
The authoritative, commit-level history lives in CHANGELOG.md and on the releases page. This page summarises each version.
v0.2.1
Packed ZIM archives now carry the metadata Kiwix expects, so a mirror shows up in a ZIM reader's library with a title, a description, and an icon instead of as a blank entry.
- Mandatory metadata is always written. Every archive now gets a
Nameand aDescription(a line derived from the host when--descriptionis not given), the two fieldszimcheckflags as missing otherwise. - The favicon becomes the book icon. When the mirror has a usable icon (an
apple-touch-icon.png,favicon.png, or a PNG-basedfavicon.ico), kage rescales it to a 48x48 PNG and stores it asIllustrator_48x48@1, which is the icon Kiwix shows for the archive in its library. A site with no usable icon is packed without one rather than with a broken image.
v0.2.0
Double-click apps, so a packed mirror opens like a real desktop app instead of a terminal program.
kage pack --appwraps the viewer in a double-click app with the site's favicon as its icon. The flag builds on the binary format, so it composes with--base(including awebviewbase) and--icon. On macOS that is a.appbundle; on Linux, with a Linux--base, an AppImage-style.AppDirthat becomes a single.AppImagewhenappimagetoolis installed. The icon is pulled from the mirror automatically, or set with--icon.- A GUI-subsystem Windows base ships in the release as
kage_<version>_windows-gui_<arch>.zip. Pack a viewer onto it with--format binary --baseand the resulting.exeopens with no console window behind it. - Smarter cross-platform packing. kage reads the base binary's executable header to detect its target OS, so a Windows viewer always gets a
.exename and the right run hint, regardless of how the base file is named.
v0.1.2
A security fix for how kage launches Chrome, clearer crawl errors, and a container image that actually runs.
- Chrome keeps its sandbox on by default. Earlier versions launched Chrome with
--no-sandboxon every run, which switched off the browser's main security boundary even on an ordinary desktop where the sandbox works fine (#10). The sandbox now stays on, and is dropped only where it genuinely cannot start: inside a container (detected fromIN_DOCKERor/.dockerenv) or when running as root. Whenever it is dropped, kage says so on stderr, so the choice is never silent. - Transient asset failures retry. A download that hits a 403/429, a 5xx, or a network blip is retried with a short backoff, which recovers files that bot-protection rejects on the first request of a burst. Permanent failures like a 404 are not retried.
- Clearer crawl errors. Each failure now logs a classified reason (
HTTP 403 Forbidden,timed out, ...), the URL, and the page that referenced it, and the end-of-run summary lists what went wrong instead of printing only a count. - The container image runs. Chrome aborted in the image with
chrome_crashpad_handler: --database is required, so the crash reporter is now disabled inside a container, and thekageuser has a writable home (the mounted/outvolume) so output, resume state, and Chrome's profile no longer fail with a permission error (#7).
v0.1.1
Packing, so a clone can travel as one file instead of a folder.
kage pack <mirror-dir>collapses a mirror into a single distributable file.--format zim(the default) writes an open ZIM archive, the same format Kiwix uses, so the file opens in any ZIM reader and not just kage.--format binaryappends that archive to a copy of kage to make a self-contained executable that serves the site offline when run. Packing is deterministic, so the same mirror produces a byte-identical file.kage open <file.zim>serves a packed ZIM back over a local HTTP server, the read side ofkage pack --format zim.- An optional native-window viewer. Built with
-tags webview,kage openand a packed binary show the site in a real window backed by the operating system's WebView instead of a browser tab. The default build stays pure Go and opens the browser, so the release pipeline is unchanged. - A pure-Go
zimpackage that reads and writes the ZIM format: a fixed header, MIME and pointer lists, zstd or stored clusters, redirects, and a trailing MD5.
v0.1.0
The first release. kage clones a live website into a self-contained folder you can browse offline, with every script stripped out.
kage clone <url>renders each page in headless Chrome, strips all JavaScript, and localises CSS, images, and fonts to relative paths.kage serve [dir]previews a cloned folder over a local file server.- Idempotent and resumable. Each page is keyed by the file it writes, so a page reached over http and https, or as
/index.htmlversus/, is fetched once. Re-running resumes;--refreshre-renders in place;--forcestarts clean. - Polite by default. Honours
robots.txt, seeds fromsitemap.xml, scopes to the seed host, and runs three parallel worker tiers. - Packaged everywhere. Archives,
.deb/.rpm/.apk, a multi-arch GHCR image with Chromium bundled, checksums, SBOMs, and a cosign signature.