Skip to content

Zimi v1.1.0 — Rate Limiting, Auto-Update, UI Polish

Choose a tag to compare

@epheterson epheterson released this 15 Feb 05:52
· 1026 commits to main since this release
95cd813

Production hardening release with safe downloads, rate limiting, deep linking, and UI polish.

Server

  • Safe downloads — .tmp + atomic rename with HTTP Range resume and size verification
  • Rate limiting — configurable per-IP rate limiting (ZIMI_RATE_LIMIT, default 60 req/min)
  • Auto-update — background ZIM update checking (ZIMI_AUTO_UPDATE=1, ZIMI_UPDATE_FREQ)
  • Search cache — 5-minute TTL, auto-invalidated on library changes
  • Version in /health — version number included in health check response
  • Password protection — optional password for library management (ZIMI_MANAGE_PASSWORD)

Web UI

  • Deep linking — article and search URLs survive page reload (bookmarkable)
  • Flavor picker — switch between ZIM variants (full/nopic/mini) from the installed list
  • Browse library shortcut — empty state links directly to the Kiwix catalog browser
  • Amber "Z" favicon — custom branded favicon
  • Version in footer — server version displayed in page footer

Security

  • Download URL validation (domain whitelist, path traversal prevention)
  • X-Forwarded-For only trusted from known proxy IPs
  • Search cache cleared on library changes (prevents stale results)
  • Auto-update thread race condition fixed

Bug Fixes

  • Search results could reference deleted ZIMs for up to 5 minutes
  • Rapid auto-update toggle could spawn duplicate download threads
  • Malformed percent-encoded URLs crashed SPA routing
  • title variable scoping issue in article reader

New Environment Variables

Variable Default Description
ZIMI_AUTO_UPDATE 0 Enable auto-update. Set to 1.
ZIMI_UPDATE_FREQ weekly Frequency: daily, weekly, monthly
ZIMI_RATE_LIMIT 60 Requests/min per IP. 0 to disable.
ZIMI_MANAGE_PASSWORD (none) Password for library management

Upgrade

# Docker
docker pull epheterson/zimi:latest

# Docker Compose
docker compose pull && docker compose up -d

Full Changelog: v1.0.0...v1.1.0