Skip to main content

Offline knowledge server for ZIM files

Project description

Zimi

CI Docker Pulls PyPI License: MIT

A modern experience for your ZIM files.

Kiwix packages the world's knowledge into ZIM files. Zimi makes them feel like the real internet with a rich web UI, fast JSON API, and an MCP server for AI agents. Everything works offline, in your language.

What's in the box

  • Cross-source search. Parallel full-text search across all sources with snippets and thumbnails.
  • Cross-language navigation. Switch articles between languages and download missing ones.
  • Discover. Fresh cards daily: Picture of the Day, On This Day, Quote, Word, Book, Destination, Talk, Comic, Country.
  • Bookmarks and history. Feel like you're in a real browser, save your place.
  • Kiwix Catalog. Download 1,000+ Kiwix archives across 10 categories with instant language filtering.
  • Library management. Auto-updates, password protection, download queue.
  • Collections and Favorites. Group sources for easier access and scoped search.
  • JSON API. Every feature accessible programmatically with token auth.
  • Desktop and mobile. Native macOS and Python apps. Deploy anywhere.

Screenshots

Homepage Search Results
Homepage Search
Language Switching Catalog
Languages Catalog
Article Reader
Reader

Languages

Not an afterthought. Language is deeply integrated into every aspect of Zimi so you can focus on your content and feel at home. Enjoy filtered lists, labeled sources, RTL support and no rock left unturned.

  • 10 languages. English, French, German, Spanish, Portuguese, Russian, Chinese, Arabic, Hindi, Hebrew.

Something not right? Open an issue.

Install

macOS

brew tap epheterson/zimi && brew install --cask zimi

Or download from GitHub Releases.

Linux

sudo snap install zimi

Or grab the AppImage.

Docker

docker run -v ./zims:/zims -v ./zimi-config:/config -p 8899:8899 epheterson/zimi

/zims is where ZIM files live. /config persists cache, indexes, and settings. Open http://localhost:8899.

Docker Compose
services:
  zimi:
    image: epheterson/zimi
    container_name: zimi
    restart: unless-stopped
    ports:
      - "8899:8899"
    volumes:
      - ./zims:/zims          # ZIM files go here
      - ./zimi-config:/config  # cache, indexes, settings

Python

pip install zimi
ZIM_DIR=./zims zimi serve --port 8899

Environment Variables

Variable Default Description
ZIM_DIR /zims Path to ZIM files (scanned for *.zim on startup)
ZIMI_DATA_DIR /config (Docker) or $ZIM_DIR/.zimi Cache, indexes, and settings. Mount separately in Docker.
ZIMI_MANAGE 1 Library manager. 0 to disable.
ZIMI_MANAGE_PASSWORD (none) Protect library management
ZIMI_AUTO_UPDATE 0 Auto-update ZIMs (1 to enable)
ZIMI_UPDATE_FREQ weekly daily, weekly, or monthly
ZIMI_RATE_LIMIT 60 Requests/min/IP. 0 to disable.

API

Endpoint Description
GET /search?q=...&limit=5&zim=...&fast=1&lang=... Full-text search. fast=1 for title matches only. lang filters by language.
GET /read?zim=...&path=...&max_length=8000 Read article as plain text
GET /suggest?q=...&limit=10&zim=... Title autocomplete
GET /list List all sources with metadata
GET /article-languages?zim=...&path=... All languages an article is available in
GET /catalog?zim=... PDF catalog for zimgit ZIMs
GET /snippet?zim=...&path=... Short text snippet
GET /random?zim=... Random article
GET /collections List collections
POST /collections Create/update a collection
DELETE /collections?name=... Delete a collection
GET /resolve?url=... Resolve external URL to ZIM path
POST /resolve Batch resolve: {"urls": [...]}
GET /health Health check with version
GET /w/<zim>/<path> Serve raw ZIM content

Examples

# Search across all sources
curl "http://localhost:8899/search?q=python+asyncio&limit=5"

# Search in French only
curl "http://localhost:8899/search?q=eau&lang=fr&limit=5"

# Find all languages for an article
curl "http://localhost:8899/article-languages?zim=wikipedia&path=A/Water"

# Read an article
curl "http://localhost:8899/read?zim=wikipedia&path=A/Water_purification"

MCP Server

Zimi includes an MCP server for AI agents.

{
  "mcpServers": {
    "zimi": {
      "command": "python3",
      "args": ["-m", "zimi.mcp_server"],
      "env": { "ZIM_DIR": "/path/to/zims" }
    }
  }
}

For Docker on a remote host:

{
  "mcpServers": {
    "zimi": {
      "command": "ssh",
      "args": ["your-server", "docker", "exec", "-i", "zimi", "python3", "-m", "zimi.mcp_server"]
    }
  }
}

Tools: search (with lang filter), read, suggest, list_sources, random, article_languages, read_with_links, deep_search, list_collections, manage_collection, manage_favorites

Contributing

See CONTRIBUTING.md.

License

MIT


Built with ❤️ in California by @epheterson and Claude Code.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zimi-1.6.3.tar.gz (7.8 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zimi-1.6.3-py3-none-any.whl (8.0 MB view details)

Uploaded Python 3

File details

Details for the file zimi-1.6.3.tar.gz.

File metadata

  • Download URL: zimi-1.6.3.tar.gz
  • Upload date:
  • Size: 7.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for zimi-1.6.3.tar.gz
Algorithm Hash digest
SHA256 d9b39b7daaaecdbe78f4e8bb24d59d462d5ed60dfe4f0a9643b6c6cb4898346e
MD5 e67d43c2c228c259f4568d83749e14ad
BLAKE2b-256 f533c83ad338519d4787da94fb8b8d99619d79e1daab18f9ccccf6361e07c381

See more details on using hashes here.

File details

Details for the file zimi-1.6.3-py3-none-any.whl.

File metadata

  • Download URL: zimi-1.6.3-py3-none-any.whl
  • Upload date:
  • Size: 8.0 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for zimi-1.6.3-py3-none-any.whl
Algorithm Hash digest
SHA256 e07dbd1f0a31fb427559c0c90a35ab2059eb258597ee21c9812a2fea44a576ba
MD5 678c8b300144108d6d33990b3e587d4b
BLAKE2b-256 65075e59d7890f790f46b902d4f2e20609515fb2879365de150b1f410f6c1d6f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page