Skip to content

Zimi v1.6.5

Choose a tag to compare

@github-actions github-actions released this 29 Apr 06:37
c0c3ccc

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 by zimit ship 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=true trick + capture: true so we run before wombat. Right-click contextmenu got the same fix. Verified end-to-end on ersatztv_2026-04.zim.
  • Wikipedia maxi auto-updating to mini (#16) — _check_updates now 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 standard current-password autocomplete 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_url to recover Kiwix-truncated names (canadian_prep_* vs canadian_prepper_*).
  • Missing _updateDownloadsTabBadge function definition — internal call existed but body was missing on certain code paths.
  • READY <port> not emitted by zimi serve — the macOS / Linux desktop release smoke test grep'd stdout for READY <port> to capture the bound port (needed when --port 0 lets the OS choose). Server now emits READY <port> immediately after ThreadingHTTPServer binds, with flush=True so stdout buffers don't hide it.

Added

  • Search results carry a category field (#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/usage reports top_searches with a 5000-key bounded counter.

Changed

  • Auto-version rewriter now also processes inline /static/X?v=N refs inside app.js. Disk write is fail-soft — logs a warning on read-only filesystems and falls back to hardcoded tokens.
  • pyproject.toml excludes tests/test_article_languages.py from default pytest runs (data-dependent suite; run explicitly when investigating ZIM-data drift).

Tooling

  • tests/test_serve_smoke.py — five-test suite that subprocesses python -m zimi serve --port 0 and 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 -d

Or pip install --upgrade zimi for Python installs. macOS / Linux desktop binaries are below.

🤖 Generated with Claude Code