Hawkynt.FileFormats.Archives
1.0.0.89
dotnet add package Hawkynt.FileFormats.Archives --version 1.0.0.89
NuGet\Install-Package Hawkynt.FileFormats.Archives -Version 1.0.0.89
<PackageReference Include="Hawkynt.FileFormats.Archives" Version="1.0.0.89" />
<PackageVersion Include="Hawkynt.FileFormats.Archives" Version="1.0.0.89" />
<PackageReference Include="Hawkynt.FileFormats.Archives" />
paket add Hawkynt.FileFormats.Archives --version 1.0.0.89
#r "nuget: Hawkynt.FileFormats.Archives, 1.0.0.89"
#:package Hawkynt.FileFormats.Archives@1.0.0.89
#addin nuget:?package=Hawkynt.FileFormats.Archives&version=1.0.0.89
#tool nuget:?package=Hawkynt.FileFormats.Archives&version=1.0.0.89
Hawkynt.FileFormats.Archives
Pure-managed compression streams + archive containers extracted from CompressionWorkbench. Sister package to
Hawkynt.FileFormats.Audio/Hawkynt.FileFormats.FileSystems/Hawkynt.FileFormats.Images, all built on top ofHawkynt.Compression.Core.
The package bundles every archive-domain assembly into lib/ and is the workbench's "swiss-army
knife" surface — install it and you can read or write practically any compression stream or
archive container in pure managed code, with no native runtime dependency on
zlib / liblzma / libarchive / libbz2.
When to use this package
- You're writing a tool that needs to enumerate / extract / write archives in a wide range of formats from a single .NET process
- You want to inspect installer payloads (.msi / .nsis / Inno Setup / .appimage / .snap / .deb / .rpm / .apk / .ipa / .nupkg / .crx / .xpi / etc.) without running the installer
- You're processing compression streams without container framing — gzip / bzip2 / xz / zstd /
lz4 / snappy / brotli / lzma / lzop and the long historical tail (
compress/pack/arc/lzh/quicklz/lzfse/ etc.) - You're handling ZIP-based document bundles (Office Open XML — docx / xlsx / pptx; OpenDocument — odt / ods / odp; ePub; Comic-Book .cbz; KML .kmz; .vsdx)
- You're investigating game / engine / asset packages — Bethesda BSA / BA2, Unreal pak / .upk, Unity bundles, Quake / Doom WAD, Source Engine VPK, Mass Effect SFAR, RPG Maker RGSS, Ren'Py RPA, Godot PCK, Mortal Kombat MIX, Total Annihilation HPI / TFC, Master of Orion, etc.
Skip it when:
- You only need ZIP at default settings —
System.IO.Compression.ZipArchivedoes that with the BCL's GZip / Deflate paths - You need format-specific RAR / 7z encoder quality at parity with the original tool — those ship as native libraries with proprietary or LGPL fallback licensing concerns; this package prioritises read-coverage and clean-room license over pixel-identical output
Quick start — extract a generic archive
using Compression.Registry; // FormatRegistry.DetectAndOpen
using FileFormat.Tar; // ensures TarFormatDescriptor is registered
using FileFormat.SevenZip; // ditto for 7z
// (every IFormatDescriptor in the package self-registers via the
// source-generator at app start; just reference the assemblies you need)
using var input = File.OpenRead("payload.tar.gz");
var ops = FormatRegistry.DetectArchiveOperations(input);
foreach (var entry in ops.List(input))
Console.WriteLine($"{entry.Name,-40} {entry.Size,12:N0}");
Quick start — round-trip a single compression stream
using FileFormat.Brotli;
byte[] original = File.ReadAllBytes("page.html");
byte[] compressed = new BrotliFormatDescriptor().Compress(original);
byte[] roundTrip = new BrotliFormatDescriptor().Decompress(compressed);
Debug.Assert(original.SequenceEqual(roundTrip));
Contents
State legend:
- R — read-only:
List/Extract/Test. Cannot create new archives. - WORM — Write-Once-Read-Many: read AND can synthesise a fresh archive from scratch
(
IArchiveCreatable), but cannot modify an existing archive in place. - R/W — full read + write, including in-place add / replace / remove (
IArchiveInPlaceModify). Currently no archive in this package is R/W; modifying an archive means "extract → modify → re-create from scratch".
Compression streams (single-file codecs without container framing)
| Format | State | Display name |
|---|---|---|
FileFormat.ApLib |
WORM | aPLib |
FileFormat.Balz |
WORM | BALZ |
FileFormat.Bcm |
WORM | BCM |
FileFormat.BinHex |
WORM | BinHex |
FileFormat.BriefLz |
WORM | BriefLZ |
FileFormat.Brotli |
WORM | Brotli |
FileFormat.Bsc |
WORM | BSC |
FileFormat.Bzip2 |
WORM | BZip2 |
FileFormat.Cmix |
WORM | cmix |
FileFormat.Compress |
WORM | Unix Compress |
FileFormat.Crunch |
WORM | CP/M Crunch |
FileFormat.Csc |
WORM | CSC |
FileFormat.Density |
WORM | Density |
FileFormat.Freeze |
WORM | Freeze |
FileFormat.Gzip |
WORM | GZIP |
FileFormat.IcePacker |
WORM | ICE Packer |
FileFormat.Kwaj |
WORM | KWAJ |
FileFormat.Lizard |
WORM | Lizard (LZ5) |
FileFormat.Lrzip |
WORM | Long Range Zip |
FileFormat.Lz4 |
WORM | LZ4 |
FileFormat.Lzfse |
WORM | LZFSE |
FileFormat.Lzg |
WORM | LZG |
FileFormat.Lzham |
WORM | LZHAM |
FileFormat.Lzip |
WORM | Lzip |
FileFormat.Lzma |
WORM | LZMA |
FileFormat.Lzop |
WORM | LZOP |
FileFormat.Lzs |
WORM | LZS |
FileFormat.Lzx |
WORM | LZX |
FileFormat.MacBinary |
WORM | MacBinary |
FileFormat.Mcm |
WORM | MCM |
FileFormat.PackBits |
WORM | PackBits |
FileFormat.Paq8 |
WORM | PAQ8 |
FileFormat.PowerPacker |
WORM | PowerPacker |
FileFormat.Ppmd |
WORM | PPMd |
FileFormat.QuickLz |
WORM | QuickLZ |
FileFormat.RefPack |
WORM | RefPack / QFS |
FileFormat.Rnc |
WORM | RNC ProPack |
FileFormat.Rzip |
WORM | Rzip |
FileFormat.Snappy |
WORM | Snappy |
FileFormat.Squeeze |
WORM | Squeeze |
FileFormat.Szdd |
WORM | SZDD |
FileFormat.UuEncoding |
WORM | UUEncoding |
FileFormat.Xz |
WORM | XZ |
FileFormat.YEnc |
WORM | yEnc |
FileFormat.Yaz0 |
WORM | Yaz0 |
FileFormat.Zlib |
WORM | Zlib |
FileFormat.Zling |
WORM | Zling |
FileFormat.Zstd |
WORM | Zstandard |
Archive containers (multi-file)
| Format | State | Display name |
|---|---|---|
FileFormat.Ace |
WORM | ACE |
FileFormat.AlZip |
WORM | ALZip |
FileFormat.AppleSingle |
R | AppleSingle |
FileFormat.Ar |
WORM | AR |
FileFormat.Arc |
WORM | ARC |
FileFormat.Arj |
WORM | ARJ |
FileFormat.Cab |
WORM | CAB |
FileFormat.Cbr |
WORM | CBR |
FileFormat.Cbz |
WORM | CBZ |
FileFormat.Chm |
WORM | CHM |
FileFormat.CompactPro |
WORM | Compact Pro |
FileFormat.Cpio |
WORM | CPIO |
FileFormat.DiskDoubler |
WORM | DiskDoubler |
FileFormat.Dms |
WORM | DMS |
FileFormat.Esd |
R | ESD |
FileFormat.FreeArc |
WORM | FreeArc |
FileFormat.Ha |
WORM | HA |
FileFormat.IffCdaf |
WORM | IFF CDAF |
FileFormat.Lbr |
WORM | LBR |
FileFormat.LhF |
WORM | LhF (LhFloppy) |
FileFormat.Lzh |
WORM | LZH |
FileFormat.PackDisk |
WORM | PackDisk (Amiga) |
FileFormat.PackIt |
WORM | PackIt |
FileFormat.Rar |
WORM | RAR |
FileFormat.Sar |
WORM | SAR |
FileFormat.SevenZip |
WORM | 7z |
FileFormat.Shar |
WORM | SHAR |
FileFormat.Spark |
WORM | Spark |
FileFormat.SplitFile |
WORM | Split File (.001) |
FileFormat.Sqx |
WORM | SQX |
FileFormat.StuffIt |
WORM | StuffIt |
FileFormat.StuffItX |
WORM | StuffIt X |
FileFormat.Swm |
R | Split WIM |
FileFormat.Tar |
WORM | TAR |
FileFormat.Uharc |
WORM | UHARC |
FileFormat.Wim |
WORM | WIM |
FileFormat.Wrapster |
WORM | Wrapster |
FileFormat.Xar |
WORM | XAR |
FileFormat.Zip |
WORM | ZIP |
FileFormat.Zoo |
WORM | ZOO |
FileFormat.Zpaq |
WORM | ZPAQ |
Software-package containers
| Format | State | Display name |
|---|---|---|
FileFormat.AndroidBundle |
R | Android App Bundle / split-APK |
FileFormat.AndroidOta |
R | Android OTA payload |
FileFormat.Apk |
WORM | APK |
FileFormat.ApkNativeLibs |
R | APK native libraries |
FileFormat.AppImage |
R | AppImage |
FileFormat.Appx |
WORM | APPX |
FileFormat.Crate |
R | Rust Crate |
FileFormat.Crx |
WORM | CRX (Chrome extension) |
FileFormat.Deb |
WORM | DEB |
FileFormat.Ear |
WORM | EAR |
FileFormat.Gem |
R | Ruby Gem |
FileFormat.InnoSetup |
WORM | Inno Setup |
FileFormat.Ipa |
WORM | IPA |
FileFormat.Jar |
WORM | JAR |
FileFormat.Msi |
WORM | MSI (OLE Compound File) |
FileFormat.Msix |
WORM | MSIX |
FileFormat.Nsis |
WORM | NSIS |
FileFormat.NuPkg |
WORM | NuPkg |
FileFormat.Rpm |
WORM | RPM |
FileFormat.Snap |
R | Snap package |
FileFormat.War |
WORM | WAR |
FileFormat.Wheel |
R | Python Wheel |
FileFormat.Xpi |
WORM | XPI (Mozilla extension) |
Office Open XML / OpenDocument / web archive zip-bundles
| Format | State | Display name |
|---|---|---|
FileFormat.Docx |
WORM | DOCX |
FileFormat.Xlsx |
WORM | XLSX |
FileFormat.Pptx |
WORM | PPTX |
FileFormat.Odt |
WORM | ODT |
FileFormat.Ods |
WORM | ODS |
FileFormat.Odp |
WORM | ODP |
FileFormat.Vsdx |
WORM | Visio Drawing |
FileFormat.Epub |
WORM | EPUB |
FileFormat.Kmz |
WORM | KMZ |
FileFormat.Maff |
WORM | MAFF |
FileFormat.Wacz |
R | WACZ |
FileFormat.Warc |
WORM | WARC |
FileFormat.Wbn |
R | Web Bundle |
Game / engine / install / runtime / Amiga / vintage long-tail formats
| Format | State | Display name |
|---|---|---|
FileFormat.Afs |
WORM | Sega AFS |
FileFormat.Ampk |
WORM | AMPK (Amiga Pack) |
FileFormat.Ba2 |
WORM | Bethesda Archive v2 |
FileFormat.Big |
WORM | BIG (Westwood / EA) |
FileFormat.Bsa |
WORM | BSA |
FileFormat.Dzip |
WORM | Bloodlines DZIP |
FileFormat.Gar |
WORM | Nintendo 3DS GAR |
FileFormat.Gob |
WORM | LucasArts GOB |
FileFormat.GodotPck |
WORM | Godot PCK |
FileFormat.Grp |
WORM | GRP (Build engine) |
FileFormat.Hog |
WORM | HOG (Descent) |
FileFormat.Hpi |
WORM | Total Annihilation HPI |
FileFormat.Lfd |
WORM | LucasArts LFD |
FileFormat.Mhk |
WORM | Cyan Mohawk |
FileFormat.Mix |
WORM | Westwood MIX |
FileFormat.Mpq |
WORM | MPQ (Blizzard) |
FileFormat.Narc |
WORM | Nintendo NARC |
FileFormat.Nds |
WORM | NDS (Nintendo DS ROM) |
FileFormat.Nsa |
WORM | NSA (NScripter) |
FileFormat.Pak |
WORM | PAK (Quake) |
FileFormat.Pbp |
WORM | PSP PBP archive |
FileFormat.Psarc |
WORM | PSARC (Sony) |
FileFormat.Rgss |
R | RPG Maker RGSSAD |
FileFormat.Rpa |
R | Ren'Py Archive |
FileFormat.Sarc |
WORM | Nintendo SARC |
FileFormat.Sfar |
R | BioWare SFAR (Mass Effect) |
FileFormat.Slf |
WORM | Sir-Tech SLF (Jagged Alliance) |
FileFormat.Swf |
WORM | SWF (Flash) |
FileFormat.Tfc |
WORM | Mass Effect TFC |
FileFormat.Tnef |
WORM | MS-TNEF (winmail.dat) |
FileFormat.U8 |
WORM | Nintendo U8 |
FileFormat.Umx |
WORM | Unreal Music (UMX) |
FileFormat.UnityBundle |
R | Unity Asset Bundle |
FileFormat.UnrealPak |
R | Unreal Pak |
FileFormat.Upx |
R | UPX-packed executable |
FileFormat.Vpk |
WORM | VPK (Steam) |
FileFormat.Vpp |
WORM | Volition Package (RF1) |
FileFormat.VppV2 |
WORM | Volition VPP v2 (Saint's Row 2) |
FileFormat.Wad |
WORM | WAD (Doom) |
FileFormat.Wad2 |
WORM | WAD2 / WAD3 (Quake) |
FileFormat.Ypf |
WORM | YukaScript YPF |
FileFormat.Zap |
WORM | ZAP (Amiga Disk Archiver) |
Detailed format reference
The tables below mirror the canonical "what does each format actually support" reference from
the source repo. Each row links to the upstream spec the implementation was validated against
plus a one-line note covering scope / limitations. WORM = can produce a fresh archive that
round-trips; - = read-only.
Archive containers (canonical)
| Format | Extensions | Read | Write | Reference | Notes |
|---|---|---|---|---|---|
| ZIP | .zip |
Yes | Yes | APPNOTE.TXT | Store, Deflate, Deflate64, Shrink, Reduce, Implode, BZip2, LZMA, PPMd, Zstd, AES |
| RAR | .rar |
Yes | Yes (v4/v5) | rarlab technote | v1-v5 decoders, solid, multi-volume, encryption, recovery |
| 7z | .7z |
Yes | Yes | 7-Zip format | LZMA/LZMA2, Deflate, BZip2, PPMd, BCJ/BCJ2, AES-256, multi-volume |
| TAR | .tar |
Yes | Yes | POSIX ustar | POSIX/GNU/PAX, multi-volume |
| CAB | .cab |
Yes | Yes | MS-CAB | MSZIP, LZX, Quantum |
| LZH/LHA | .lzh,.lha |
Yes | Yes | LHA archive format | lh0-lh7, lzs, lh1-lh3 (adaptive Huffman), pm0-pm2 |
| ARJ | .arj |
Yes | Yes | ARJ technical | Methods 0-4, garble encryption |
| ARC | .arc |
Yes | Yes | ARC format | Methods 0-9 (RLE, LZW, Squeeze, Huffman) |
| ZOO | .zoo |
Yes | Yes | zoo format | LZW, LZH |
| ACE | .ace |
Yes | Yes | ACE unofficial spec | ACE 1.0/2.0, solid, sound/picture filters, Blowfish, recovery |
| SQX | .sqx |
Yes | Yes | SQX disassembly | LZH, multimedia, audio, solid, AES-128, recovery |
| CPIO | .cpio |
Yes | Yes | cpio(5) | Binary, odc, newc, CRC |
| AR | .ar |
Yes | Yes | ar(5) | Unix archive |
| WIM | .wim |
Yes | Yes | Imagex WIM format | LZX, XPRESS |
| RPM | .rpm |
Yes | Yes | RPM spec | CPIO payload |
| DEB | .deb |
Yes | Yes | deb(5) | AR+TAR with gz/xz/zst/bz2 |
| Shar | .shar |
Yes | Yes | GNU sharutils | Shell archive |
| PAK | .pak |
Yes | Yes | PAK spec | ARC-compatible |
| HA | .ha |
Yes | Yes | HA specification | HSC/ASC arithmetic coding |
| ZPAQ | .zpaq |
Yes | Yes | ZPAQ spec PDF | Context mixing, journaling |
| StuffIt | .sit |
Yes | Yes | libxad sit.c | Multiple methods |
| StuffIt X | .sitx |
Yes | Yes | XADMaster StuffItX | Detection-only; WORM emits a valid StuffIt! envelope (proprietary element-stream writer not implemented) |
| SquashFS | .sqfs |
Yes | Yes | SquashFS 4.0 spec | Filesystem image |
| CramFS | .cramfs |
Yes | Yes | Linux fs/cramfs/ |
Filesystem image |
| NSIS | .exe |
Yes | Yes | NSIS wiki | Installer extraction + WORM emits overlay-only data (no PE stub) |
| Inno Setup | .exe |
Yes | Yes | innounp | Installer extraction + WORM emits signature header (no PE stub) |
| DMS | .dms |
Yes | Yes | xDMS source | Amiga disk archiver |
| LZX (Amiga) | .lzx |
Yes | Yes | Amiga LZX format | Amiga LZX |
| Compact Pro | .cpt |
Yes | Yes | XADMaster cpt.c | Classic Mac format |
| Spark | .spark |
Yes | Yes | RISC OS Spark | RISC OS format |
| LBR | .lbr |
Yes | Yes | CP/M LBR | CP/M format |
| UHARC | .uha |
Yes | Yes | UHARC docs | LZP compression |
| WAD (Doom) | .wad |
Yes | Yes | Doom Wiki WAD | Doom WAD format |
| WAD2/WAD3 | .wad |
Yes | Yes | Quake Wiki WAD | Quake/Half-Life texture archive |
| XAR | .xar |
Yes | Yes | XAR on-disk format | Apple .pkg (zlib TOC) |
| ALZip | .alz |
Yes | Yes | ALZ format | Korean archive (Deflate) |
| VPK | .vpk |
Yes | Yes | Valve VPK | Valve game archive |
| BSA | .bsa |
Yes | Yes | BSA format | Bethesda game archive (Morrowind / Oblivion / Skyrim) |
| BA2 | .ba2 |
Yes | Yes | BA2 (BTDX) | Bethesda Archive v2 (Fallout 4 / Skyrim SE), GNRL subtype only — Bob Jenkins lookup3 hash |
| MPQ | .mpq |
Yes | Yes | ZezulaMPQ docs | Blizzard — WORM v1 with stored entries, encrypted hash+block tables, self-referential (listfile) |
| GRP | .grp |
Yes | Yes | BUILD Engine docs | BUILD Engine (Duke Nukem 3D) |
| HOG | .hog |
Yes | Yes | Descent HOG | Descent game archive |
| BIG | .big |
Yes | Yes | EA BIG format | EA Games (C&C, FIFA) |
| Godot PCK | .pck |
Yes | Yes | Godot PCK spec | Godot Engine resource pack |
| WARC | .warc |
Yes | Yes | ISO 28500 | Web archive — WORM emits one resource record per input file |
| NDS | .nds |
Yes | Yes | GBATEK NDS | Nintendo DS ROM — WORM emits valid NitroFS (no ARM9/ARM7 boot code) |
| NSA | .nsa |
Yes | Yes | NScripter docs | NScripter — WORM writes stored entries (compression type 0) |
| SAR | .sar |
Yes | Yes | NScripter docs | NScripter — uncompressed variant of NSA |
| PackIt | .pit |
Yes | Yes | XADMaster packit.c | Classic Mac format — WORM emits stored entries |
| DiskDoubler | .dd |
Yes | Yes | XADMaster DD | Classic Mac compression — WORM stores data fork (method 0) |
| MSI | .msi |
Yes | Yes | MS-CFB | OLE Compound File — WORM produces a CFB envelope (not a functional Installer DB) |
.pdf |
Yes | Yes | ISO 32000 | Image extraction + WORM via file attachments (EmbeddedFiles) — any file type round-trips | |
| TNEF | .tnef,.dat |
Yes | Yes | MS-OXTNEF | Outlook winmail.dat |
| Split File | .001 |
Yes | Yes | — | Multi-part file joining/splitting |
| FreeArc | .arc |
Yes | Yes | FreeArc source | FreeArc archive |
| CHM | .chm |
Yes | Yes | CHM file format | MS Compiled HTML Help — WORM stores files in section 0 (uncompressed); LZX compression available via options |
| Wrapster | - | Yes | Yes | XADMaster wrapster.c | MP3 wrapper archive |
| LhF | .lhf |
Yes | Yes | XADMaster | Amiga LhFloppy disk (LZH-compressed tracks) |
| ZAP | .zap |
Yes | Yes | XADMaster | Amiga disk archiver — WORM writes stored tracks |
| PackDisk | .pdsk |
Yes | Yes | XADMaster | Amiga PackDisk — WORM writes stored tracks. Same writer covers DCS / xDisk / xMash via different magics. |
| AMPK | - | Yes | Yes | XADMaster | Amiga AMPK — WORM emits stored entries |
| IFF-CDAF | - | Yes | Yes | IFF spec | IFF-CDAF archive — WORM emits stored entries |
| UMX | .umx |
Yes | Yes | Beyond Unreal wiki | Unreal package — WORM emits valid header (detection-only) |
| PSARC | .psarc |
Yes | Yes | PSARC spec | Sony PlayStation archive (PS3/PS4/Vita) — zlib block compression (LZMA / encrypted-TOC rejected) |
| MIX | .mix |
Yes | Yes | XCC / OpenRA | Westwood C&C / Red Alert 1 — hash-keyed, names not stored; reader synthesizes <HEX>.bin |
| VPP | .vpp |
Yes | Yes | Volition file format wiki | Volition Package v1 (Red Faction 1 / Summoner) — 2048-byte aligned |
| PBP | .pbp |
Yes | Yes | PSP PBP layout | PlayStation Portable EBOOT — 8 fixed sections (PARAM.SFO / ICON0.PNG / DATA.PSP / DATA.PSAR …) |
| GOB | .gob,.goo |
Yes | Yes | Lucasarts GOB | LucasArts Jedi Knight / Outlaws — TOC-at-end, version 0x14 / 0x20 |
| LFD | .lfd |
Yes | Yes | LFD resource format | LucasArts X-Wing / TIE Fighter — 4-char Type + 8-char Name; auto-emits valid RMAP index |
| PFS0 | .nsp,.pfs0 |
Yes | Yes | Switchbrew PFS0 | Nintendo Switch PartitionFS / NSP package — alphabetically sorted; rejects HFS0 sibling |
| SLF | .slf |
Yes | Yes | JA2-Stracciatella SLF | Sir-Tech library (Jagged Alliance 2) — 532-byte header / 280-byte entries; tombstoned (state=0xFF) entries skipped |
| HPI | .hpi,.ufo,.ccx,.gp3 |
Yes | Yes | TA HPI format | Total Annihilation HAPI — zlib subset only (encrypted HeaderKey≠0 + LZ77 chunks rejected); 64KB SQSH framing |
| SARC | .sarc,.pack,.bars |
Yes | Yes | 3DBrew SARC | Nintendo Sorted Archive (Wii U / 3DS / Switch) — endian-aware reads (BOM); LE writes; hash-sorted with key 0x65 |
| AFS | .afs |
Yes | Yes | AFS format wiki | Sega Athena Filesystem (Dreamcast / PS2 / GameCube) — optional metadata block; 0x800 alignment |
| NARC | .narc,.carc |
Yes | Yes | GBATEK NARC | Nintendo DS Archive Resource Compound — flat BTNF tree; BTAF + BTNF + GMIF |
| SFAR | .sfar |
Yes | - | ME3Tweaks SFAR docs | BioWare Mass Effect 3 DLC — 5-byte LE integers; SHA-1 path hashes; LZX blocks not yet decompressed |
| PSF | .psf,.minipsf,.ssf,.dsf,.gsf,.usf,.2sf,.ncsf,.snsf,.qsf |
Yes | Yes | PSF spec (Corlett) | Portable Sound Format — chiptune container (zlib program + tag block); pseudo-archive entries: header.bin / reserved.bin / program.bin / tags.txt |
| MHK | .mhk |
Yes | Yes | ScummVM Mohawk | Cyan Mohawk archive (Myst Masterpiece / Riven / Cosmic Osmo / Living Books) — outer MHWK + inner RSRC (big-endian) |
| YPF | .ypf |
Yes | Yes | crass tools | YukaScript engine archive (Yu-No, Iyashi VN engine) — v480 only; raw ASCII names (engine obfuscation skipped) |
| U8 | .u8,.arc |
Yes | Yes | U8 archive notes | Nintendo Wii / Wii U / 3DS archive — big-endian, 3-byte name offset, parent/end-index directory tree |
| AKB | .akb |
Yes | Yes | vgmstream AKB | Square Enix audio bank — raw audio bytes surfaced (no codec decode), metadata.ini carries header info |
| AWB / AFS2 | .awb,.acb |
Yes | Yes | VGMToolbox AFS2 | CRI Audio Wave Bank — endian-agnostic offset width; alignment-aware (default 0x20); raw bytes per cue ID |
| Web Bundle | .wbn |
Yes | - | draft-yasskin-wpack-bundled-exchanges | Bundled HTTP Exchanges — pseudo-archive (FULL.wbn + metadata.ini); minimal CBOR walker (no full decode) |
| LRZIP | .lrz |
Yes | Yes | Long Range Zip | Single-stream LZMA wrapper (LZO/BZIP2/GZIP/ZPAQ subtypes rejected); 5-byte LZMA preamble + raw bounded stream |
| GAR | .gar |
Yes | Yes | 3DBrew GAR | Nintendo 3DS Generic Asset Resource — type-grouped layout where files sharing an extension share a type entry |
| ARSC | .arsc |
Yes | - | AOSP ResourceTypes.h | Android compiled resource table (inside APK); pseudo-archive with package + string-pool counts; tolerant chunk walker |
ZIP-derived containers
All delegate to the ZIP reader/writer. WORM (Yes) means a fresh container can be produced
with the correct internal layout for that flavour.
| Format | Extensions | Read | Write | Reference | Notes |
|---|---|---|---|---|---|
| JAR | .jar |
Yes | Yes | JAR spec | Java archive |
| WAR | .war |
Yes | Yes | Java EE WAR | Java web archive |
| EAR | .ear |
Yes | Yes | Java EE EAR | Java enterprise archive |
| APK | .apk |
Yes | Yes | Android APK | Android package |
| IPA | .ipa |
Yes | Yes | Apple IPA bundle | iOS package |
| APPX | .appx,.msix |
Yes | Yes | MS-APPXPKG | Windows package |
| XPI | .xpi |
Yes | Yes | Mozilla XPI | Firefox extension |
| CRX | .crx |
Yes | Yes | Chrome CRX3 | Chrome extension — WORM emits unsigned CRX3 envelope (browser rejects signature) |
| EPUB | .epub |
Yes | Yes | EPUB 3 spec | eBook |
| MAFF | .maff |
Yes | Yes | MAFF spec | Mozilla Archive Format |
| KMZ | .kmz |
Yes | Yes | KML spec | Google Earth |
| NuPkg | .nupkg |
Yes | Yes | NuGet spec | NuGet package |
| DOCX | .docx |
Yes | Yes | ECMA-376 | OOXML Word |
| XLSX | .xlsx |
Yes | Yes | ECMA-376 | OOXML Excel |
| PPTX | .pptx |
Yes | Yes | ECMA-376 | OOXML PowerPoint |
| ODT | .odt |
Yes | Yes | OASIS ODF | OpenDocument Text |
| ODS | .ods |
Yes | Yes | OASIS ODF | OpenDocument Spreadsheet |
| ODP | .odp |
Yes | Yes | OASIS ODF | OpenDocument Presentation |
| CBZ | .cbz |
Yes | Yes | Comic book archive | Comic book ZIP |
| CBR | .cbr |
Yes | Yes | Comic book archive | Comic book RAR — delegates to RarWriter |
| XPS / OXPS | .xps,.oxps |
Yes | Yes | ECMA-388 OpenXPS | Microsoft / OpenXPS OPC PDF alternative |
| VSDX | .vsdx,.vstx |
Yes | Yes | Visio file formats | Microsoft Visio modern (drawing / template / stencil ± macro) |
OLE2 Compound File variants
Microsoft binary-office formats built on the OLE2 / Compound File Binary (CFB) container. WORM creation produces a structurally-valid CFB envelope (round-trips through our reader and other permissive CFB tools like libgsf / Apache POI) but is not a real Word/Excel/PowerPoint/Outlook document — those require generating each application's internal binary stream layout, which is out of scope. Limitations: ~6.8 MB total file size (109 FAT sectors, no DIFAT chain), single root storage, stream names ≤ 31 UTF-16 chars.
| Format | Extensions | Read | Write | Reference | Notes |
|---|---|---|---|---|---|
| DOC | .doc |
Yes | Yes | MS-DOC | Word 97-2003 (CFB envelope, not a real Word document) |
| XLS | .xls |
Yes | Yes | MS-XLS | Excel 97-2003 (CFB envelope, not a real workbook) |
| PPT | .ppt |
Yes | Yes | MS-PPT | PowerPoint 97-2003 (CFB envelope, not a real presentation) |
| MSG | .msg |
Yes | Yes | MS-OXMSG | Outlook message (CFB envelope, not real MAPI properties) |
| Thumbs.db | Thumbs.db |
Yes | Yes | Forensics docs | Windows thumbnail cache (CFB envelope, not real Catalog layout) |
| MSI | .msi |
Yes | Yes | MS-MSI | Windows Installer (CFB envelope, not a functional Installer DB) |
Compression-stream formats (single-file codecs)
| Format | Extensions | Compress | Decompress | Reference |
|---|---|---|---|---|
| Gzip | .gz |
Yes | Yes | RFC 1952 |
| BZip2 | .bz2 |
Yes | Yes | bzip2 source |
| XZ | .xz |
Yes | Yes | XZ format |
| Zstandard | .zst |
Yes | Yes | RFC 8878 |
| LZ4 | .lz4 |
Yes | Yes | LZ4 frame format |
| Brotli | .br |
Yes | Yes | RFC 7932 |
| Snappy | .sz,.snappy |
Yes | Yes | Snappy framing |
| LZOP | .lzo |
Yes | Yes | lzop source |
| compress (.Z) | .Z |
Yes | Yes | ncompress |
| LZMA | .lzma |
Yes | Yes | 7-Zip LZMA SDK |
| Lzip | .lz |
Yes | Yes | lzip format |
| Zlib | .zlib |
Yes | Yes | RFC 1950 |
| SZDD | .sz_ |
Yes | Yes | compress.exe format |
| KWAJ | - | Yes | Yes | MS compress formats |
| RZIP | .rz |
Yes | Yes | rzip docs |
| MacBinary | .bin |
Yes | Yes | RFC 1740 |
| BinHex | .hqx |
Yes | Yes | RFC 1741 |
| Squeeze | .sqz |
Yes | Yes | Squeeze format |
| PowerPacker | .pp |
Yes | Yes | Amiga PP20 |
| ICE Packer | .ice |
Yes | Yes | Atari ST ICE |
| PackBits | .packbits |
Yes | Yes | Apple PackBits |
| Yaz0 (SZS) | .yaz0,.szs |
Yes | Yes | Nintendo Yaz0 RE |
| BriefLZ | .blz |
Yes | Yes | BriefLZ source |
| RNC | .rnc |
Yes | Yes | Rob Northen RE |
| RefPack / QFS | .qfs,.refpack |
Yes | Yes | RefPack RE |
| aPLib | .aplib |
Yes | Yes | aPLib docs |
| LZFSE | .lzfse |
Yes | Yes | Apple LZFSE source |
| Freeze | .f,.freeze |
Yes | Yes | Unix Freeze |
| uuencoding | .uu,.uue |
Yes | Yes | POSIX uuencode |
| yEnc | .yenc |
Yes | Yes | yEnc spec |
| Density | .density |
Yes | Yes | Density source |
| LZG | .lzg |
Yes | Yes | LZG source |
| BCM | .bcm |
Yes | Yes | BCM source |
| BSC | .bsc |
Yes | Yes | libbsc |
| BALZ | .balz |
Yes | Yes | BALZ source |
| CSC | .csc |
Yes | Yes | CSC source |
| Zling | .zling |
Yes | Yes | libzling |
| Lizard | .lizard |
Yes | Yes | Lizard source |
| QuickLZ | .quicklz |
Yes | Yes | QuickLZ docs |
| cmix | .cmix |
Yes | Yes | cmix source |
| MCM | .mcm |
Yes | Yes | MCM source |
| PAQ8 | .paq8 |
Yes | Yes | Matt Mahoney PAQ page |
| SWF | .swf |
Yes | Yes | SWF 19 spec |
| CP/M Crunch | .cru |
Yes | Yes | CP/M CRUNCH |
| PPMd | .pmd |
Yes | Yes | Shkarin PPMd |
| LZHAM | .lzham |
Yes | Yes | LZHAM source |
| LZS | .lzs |
Yes | Yes | RFC 1967 / RFC 2395 |
Compound formats
tar.gz, tar.bz2, tar.xz, tar.zst, tar.lz4, tar.lz, tar.br — auto-detected on
read; matching writer composes the inner TAR with the outer compression stream.
Pseudo-archive containers
Formats whose binary structure already addresses N independent payloads, even though they're
not traditionally seen as archives. Each surfaces an IArchiveFormatOperations.List with one
entry per inner payload (resource / icon / font / glyph / message / segment / track …).
| Container | State | Description |
|---|---|---|
FileFormat.PeResources |
R | PE/COFF .rsrc directory — one entry per RT_* resource, .ico/.bmp/.xml/.txt |
FileFormat.ResourceDll |
WORM | Pure-resource DLL — same surface as PeResources but can also synthesise a fresh DLL |
FileFormat.ExePackers |
R | Demoscene + classic DOS / PE packer detection (PKLITE / LZEXE / Petite / FSG / MEW / MPRESS / Crinkler / kkrunchy / ASPack / NsPack / Yoda / ASProtect / Themida / VMProtect …) — surfaces a metadata.ini evidence record |
FileFormat.Ico |
WORM | ICO / CUR — one .png / .bmp per ICONDIRENTRY |
FileFormat.Ani |
R | Animated cursor — one .cur per frame |
FileFormat.FontCollection |
R | TTC / OTC — one .ttf / .otf per member font; per-glyph .svg for single fonts |
FileFormat.Gettext |
R | gettext .mo / .po — one .txt per msgid / msgstr pair |
Streaming / video / subtitle containers
Multi-track / multi-segment containers from the streaming and broadcast world. Each demuxes into per-track or per-segment archive entries.
| Container | State | Description |
|---|---|---|
FileFormat.Mp4 |
R | MP4 / MOV / Apple QuickTime — atom walker; tracks → H.264 Annex-B + AAC ADTS |
FileFormat.Matroska |
R | MKV / WebM — EBML walker; tracks + attachments + chapters |
FileFormat.Avi |
R | AVI RIFF — LIST/movi per-stream demuxer |
FileFormat.MpegTs |
R | MPEG-2 Transport Stream (.ts / .m2ts / .mts) — per-PID elementary streams |
FileFormat.Sup |
R | Blu-ray PGS subtitle — segments grouped by epoch |
FileFormat.VobSub |
R | DVD VobSub .idx + .sub pair — per-entry slices of the sibling .sub PES stream |
FileFormat.M3u8 |
R | HLS playlist — one entry per segment + per-variant metadata |
Scientific / ML data containers
| Container | State | Reference | Notes |
|---|---|---|---|
FileFormat.Numpy |
R | NEP 1 / npy-format | NumPy .npy (single ndarray) and .npz (ZIP of NPYs); header parser surfaces shape / dtype / fortran-order metadata |
FileFormat.Hdf4 |
R | HDF4 reference | HDF4 DD linked-list walker; per-DD entry with tag histogram |
FileFormat.Hdf5 |
R | HDF5 file format spec | HDF5 superblock + group walk; pseudo-archive surface for now |
FileFormat.Nifti |
R | NIfTI spec | Medical imaging (MRI); 352-byte v1 / 540-byte v2 header + voxel data; transparent gzip |
FileFormat.Onnx |
R | ONNX proto | Pure-C# protobuf reader; surfaces graph initializers as entries |
FileFormat.Dicom |
R | NEMA DICOM PS3 | Medical imaging (CT / MRI / X-ray); single DICOM image + DICOMDIR multi-study patient/series index |
CAD / 3D scene formats
| Container | State | Reference | Notes |
|---|---|---|---|
FileFormat.Stl |
R | STL spec | ASCII + binary; triangle count, bounding box, name |
FileFormat.Ply |
R | Stanford PLY | ASCII / binary LE/BE, element schema |
FileFormat.Dxf |
R | Autodesk DXF ref | AutoCAD ASCII; section list + entity histogram |
FileFormat.Collada |
R | Khronos Collada 1.5 | XML 3D interchange |
FileFormat.Obj |
R | Wavefront OBJ | Wavefront mesh; ASCII triangles + materials |
Executable packer detection
FileFormat.ExePackers is a pseudo-archive that detects-and-surfaces evidence about
executable packers / PE protectors. Each detected packer produces a metadata.ini (signature
offset, version byte, packer-header fields) plus a packed_payload.bin (or in-process
decompressed body for UPX). The detector handles: PKLITE / LZEXE / Petite / Shrinkler / FSG /
MEW / MPRESS / Crinkler / kkrunchy / ASPack / NsPack / Yoda's Crypter / ASProtect / Themida /
VMProtect.
UPX gets its own descriptor (FileFormat.Upx) with a hardened detection pipeline (BSS-style
first-section + RWX flags + entry-in-last-section + payload-entropy fingerprint that catches
binaries with the UPX! magic wiped) and an in-process decompressor for NRV2B / NRV2D /
NRV2E (LE32 + LE16 + LE8 variants) and LZMA payloads via the BB_Nrv2{b,d,e} and BB_Lzma
building blocks. PE header reconstruction (IAT / OEP) is delegated to the original upx -d.
Known limitations
Code paths that throw NotSupportedException or NotImplementedException rather than
silently producing wrong output:
| Area | State |
|---|---|
| LZFSE V1 / V2 blocks | FSE/tANS backend not implemented — uncompressed (bvxn) + LZVN blocks work. Full LZFSE needs ~1500 LOC new code |
| ZPAQ | Reader requires a ZPAQL virtual machine (not implemented). Multi-week bytecode-VM project |
| StuffIt X writer | Proprietary element-catalog / P2-varint writer not implemented — WORM emits valid StuffIt! envelope shell. No public spec |
| UMX writer | Full export table + compact-index music encoding not implemented — WORM emits valid header only |
| OLE2 application streams (DOC/XLS/PPT/MSG/ThumbsDb/MSI) | CFB envelope round-trips through our reader and libgsf/Apache POI, but the internal WordDocument / WorkBook / PowerPoint Document / MAPI / Catalog / Installer-DB streams are not synthesised |
| Inno Setup reader | Individual file extraction from Setup.1 not implemented for some installer versions |
| RAR create | Only v4 and v5 archive creation are implemented |
Modern packaging (read-only)
| Format | Extensions | Read | Write | Reference | Notes |
|---|---|---|---|---|---|
| AppImage | .AppImage |
Yes | - | AppImage spec | ELF stub + appended SquashFS; offset located by ELF section-end + magic scan |
| Snap | .snap |
Yes | - | snapd source | SquashFS with meta/snap.yaml |
| MSIX | .msix,.msixbundle |
Yes | Yes | MSIX spec | Modern Windows app package (mirrors APPX); WORM emits unsigned bundle |
| ESD | .esd |
Yes | - | WIM/ESD overview | Windows Update encrypted-LZMS WIM; shares MSWIM\0\0\0 magic, extension-only |
| Split WIM | .swm,.swmN |
Yes | - | WIM spec | Multi-part WIM volume |
| WACZ | .wacz |
Yes | - | WACZ 1.0.0 | Web Archive Collection Zipped — ZIP around WARC + datapackage.json |
| Python Wheel | .whl |
Yes | - | PEP 427 | ZIP with dist-info/METADATA, WHEEL, RECORD |
| Ruby Gem | .gem |
Yes | - | gem spec | TAR with metadata.gz, data.tar.gz, checksums.yaml.gz |
| Rust Crate | .crate |
Yes | - | cargo spec | TAR.GZ with single name-version/ directory containing Cargo.toml |
Versioning
Version-locked 1:1 with Hawkynt.Compression.Core. Pin both at the same version.
License
LGPL-3.0-or-later. See the source repository for the full license text.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Hawkynt.Compression.Core (>= 1.0.0.89)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.