Перейти к основному содержимому

Kiwix (warc2zim, zimit, zimwriterfs)

Kiwix — open-source экосистема для офлайн-чтения веб-контента. В центре — формат ZIM (сжатый, полностью-индексированный, читается через Kiwix-приложения). Для архивистов ключевые инструменты — warc2zim (конвертация WARC в ZIM), zimit (краулинг сразу в ZIM через Browsertrix) и zimwriterfs (создание ZIM из локальной HTML-папки).

Сайт: kiwix.org

Зачем нужен​

WARC — это «сырой» архив для долгосрочного хранения. Но обычный пользователь не может его открыть без pywb, OpenWayback или ReplayWeb.page. ZIM — это «потребительский» формат:

  • Один файл — весь архив сайта в .zim (5-50 ГБ для больших сайтов).
  • Полнотекстовый поиск — работает локально в Kiwix-приложении.
  • Читается на любом устройстве — Windows, macOS, Linux, Android, iOS, Kiwix Serve.
  • Без интернета — идеально для отключённых регионов, школ, библиотек.
  • Без CDN и трекеров — никакой сторонней инфраструктуры.
  • Стандарт для Wikipedia-зеркал — весь Wikipedia-оффлайн это Kiwix.

Для СНГ-архивов это критически важно: доступ к информации может быть ограничен, ZIM можно распространять через торренты, флешки, на локальных серверах.

Что входит в экосистему​

ИнструментЧто делаетКогда использовать
zimitКроулинг сразу в ZIM (обёртка над Browsertrix Crawler)Архивация современного сайта в один файл ZIM
warc2zimКонвертация WARC → ZIMУ вас уже есть WARC, хотите ZIM
zimwriterfsСоздание ZIM из локальной HTML-папкиАрхивация статического HTML, генерация с нуля
Kiwix ServeHTTP-сервер для раздачи ZIMЛокальная инфраструктура для нескольких ZIM
Kiwix JSБраузерный/WASM-читалка ZIMЧитать ZIM без установки приложения
mwofflinerСпециализированный конвертер MediaWiki → ZIMАрхивирование Википедии, MediaWiki-сайтов

Формат ZIM​

ZIM (Zeno IMproved) — это сжатый, индексированный формат для веб-контента:

  • Содержимое — HTML, CSS, изображения, видео, аудио, PDF.
  • Полнотекстовый индекс — поиск с морфологией.
  • Метаданные — title, описание, автор, дата, язык.
  • Сжатие — xz, zstd, обычно 2-5× от исходного HTML.
  • Размер — от нескольких МБ (маленький сайт) до 100+ ГБ (Wikipedia).

Спецификация: openzim.org/wiki/ZIM_file_format.

Возможности warc2zim​

  • Чтение WARC/WARC.gz файлов.
  • Извлечение HTML и медиа из WARC.
  • Создание полнотекстового индекса (Xapian-based).
  • Сохранение структуры ссылок для навигации.
  • Метаданные в ZIM-файле.
  • Параллельная обработка для больших архивов.
  • Запись в xz или zstd для максимального сжатия.

Возможности zimit​

  • Краулинг через реальный Chrome (через Browsertrix Crawler).
  • JS-рендеринг — современные сайты работают.
  • WARC-вывод опционально — можно одновременно WARC + ZIM.
  • Behaviors — autoscroll, autoplay, site-specific скрипты.
  • Аутентификация через cookies.
  • Rate limiting и уважение к robots.txt.

Когда использовать​

✅ Kiwix-экосистема подходит для:

  • Распространения архивов среди пользователей без технических знаний.
  • Офлайн-доступа к контенту (отключённый интернет, школы, экспедиции).
  • Долгосрочного хранения с человекочитаемым форматом.
  • Архивирования Википедии (Wikipedia, Wikidata) и других MediaWiki.
  • Создания «Kiwix-стиля» архивов для конкретных сайтов.
  • Торрент-распространения (Wikipedia-зеркала доступны через торренты).

