Zimi v1.6.5
A "hold-you-over" patch release — most-impactful bug fixes pulled
out of the in-progress v1.7.0 Reach release so they reach users
sooner. v1.6.4 originally carried these fixes but its desktop
release pipeline failed (CI bug — also fixed below); v1.6.5
publishes the same content with proper macOS / Linux binaries.
Fixed
/docs/docs/doubling on zimit-scraped ZIMs (#17, thanks @ma-javaqueen) — ZIMs scraped byzimitship with wombat.js, which rewrites<a href>ATTRIBUTES to look like the original archived URL and installs its own click handler that re-resolves them — doubling the path on every nested navigation. Iframe click chaperon now uses Kiwix's_no_rewrite=truetrick +capture: trueso we run before wombat. Right-click contextmenu got the same fix. Verified end-to-end onersatztv_2026-04.zim.- Wikipedia maxi auto-updating to mini (#16) —
_check_updatesnow filters candidates to the same flavor as the installed file. New_detect_flavor()helper for maxi/nopic/mini. Six tests including the exact bug scenario. - Bitwarden / 1Password ignoring the manage password input (#15-1a) — removed
data-1p-ignore, restored standardcurrent-passwordautocomplete contract. - "Remember me" not persisting across tab close (#15-1b) — was using sessionStorage; now localStorage when checked, sessionStorage when unchecked.
- Catalog item-installed matching (#15-8a) — also tries the prefix derived from the OPDS
download_urlto recover Kiwix-truncated names (canadian_prep_*vscanadian_prepper_*). - Missing
_updateDownloadsTabBadgefunction definition — internal call existed but body was missing on certain code paths. READY <port>not emitted byzimi serve— the macOS / Linux desktop release smoke test grep'd stdout forREADY <port>to capture the bound port (needed when--port 0lets the OS choose). Server now emitsREADY <port>immediately afterThreadingHTTPServerbinds, withflush=Trueso stdout buffers don't hide it.
Added
- Search results carry a
categoryfield (#15-4) — each result is tagged general / images / video so SearXNG (and any future router) can route hits to the right tab. - Top-search analytics (#15-9) —
/manage/usagereportstop_searcheswith a 5000-key bounded counter.
Changed
- Auto-version rewriter now also processes inline
/static/X?v=Nrefs insideapp.js. Disk write is fail-soft — logs a warning on read-only filesystems and falls back to hardcoded tokens. pyproject.tomlexcludestests/test_article_languages.pyfrom defaultpytestruns (data-dependent suite; run explicitly when investigating ZIM-data drift).
Tooling
tests/test_serve_smoke.py— five-test suite that subprocessespython -m zimi serve --port 0and verifies the contract end-to-end (READY emit, /health, /list, /search, /). Catches the desktop-release CI bite at PR time instead of after merge.tests/test_iframe_link_chaperon.py— regression guard for the wombat fix invariants.- 11 new tests across the suite (288 total).
Upgrade
docker pull epheterson/zimi:1.6.5
docker compose down && docker compose up -dOr pip install --upgrade zimi for Python installs. macOS / Linux desktop binaries are below.
🤖 Generated with Claude Code