Files
2026-08-03 09:13:34 +02:00

2.0 KiB

Design

The data layout design is very simple. It consists of data split into chunks with the first chunk holding the metadata for the structure and assets.

Spec

                                         METADATA                                           DATA
|----------------------------------------------------------------------------------------||------|

[ MAGIC ][ VERSION ][ COMPRESSION ][ SIZE_PER_CHUNK ][ TOTAL_SIZE ][ #ASSETS ][ []ASSETS ][ DATA ] # chunk 1
[                                              DATA                                              ] # chunk 2
[                                              DATA                                              ] # etc..
[       DATA       ]                                                                               # last chunk

Magic string

Magic string to detect if the read file is what we expect it is. Represented in 4 bytes.

Value is 0x514D21, the closest approximation of "Sindri".

Version

Version of the specification. Represented in 2 bytes.

Value is 1 currently.

Compression

Wether LZ4 compression is enabled/disabled. Represented in 2 byte.

Value is configurable, defaulting to 0.

0 = off
1 = default LZ4 algorithm
2 = lowest LZ4-HC algorithm, faster and larger
..
12 = highest LZ4-HC algorithm, slower and smaller

Size per chunks

The size in bytes of each chunk. Represented in 8 bytes.

Value is configurable, defaulting to 2GiB.

Total size

The total size in bytes of all chunks combined. Represented in 8 bytes.

Number of assets

The total number of assets in the pack. Represented in 4 bytes.

[]Asset

Index to piece of stored data, consisting of 3 parts:

  • Path
  • Size
  • Offset

Path

Path of the asset as if it were on the filesystem. Represented in 512 bytes.

Size

Size of the asset. Represented in 8 bytes.

Offset

The offset to the asset, starting from the true 0th byte of the first chunk. Represented in 8 bytes.