❌ Не подходит для:

  • Серверного воспроизведения с поиском по URL (для этого — pywb).
  • Извлечения отдельных файлов из WARC (для этого — WARC-processing).
  • Долгосрочного архивирования в стандарт WARC (ZIM теряет часть метаданных WARC).
  • Больших инкрементальных обновлений (ZIM обычно пересоздаётся).

Установка​

Docker (рекомендуется)​

# warc2zim
docker pull openzim/warc2zim:latest

# zimit
docker pull ghcr.io/openzim/zimit:latest

# kiwix-serve
docker pull kiwix/kiwix-serve:latest

Из исходников​

# warc2zim
git clone https://github.com/openzim/warc2zim
cd warc2zim
pip install .

# zimit
git clone https://github.com/openzim/zimit
cd zimit
npm install

Пакетные менеджеры​

# Arch
yay -S kiwix-tools kiwix-desktop

# Ubuntu
sudo apt install kiwix-tools

Готовые приложения​

Использование​

warc2zim: WARC → ZIM​

Базовое использование​

warc2zim \
--input archive.warc.gz \
--output archive.zim \
--title "My Archive" \
--description "Archive of example.com from 2025" \
--creator "Ruarxive"

С расширенными опциями​

warc2zim \
--input archive.warc.gz \
--output archive.zim \
--title "Government Archive 2025" \
--description "Daily snapshots of government sites" \
--creator "Ruarxive" \
--publisher "Ruarxive.org" \
--name "ruarxive-gov-2025" \
--tags "government;russia;archive" \
--language rus \
--illustration cover.jpg \
--no-fulltext # отключить полнотекстовый индекс

Через Docker​

docker run --rm \
-v $(pwd):/data \
openzim/warc2zim \
--input /data/archive.warc.gz \
--output /data/archive.zim \
--title "My Archive"

zimit: краулинг сразу в ZIM​

Базовое использование​

zimit \
--url https://example.com \
--output example.zim \
--title "Example Archive" \
--description "Offline archive of example.com"

С продвинутыми опциями​

zimit \
--url https://news.example.com \
--output news-2025.zim \
--title "News 2025" \
--description "Daily news archive" \
--workers 4 \
--maxDepth 5 \
--includeRegex "news.example.com/2025/.*" \
--excludeRegex ".*\\.(mp4|zip)$" \
--behaviors autoscroll,autoplay \
--timeLimit 3600

С WARC-выводом одновременно​

zimit \
--url https://example.com \
--output example.zim \
--outputWARC example.warc.gz \
--outputWACZ example.wacz \
--title "Example Archive"

zimwriterfs: HTML-папка → ZIM​

# Сначала скачать HTML
wget --mirror --convert-links --adjust-extension \
--no-parent https://example.com -P /tmp/site

# Создать ZIM
zimwriterfs \
--title="My Site" \
--description="Offline copy" \
--creator="Ruarxive" \
/tmp/site \
archive.zim

Kiwix Serve: раздача ZIM по HTTP​

kiwix-serve \
--port 8080 \
--library /path/to/library.xml \
*.zim

Открыть http://localhost:8080 — список ZIM с поиском.

Конфигурация​

library.xml для Kiwix Serve​

<library version="1.0">
<book id="ruarxive-gov-2025"
path="/var/kiwix/gov-2025.zim"
url="/gov-2025"
title="Government Archive 2025"
description="Daily snapshots of Russian government sites"
language="rus"
creator="Ruarxive"
publisher="ruarxive.org"
date="2025-12-31"
tags="government;russia;archive"
favicon="/var/kiwix/gov-2025-favicon.png"
size="5368709120"/>
</library>

Docker Compose для Kiwix Serve​

