ZIM file format
The ZIM file format is based on the zeno file format. It starts with a header, which is described here:
length in byte, all types are littlendian
| Field Name | Type | Offset | Length | Description |
|---|---|---|---|---|
| rMagicNumber | integer | 0 | 4 | Magic number to recognise the file format, must be "1439867043" |
| rVersion | integer | 4 | 4 | wp2006=2, wp2007=3, ZIM=4, version of the file format for backwards compatibility |
| rCount | integer | 8 | 4 | total number of articles |
| integer | 12 | 4 | deprecated | |
| rIndexPos | integer | 16 | 8 | position of the article index |
| rIndexLen | integer | 24 | 4 | length of the article index |
| headerLen | integer | 28 | 4 | length of header (currently 60) |
| rIndexPtrPos | integer | 32 | 8 | position to the directory pointerlist |
| rIndexPtrLen | integer | 40 | 4 | length of directory pointerlist (always 4*rCount) |
| rMainPage | integer | 44 | 4 | article index of main page or 0xffff if no main page |
| rLayoutPage | integer | 48 | 4 | article index of layout page or 0xffff if no layout page |
| integer | 52 | 8 | deprecated |
Each article in the zim file has a directory entry. Since the directory entry has a variable size, we have a index pointerlist, which is a list of 4-byte offsets, which points to the directory entries.