##### Modal title goes here

Modal text goes here.

Caching assets...

## Kiwix: Offline Browser

Official site: https://www.kiwix.org

- About this app
- Usage
- Search usage
- Removing navigation bars
- Image download
- Privacy policy
- Technical information
  - ZIM archive format
  - Downloading and storing large archives
  - ServiceWorker and Restricted modes
- Feedback/helping/contributing
- Credits
- Licence information
- Other platforms/versions
- Download ZIM archives (content):
  - Library of archives
  - Index of all files

#### About this app

If your Internet access is expensive, slow, unreliable, controlled or censored, you can still gain free offline access to many valuable resources. Carry the world's largest Encyclopaedia around in your pocket, in any language, or a worldwide Travel Guide when you are on the road!

To use this app, you will need to download, completely free, one or more archives (called ZIM archives) from the Kiwix website and store them on your device or a thumb drive / external drive. You will then be able to access your chosen content totally offline.

Archives are available with content in many different languages from sources such as Wikipedia, Wiktionary, WikiMed, Wikivoyage, Project Gutenberg, Stack Exchange, TED Talks and many others. There are also "themed" archives with selected topics of interest such as medicine, movies, history, geography, maths, physics, etc.

↑ Back to Contents

### Usage

#### Step 1: Choose your content

Go to https://library.kiwix.org (easy-to-use graphical interface, archive previews) or https://download.kiwix.org/zim/ (traditional file list), and select the archives that interest you in your favourite language(s). If you don't have Internet access, you can also access/share content from a USB stick.

For a quick test, we recommend you start with a small archive containing all the Wikipedia articles about climate change in English.

Wikipedia archives with "mini" in the filename are the smallest, since they only contain the introduction of each article; "nopic" means no pictures; "maxi" means everything except video and audio. The largest files without any of these qualifiers are complete. Note that you can only see the filenames easily in the traditional file list .

Before downloading non-Wiki ZIM types, check if your browser supports ZIM archives with dynamic content: look at the bottom of the Configuration page, in the API panel, and if you see "ServiceWorker API available and registered" in green, then the app can read all ZIM types. Otherwise you should mostly stick to MediaWiki (Wikipedia, Wikivoyage, Wiktionary...) and Stack Exchange archives (see modes below for an explanation).

#### Step 2: Download or copy the content onto your device

Download your chosen content and/or copy it into a dedicated ZIM folder on your device's storage. Check the size before you download archives as many file sizes are very large (several Gigabytes). Themed versions such as WikiMed, or versions without images, are much smaller than full Wikipedia archives and can be readily downloaded in your browser.

If you don't have enough internal storage, consider using a modern microSD card, an external hard drive, or thumb drive. For larger archives (greater than 2GB) on older devices, it is possible that an archive might not be supported if your storage is formatted using a FAT filesystem (NB exFAT is fine). See Downloading large archives below for a solution.

#### Step 3: Select your file or drag-and-drop

Go to the "Configure" menu and select your archive, or select the folder containing your ZIM archives if you are offered that option. You can also drag and drop the file into the open app (if you have a split file, be sure to drag all parts).

#### Step 4: Enjoy your offline content!

↑ Back to Contents

### Title and full-text search usage

There are three types of search:

Title search matches the start of an article title, so if you search for 'France' you will get 'France (country)', 'France (disambiguation)', 'France (film)', etc. This kind of search tries to be case-insensitive, but the number of case variants tried is necessarily limited. If not enough results are returned, you can increase the maximum number of search results using the slider in Configuration.

Alphabetical search: If you type a letter of the alphabet in the search box (upper case may be most useful), it will show an alphabetical list of articles starting with that letter. This is useful for ZIM archives that have descriptive rather than semantic titles (e.g. TED Talks). You can also display a list of all titles (up to the limit set in Configuration) simply by clicking the search button without typing anything.

Full-text search: This type of search is only available in relatively recent desktop browsers, and if the archive contains a full-text index. If it is supported, it will be used automatically, but it is slower than title search, and you may notice a delay before results are added to the title-search results. Additionally, full-text search cannot be used if your archive is split into various chunks. To see whether it is available, look in the API panel at the bottom of the Configuration page after you have loaded a ZIM. If it says "Xapian [fulltext]" then it should be automatically enabled for that ZIM.

↑ Back to Contents

### Removing navigation bars