version: "3"
services:
kiwix:
image: kiwix/kiwix-serve:latest
ports:
- "8080:8080"
volumes:
- ./zims:/zims
- ./library.xml:/library.xml
command: kiwix-serve --port 8080 --library /library.xml /zims/*.zim

Сравнение с другими инструментами​

ИнструментФормат выводаJSОфлайн-чтениеПолный текстСложность
Kiwix (warc2zim/zimit)ZIM✅✅✅Средняя
pywbWARC + сервер⚠️❌⚠️Высокая
ReplayWeb.pageWARC + браузер✅⚠️❌Низкая
BrowsertrixWACZ✅❌❌Средняя
ArchiveBoxHTML + SQLite⚠️⚠️✅Средняя
HTTrackHTML❌✅❌Низкая

Когда Kiwix лучше всех​

  • Нужно распространение среди обычных пользователей (без знаний WARC).
  • Целевая аудитория — офлайн-доступ (отключённый интернет, экспедиции, школы).
  • Wikipedia-зеркало или другой MediaWiki-сайт.
  • Торрент-распространение (Kiwix-зеркала популярны в bittorrent).

Когда лучше pywb​

  • Нужен серверный доступ по URL (как wayback.example.com).
  • Важна навигация по датам (как на web.archive.org).
  • Инкрементальное обновление (новые кроулы добавляются к существующим).

Когда лучше ReplayWeb.page​

  • Быстрая проверка без сервера — открыл WARC в браузере.
  • Не нужно распространение (только для себя).

Best practices​

1. Всегда делайте WARC-бэкап​

ZIM — это «потребительский» формат, WARC — «архивный». Сохраняйте WARC, даже если распространяете ZIM.

# ZIM + WARC
zimit --url https://example.com \
--output example.zim \
--outputWARC example.warc.gz

2. Метаданные — обязательно​

zimit --url ... \
--title "..." \
--description "..." \
--creator "..." \
--language rus \
--tags "..."

Без метаданных ZIM невозможно каталогизировать.

3. Используйте zimit вместо warc2zim для современных сайтов​

# Современный SPA
zimit --url https://spa-app.com --output spa.zim --behaviors autoscroll,wait

# vs
wget --mirror https://spa-app.com # пустая каркас
warc2zim archive.warc.gz # тоже пустая каркас

4. Сжимайте правильно​

# ZIM обычно уже сжат. Дополнительное сжатие сожмёт ещё ~5-10%
zstd -22 archive.zim -o archive.zim.zst
# или
xz -9 -e archive.zim

5. Для больших ZIM — Kiwix Serve​

Не пытайтесь открыть 50 ГБ ZIM на телефоне — поставьте Kiwix Serve на домашнем NAS, подключайтесь по Wi-Fi.

6. Подписывайте manifest​

# Создать manifest.json с контрольными суммами
sha256sum archive.zim > archive.zim.sha256

7. Используйте mwoffliner для Википедии​

# Гораздо эффективнее, чем warc2zim
mwoffliner --mwUrl="https://ru.wikipedia.org" \
--adminEmail="[email protected]" \
--outputDirectory=/tmp \
--filename="wikipedia-ru.zim"

Ограничения​

  • ZIM — не стандарт ISO, в отличие от WARC. Долгосрочная совместимость зависит от проекта Kiwix.
  • Потеря части метаданных WARC при конвертации.
  • Большие ZIM (десятки ГБ) — медленный полнотекстовый поиск.
  • Не инкрементально — пересоздание с нуля при обновлении.
  • Один сайт на ZIM (обычно) — нельзя собрать разные сайты в один ZIM.
  • Зависимость от LibreOffice/wkhtmltopdf для PDF-конверсии в некоторых сценариях.

Юридические аспекты​

[!WARNING] ZIM-файлы могут содержать защищённый авторским правом контент. Распространение ZIM со всем контентом сайта может нарушать ToS сайта. Всегда указывайте источник и лицензию в метаданных ZIM.

Свободно лицензированный контент (CC, public domain, государственные сайты многих стран) — можно распространять свободно.

Ресурсы​

Связанные материалы​