Repository navigation
Gleipnir 1.0.1
Gleipnir is a context-mixing lossless compressor and archiver in one C file. It
predicts each bit with 27 statistical models, blends them with a learned mixer,
and codes the result with an arithmetic coder. There is no dictionary in the
output at all.
New here? Download and install instructions are in the README — plain numbered steps for Windows and Linux.
What's new in 1.0.1
The engine is unchanged from 1.0.0 — output is byte-identical and archives are
compatible in both directions. This release is about getting it into people's
hands:
- One-click Windows installer (
gleipnir-1.0.1-setup.exe) — per-user, no
administrator prompt. Addsgleipnirto your PATH and a Compress with
Gleipnir entry to the File Explorer right-click menu (plus Extract / Verify
/ List on.glfiles). - The Linux binary is now statically linked, so it runs on any x86-64 Linux
with nothing to install — no glibc version requirement, nolibz.so.1. - Every artifact here is built and tested by CI for this exact commit
(Linux + Windows build, round-trip, corruption fuzz, and a cross-platform
read check), so each hash below is checkable against that run.
Silesia
211,938,580 bytes, one machine, single thread, every gleipnir row round-trip
verified against its SHA-256.
total ratio bpc comp decomp peak
gleipnir -9 35,582,296 5.96x 1.343 597s 672s 1055 MB
gleipnir -7 36,493,092 5.81x 1.377 451s 467s 922 MB
gleipnir -5 38,273,415 5.54x 1.445 337s 342s 483 MB
zpaq -m5 39,113,069 5.42x 1.476 559s 582s 839 MB *
gleipnir -3 39,510,297 5.36x 1.491 248s 248s 305 MB
lpaq1 -6 43,006,234 4.93x 1.623 173s 186s 199 MB *
gleipnir -1 43,207,157 4.91x 1.631 139s 139s 196 MB
xz -9e 48,456,100 4.37x 1.829 114s 2s 509 MB *
Codecs marked * do not report their own peak RSS, so those figures are sampled
at 50 ms and are a lower bound. The peak column is compression; decompression
peaks 37-40 MB higher at every preset.
Decompression costs the same as compression, because the decoder runs the
same model. That is inherent to context mixing and it is why this is built for
data you keep and rarely read, not for general-purpose use.
Integrity
The gate is that for any input, damaged or not, Gleipnir either exits 0 with
byte-exact output or exits non-zero with a diagnostic.
- 648 round trips, all exact
- 60 round trips across 6 thread counts, all exact
- 300 randomized corruption trials across 7 damage models: no crash, no hang,
and no case of exit 0 with wrong output
CI builds and fuzzes on Linux and Windows, and verifies that an archive written
on Linux reads on Windows.
Downloads
gleipnir-1.0.1-setup.exe b577e5f2a6355568cf105c72df45e268d9db35267cf69d7cba4e38141289cb12
gleipnir.exe ab04043c4df4ee39aa14079ce2672d82a53c4527205c9af97532278093c6e00b
gleipnir-windows-x86_64.zip f54e4149fac903bbdcbf6bbe516c890b895ec9a3536ef8eaaf06c6ae96039a4f
gleipnir-linux-x86_64 7d552c810cb47f156a0153e39c9956aa4020685b5d6613df534e2f6af8c85e5e
gleipnir-1.0.1-setup.exe— Windows one-click installer (recommended). Double-click, click through, done. Per-user, so no administrator prompt. Not code-signed, so SmartScreen warns the first time: More info → Run anyway.gleipnir.exe— the whole program in one file, no installer. Statically linked, KERNEL32 and the UCRT only, so it runs on Windows 10 and later with nothing else.gleipnir-windows-x86_64.zip— the samegleipnir.exeplus a script install (install.ps1) for people who would rather not run an unsigned installer.gleipnir-linux-x86_64— statically linked, so it runs on any x86-64 Linux with nothing to install.chmod +xit and go.
The binaries are built -march=x86-64-v2 (SSE4.2/POPCNT, any x86-64 CPU from roughly 2009 on), never -march=native.
Licence
GPL-3.0-or-later. First published under the Business Source License 1.1 (as
Nyx 1.0.0) with a Change Date of 2030-08-04; that conversion has been brought
forward and the BSL terms no longer apply to any version.
The engine's lineage is PAQ, ZPAQ and lpaq. Bit-history states, logistic mixing
in the stretched domain, ISSE chains and SSE/APM refinement are all from Matt
Mahoney's work. No PAQ code is used here, but the ideas are not mine.