The default setting is for the top and bottom navigation bars to slide away when you scroll down and slide back when you scroll up. However, in some ZIM archives, e.g. PhET, it is not possible to scroll, and the navigation bars can obscure some content. In this case, in most browsers you can swipe decisively up or down on the window (with touch or with the mouse wheel/touchpad) to toggle the display of the navigation bars. In all browsers, you can also use the `Ctrl/Cmd` + `UpArrow`/`DownArrow` keys.

↑ Back to Contents

### Image Download

Unfortunately it is not usually possible to download and save an image from a ZIM article using the context menu (after right-clicking or long-pressing the image). One workaround is to choose "Copy Image" in the context menu, then paste it in any suitable software (Paint, Gimp etc, or even a Word processor), and then save it from there.

↑ Back to Contents

### Privacy policy

#### Short version:

Kiwix JS works offline, and does not collect or record any of your personal data. It only remembers your browsing history for the duration of a session (for the purpose of returning to previously viewed pages). This history is lost on exiting the app and is not recorded in any way.

#### Longer version:

This application only reads the archive files that you explicitly select on your device together with files in its own package. Some ZIM archives contain active content (scripts) which may, in rare circumstances, attempt to contact external servers for incidental files such as fonts. We have a Content Security Policy which attempts to prevent this, but it is not possible to guarantee that all such requests will be blocked, for example if a ZIM were to contain intentionally malicious code that can break the sandbox. Please note that scripts will only run if you enable ServiceWorker Mode (the default) in Configuration. Nevertheless, if you believe your Internet access is insecure, or is being observed or censored, we recommend that you completely shut down your Internet (Data or WiFi) access before using the application.

Additionally, if you obtained this app from a third-party site (including a browser extension store), then the site operator may track your usage of the app (e.g. download, install, uninstall, date and number of sessions) for the purpose of providing anonymous, aggregate usage statistics to developers. If this concerns you, you should check the relevant site's Privacy Policy for further information.

↑ Back to Contents

### Technical information

#### ZIM archive format

Offline archives use the OpenZIM format , but note that this app has only been tested extensively on MediaWiki (Wikipedia, Wikivoyage, etc.), Gutenberg, Stackexchage and TED Talks archives. Video content is supported if your device, browser or OS understands the format. Some ZIMs use a proprietary dynamic UI which is only supported in ServiceWorker Mode (see below).

This application is now fully compatible with archives that are created by Zimit (https://youzim.it ) using the Web Archive (WARC) format, so long as your browser supports ServiceWorker mode. If you can only use Restricted mode (or ServiceWorkerLocal), we do our best to show you the static content of the requested article (no JavaScript can run in this mode). This will work for some basic static sites, but many will look broken. Search for content in the usual way.

#### Downloading and storing large archives

Full versions of Wikipedia can be enormous: French, German and Spanish Wikipedia with images are each >25GB; full English Wikipedia with images is >90GB. For these very large archives you can find convenient BitTorrent links provided by library.kiwix.org , which may be more reliable than attempting to use your browser. You can use an open-source BitTorrent client such as QBittorrent with these links (install the software before clicking on the torrent link).

If you need to store a large ZIM archive on an older filesystem formatted as FAT16 or FAT32, you need to be aware of the file size limits of those systems (FAT16 < 2GiB; FAT32 < 4GiB). Most modern microSD cards, thumb drives or hard drives are formatted as exFAT or another modern FS such as NTFS, which do not have this issue. If your ZIM archive is larger than the FS limit, it is possible to split the archive into several 2GiB-1 or 4GiB-1 files (or smaller). You will need to give a file extension to each chunk in the right order following this pattern: `*.zimaa`, `*.zimab`, `*.zimac`, `...`, etc.). When you pick this archive in the app, be sure to pick all the chunks, or drag-and-drop them all into the app.

For some information on how to split archives, see Download a ZIM archive .

↑ Back to Contents

#### ServiceWorker and Restricted modes

Depending on your browser or framework, this app may be capable of running in different modes, which we call "ServiceWorker Mode" and "Restricted Mode". There is a toggle under Compatibility Settings in Configuration that allows you to select between these. Here is a technical explanation of what these modes do:

