ZIM Viewer

Summary

Mentor(s): Dr. Mike Murphy
Project Type: Software development and engineering; user interface design
Technologies: Python, Qt (PySide 6 and Qt Designer), Git
Undergraduate Credit: CSCI 399, CSCI 490
Graduate Credit: IST 659
Locality: Main campus and/or remote

Purpose

The Kiwix Association has developed an efficient way to provide offline copies of resources including Wikipedia, Project Gutenberg, and various programming documentation, among others. Kiwix compresses these resources into the binary ZIM file format, with a 1-to-1 relationship between resources and ZIM files. For example, a recent snapshot of Wikipedia is available as a 115 GB ZIM file. Kiwix supplies various viewers and servers for ZIM files with a focus on serving areas without Internet access.

As part of a project to create a standalone, resilient computing system that could operate off the grid after a hurricane or other disaster, it is desirable to have a local ZIM file viewer. The existing applications I've tested for this purpose all have significant drawbacks. For instance, the official Kiwix viewer insists upon having a torrent client available at run time and complains if one isn't present. To complicate matters further, the Kiwix Association released their official library for interacting with ZIM files under the GNU General Public License, version 2. While this license isn't problematic by itself, it also isn't the best choice for a library license.

Instead of creating a GPLv2-licensed application that relies on the Kiwix library, this project will instead use the ZIM file format documentation to implement a pure Python reader module. A GUI can then be added using Qt for Python to be consistent with the other projects. This is a greenfield project: no code has been written yet.

Scope of Work

Implement a parser for the ZIM file format, so that the individual packed resources can be retrieved. Design a graphical viewer application that presents the unpacked resources in a QTextBrowser or QWebEngineView.

Related Research

Adding accessibility support to the ZIM viewer application is an additional project once the basic functionality is working. Accessibility additions could include screen reader hints, text-to-speech, and alternative methods of presenting information.