2026-08-02 03:55:12 +02:00
2026-08-02 03:55:12 +02:00
2026-07-30 21:23:43 +02:00
2026-07-30 21:23:43 +02:00
2026-08-01 18:39:12 +02:00
2026-08-01 18:39:12 +02:00
2026-07-31 22:29:08 +02:00
2026-08-02 03:36:15 +02:00
2026-08-01 11:12:28 +02:00
2026-08-01 16:51:42 +02:00

Sindri

Asset packer.

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 files.

Spec

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

[ MAGIC ][ VERSION ][ COMPRESSION ][ SIZE_PER_CHUNK ][ TOTAL_SIZE ][ #FILES ][ 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 3 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 1 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 files

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

File

Piece of data stored, consisting of 3 parts:

  • Path
  • Offset
  • Size
Path

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

Offset

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

Size

Size of the file. Represented in 8 bytes.

S
Description
Asset packer
Readme
147 KiB
Languages
Odin 96.1%
Shell 3.9%