- ServiceWorker Mode: This is the default mode. As its name implies, it requires that the browser or framework be capable of installing a Service Worker, which is usually the case in modern browsers. It works by intercepting the browser or framework's Fetch calls (network requests) and supplying the requested content from the ZIM. In this mode, the content is read and supplied as-is from the archive to the browser. Dynamic content (e.g. JavaScript) and proprietary UIs are fully supported in this mode. This mode can feel initially a little slower than Restricted mode until commonly used assets are cached, but it soon equals Restricted mode in speed, at least in modern browsers. However, older browsers such as IE11 are incompatible with this mode, and the app must be running in a secure context (`https:`, `localhost`, or certain browser extensions). While this mode is not natively supported in Mozilla (Firefox) browser extensions, we provide a functional workaround by re-launching the extension as a Progressive Web App (PWA). Note that this mode cannot run with the `file:` protocol (but only IE11 and old Edge allow the app to run by launching `index.html` from the file system).
- ServiceWorkerLocal Mode: This is only available in Chromium extensions. It is the same as above, but due to very tight security restrictions in these extensions, no inline JavaScript or eval statements can run. Unfortunately, modern ZIMs may have such dynamic content, and so functionality may be restricted in this mode. Nevertheless, it is more secure: the content is sandboxed and no one-time server access is required to enable the Service Worker. You are protected from inline code execution at the cost of loss of some features in dynamic ZIMs.
- Restricted Mode: This mode prevents attached scripts from running in the iframe, so it is useful for checking the static content of a ZIM before you allow scripts to run. It is also compatible with older browsers or frameworks that cannot run Service Workers.The mode has limitations which mean that only static content can be displayed, such as that found in Wikipedia / WikiMedia archives and (for now) Stackexchange. It is a way of inserting articles extracted from the ZIM into the DOM (browser document) by injecting the content into an iframe or tab. We then use native DOM methods, or sometimes JQuery, to parse the article's HTML and insert required assets (images, stylesheets, event listeners for hyperlinks, etc.). On old devices, DOM traversal can be slow, but it is compensated for because we do not extract or run JavaScript assets (which would be technically extremely complicated). As a result, for WikiMedia archives this mode is usually quite fast. On the downside, ZIMs that have a proprietary dynamic UI (such as Gutenberg or TED talks) are only partially supported in this mode: the UI does not work, but articles can be searched for and loaded from the search bar.

↑ Back to Contents

### Feedback / helping / contributing

We welcome constructive feedback and suggestions for improvement. We will consider feature requests, but it is even better if you can contribute to improving the app! The source code is on GitHub , and we welcome Pull Requests (but open an issue and discuss your proposal first).

The bug and issue tracker is on GitHub too. We use it as our roadmap. Alternatively, you can send your feedback by email. In all cases, if you are reporting a bug, please give as much detail as you can: which device you are using, which version of Kiwix, which archive, which articles etc.

If you like the Kiwix project and use it, please consider giving a donation at https://support.kiwix.org to help maintain our servers, ZIM files and applications. You can also help by:

- Adding articles to Wikipedia or improving the existing ones, by editing articles ;
- Participating in the Kiwix project.

↑ Back to Contents

### Credits

We owe a big debt of gratitude to:

- Kelson and all the Kiwix community for welcoming us to this project;
- Wikipedia teams and contributors for helping to make knowledge available to everybody;
- All the developers of libraries and tools we used, for releasing them as Free software (see libraries and tools paragraph).

↑ Back to Contents

### Licence information

Copyright 2013-2024 Mossroy, Jaifroid, Peter-x and other contributors.

This application is licensed under the GPL v3 Licence:

Kiwix is free software: you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation, either version 3 of the Licence, or (at your option) any later version.

Kiwix is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence for more details.

You should have received a copy of the GNU General Public Licence along with Kiwix (file LICENSE-GPLv3.txt). If not, see https://www.gnu.org/licenses/.

#### Main libraries and resources used:

- The core-js library, copyright Sebastian McKenzie and contributors, released under an MIT Licence
- The Babel JavaScript compiler, copyright Denis Pushkarev, released under an MIT Licence
- jQuery 3.7, released under the MIT Licence
- Bootstrap 4, released under an MIT Licence
- Fontawesome Free, icons licensed under CC BY 4.0 Licence, code licensed under a MIT Licence
- QUnit 2, released under the MIT Licence
- Kiwix logo from kiwix.org, released under the Creative Commons Attribution Share Alike Licence
- OpenZIM specifications from www.openzim.org, released under the Creative Commons Attribution Share Alike Licence
- Emscripten to generate XZ and ZSTD decompressors in javascript : https://github.com/kripken/emscripten, released under the MIT Licence
- XZ Embedded (the XZ library converted to Javascript with Emscripten), in public domain
- The Zstandard library, released under a BSD Licence and a GPLv2 Copying Licence
- The WebP-Hero browser polyfill, copyright Chase Moskal, released under an MIT Licence
- The http-server, copyright Charlie Robbins, Marak Squires, Jade Michael Thornton and contributors, released under an MIT Licence
- The Rollup JavaScript Bundler, copyright by the contributors, released under an MIT Licence
- Vite Frontend Tooling, copyright Yuxi You and Vite contributors, released under an MIT Licence
- The TestCafé suite, copyright Developer Express Inc., released under an MIT Licence
- Selenium WebDriver, copyright The Software Freedom Conservancy, released under an Apache Licence v2
- Mocha Testing Framework, copyright The OpenJS Foundation and Mocha contributors, released under a Creative Commons Attribution 4.0 International Licence
- i18next Internationalization Framework, copyright i18next, released under an MIT Licence

↑ Back to Contents

### Other platforms/versions

Other Kiwix clients exist on various platforms such as desktop and mobile apps for Linux, Windows, Android and iOS. We also have an offline-first, fully featured PWA based on the code in Kiwix JS: https://pwa.kiwix.org .

See the official download site: https://www.kiwix.org/applications/ .

↑ Back to Contents

## Configuration

This application needs a ZIM archive to work.
For full instructions, please see the section About.

Drag and drop a new ZIM file, or display file selectors.

Please select or drag and drop a .zim file (or all the .zimaa, .zimab etc in case of a split ZIM file):

Select ZIM File(s) Select Folder Browse ZIM Library
Only ZIMs with static content (e.g. Wiki-style) are supported in Restricted mode.
For information on ZIM compatibility, see About (Usage).
Scanning for archives... Please wait

0

archive(s) found in selected location.

Please select the archive you want to use:

(Re-pick folder if there is new content on your device)

Rescans your SD Cards and internal memory

### Display settings

Display options:
Hide header and footer when scrolling or swiping down (scroll up slightly to show again)
Animate transition between app pages
Home key and Home tab focus search bar (may have side effects on ZIMs that handle Home key)
Open external links in new tabs. Disabling this might break kiwix-js UI in some specific cases
Automatically re-open last selected archive (only works if you grant permanent permission when prompted)
Select app theme (content inversion is experimental):

(Auto themes match the dark/light mode of your device.)

* Implements workarounds specific to Wikimedia ZIMs. Try generic option if there are display errors with recent ZIMs.

[ Show article with applied theme ]

### Performance / compatibility

Caching and preview settings

Kiwix JS can speed up the display of articles by caching assets:

Cache assets (recommended)
Do not cache assets (empties caches: for low-memory devices)

Select max number of search results:

Value: (default 25, higher values increase search time)
Show a popover preview of Wikipedia / Wkivoyage articles when hovering over links (limited functionality in Restricted Mode)
Content injection mode

See About (Technical Information) for an explanation of the difference between these modes:

ServiceWorker Mode (recommended, supports dynamic content and inline JavaScript)
ServiceWorkerLocal Mode (secure local Service Worker, but no inline JavaScript)
Restricted Mode(No dynamic content, compatible with older browsers)
Image handling

Work around anti-fingerprinting measures by substituting WebP images with canvas elements (setting determined automatically, can be disabled):

Use WebP workaround if needed

### Expert settings

Troubleshooting and development
Permanently hide active content warning (for experienced users)
Permanently hide "Opening external link" warning
Disable drag-and-drop (in case it is causing anomalies)
Enable source verification of new files (recommended: you will only be prompted the first time you open a ZIM)
Use libzim for loading zim (uses unstable libzim API for reading ZIM)
Select libzim version to use:
Bypass AppCache (disables offline use of PWA!)

Reset the app to default settings and erase all caches:

API Status
Once you have loaded a ZIM archive, you can search its contents using the above search field.
Warning: You must switch to ServiceWorker mode to view all content in this ZIM.
Some content may still be available by searching above (or tap the search icon for a list). [Permanently hide]