Hawkynt.FileFormats.Archives
1.0.0.583
See the version list below for details.
dotnet add package Hawkynt.FileFormats.Archives --version 1.0.0.583
NuGet\Install-Package Hawkynt.FileFormats.Archives -Version 1.0.0.583
<PackageReference Include="Hawkynt.FileFormats.Archives" Version="1.0.0.583" />
<PackageVersion Include="Hawkynt.FileFormats.Archives" Version="1.0.0.583" />
<PackageReference Include="Hawkynt.FileFormats.Archives" />
paket add Hawkynt.FileFormats.Archives --version 1.0.0.583
#r "nuget: Hawkynt.FileFormats.Archives, 1.0.0.583"
#:package Hawkynt.FileFormats.Archives@1.0.0.583
#addin nuget:?package=Hawkynt.FileFormats.Archives&version=1.0.0.583
#tool nuget:?package=Hawkynt.FileFormats.Archives&version=1.0.0.583
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 |
WORM | AppImage |
FileFormat.Appx |
WORM | APPX |
FileFormat.Crate |
WORM | 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 |
WORM | RPG Maker RGSSAD |
FileFormat.Rpa |
WORM | 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) |
Backup-software disk images
Whole-system / partition backups from consumer + enterprise backup suites. Several were reverse-engineered directly from vendor binaries (no published spec) — the descriptor for each one names exactly which fields are decoded versus documented-TODO. R/W formats survive their own round-trip; WORM formats can produce a fresh image that the same reader walks back.
| Format | State | Display name |
|---|---|---|
FileFormat.Acronis |
R | Acronis True Image — classic .tib (FileMeta chain walk + InputItem attribute stream — filename + 4 FILETIMEs + DOS attrs) |
FileFormat.AcronisTibx |
R | Acronis True Image — modern .tibx (Stage-2 page-frame walk + LSM sub-header) |
FileFormat.Aomei |
WORM | AOMEI Backupper .adi / .afi (BIFH/BIFT + BR_STANDARD_HEADER envelope + 5 INDEX_TYPE_* + 13 INFO_TYPE_* + BR_IMAGE_INDEX layout) |
FileFormat.AppleSparse |
R | Apple sparseimage + sparsebundle (Time Machine / hdiutil) |
FileFormat.Bkf |
R | Microsoft NTBackup .bkf (MTF Tape Format) |
FileFormat.EaseUs |
R | EaseUS Todo Backup .pbd (R/O chunk stream) |
FileFormat.Ghost |
R/W | Norton Ghost — modern 3.0 → 11.x (Fast LZ Z1 + zlib + CRC-16 cipher, in-place append via GhostInPlaceModifier) + pre-3.0 Ghost 1.x/2.x R/O Stage-1 (FE EF head + head-type byte) |
FileFormat.Macrium |
WORM | Macrium Reflect X .mrimgx/.mrbakx (open spec) + Reflect pre-X 7/8 .mrimg/.mrbak/.mrex/.mrsql R/O Stage-1 |
FileFormat.Paragon |
WORM | Paragon Backup & Recovery .pbf (CWBP write-once) |
FileFormat.Partclone |
R | Clonezilla partclone (.img partition clone) |
FileFormat.Veeam |
R | Veeam B&R .vbk / .vib / .vrb (Stage-1 OibSummary trailer only) |
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.
Backup-software disk images
Whole-system / partition backups from consumer + enterprise backup suites. Closed-source
formats were elevated from Stage-0 detection-only via direct binary reverse engineering of
publicly-distributed vendor binaries; each descriptor's Description field names exactly
which fields are decoded against the binary versus documented-TODO. R/W = our writer +
reader round-trip; WORM = our writer emits a fresh image our reader walks back, but vendor
byte-compat stays explicitly out of scope (no real vendor samples available for clean-room
validation, or vendor tooling is restore-only).
| Container | State | Reference | Notes |
|---|---|---|---|
FileFormat.Bkf |
R | MS-MTF | NTBackup MTF Tape Format; DBLK-chain walker, FILE + DATA entry types, TAPE magic at offset 0 |
FileFormat.AppleSparse |
R | hdiutil(1) + Time Machine band layout | sparseimage band-allocation table + sparsebundle band fan-out; inner HFS+ / APFS delegated |
FileFormat.Partclone |
R | Clonezilla partclone source | image_head + fs_info + bitmap → sector reconstruction; per-FS family backed by the matching FS reader |
FileFormat.Ghost |
R/W | Reverse-engineered from Symantec Ghost Explorer 2003 + Ghost 1.6 / 2.0 GHOST.EXE (archive.org) | Modern 3.0 → 11.x with Fast LZ Z1 + zlib Z3-Z9 codecs + CRC-16 stream cipher; GhostInPlaceModifier provides TRUE in-place R/W via the record stream — Add overwrites the trailing end-of-image record and re-emits it at the new EOF (untouched bytes [0, original-end-offset) stay byte-identical), Replace + Remove append CWB GHO1-magic annotation tombstones (record type 0x00FE) that the reader honours via latest-write-wins; legacy rebuild-based GhostModifier still provided for forensic-delete callers; pre-3.0 DOS-era Ghost 1.x / 2.x R/O Stage-1 via FE EF head + head-type byte (1=disk / 2=partition / 3=boot) |
FileFormat.Macrium |
WORM | Macrium mrimgx file layout (MIT) + Reflect Free v8.0.7783 binary RE | Reflect X .mrimgx/.mrbakx per the open spec — AES-CBC + PBKDF2-HMAC-SHA256 600k-iter + ESSIV-style per-block IV + zstd; Reflect pre-X 7/8 .mrimg/.mrbak/.mrex/.mrsql R/O Stage-1; ModifyRebuilder provides rebuild-based add/remove as a CLI/UI wrapper helper — the format itself stays WORM |
FileFormat.Acronis |
R | Reverse-engineered from ti_tools.dll (ATI 2018 32-bit) and dennisss's prior framing |
Classic .tib — Listing → RecordIndex chain walk via MetaOffset anchors; FileMeta 102/1/2/5 body decoded as InputItem attribute stream (uint32 count + N tuples + bit-23 dedup flag); ItemCommon 0x10 surfaces filenames + altnames + DOS attrs + 4× FILETIME (creation/write/access/change); typed decoders for Replica 0x17, ItemCommonExtra 0x18, SliceItem 0x80, SliceItemBlob 0x90; ACL handler documented-TODO |
FileFormat.AcronisTibx |
R | Reverse-engineered from libarchive3.so (ATI 2021 Linux ELF) + archive3.dll (ATI 2018 Windows) |
Modern .tibx — Stage-2 page-frame walk: "ARCH" magic, 4096-byte page-zero header, 8-byte typed-page preamble (sentinel + page-type tag + BE32 CRC + content magic) + LSM sub-header (version / encoding / count / len / zlen / seq / ctree-id); per-page-type histogram + pages.tsv synthetic entry; Golomb-coded LSM record stream (file-listing extraction) is documented-TODO |
FileFormat.Aomei |
WORM | Reverse-engineered from AOMEI Backupper Standard binaries (Binary Research d:\work\br\src\imgfile, codename BRCloudv2) |
.adi / .afi via BIFH (0x65C) head + BIFT (0x674) tail envelope; 5 INDEX_TYPE_* (ROOT 0x200 / VOLUME 0x201 / DATABLOCK 0x202 / DIRTREE 0x300 / DATAAREA 0x301) + 13 INFO_TYPE_* (incl. DISK_INFO / VOLUME_INFO / IMAGE_SPLIT_SIZE / IMAGE_COMMENT / BACKUP_TIME / BACKUP_OPTION / FLB_PATH_LIST / FLB_BACKUP_OPTION) + BR_IMAGE_INDEX layout (EntryCount @ +0x14, EntrySize @ +0x18, VDB entry sizeof 0x20); vendor BR_STANDARD_HEADER is 16 bytes (Type+Size+CRC+Reserved) — our writer's 12-byte alias rounds-trips our own reader but is not vendor byte-compat; VDB field byte-offsets + AES variant + IV derivation documented-TODO |
FileFormat.Paragon |
WORM | Reverse-engineered from Paragon Hard Disk Manager 18 | .pbf — vendor-literal PImg magic + Major 0x0002 / FormatVersion 0x0003 prefix; CWBP write-once chunk-offset table + per-chunk zlib + Adler-32; HDM 16+ is restore-only so no byte-compat |
FileFormat.Veeam |
R | Synacktiv Velociraptor artifact | .vbk / .vib / .vrb — Stage-1 trailing <OibSummary> plaintext XML island only; chunked compressed block layer has no published spec (CBT chain + dedup pool + AES-256 gated) |
FileFormat.EaseUs |
R | Reverse-engineered from EaseUS Todo Backup + Rune-Server thread 694189 | .pbd — IMGF / FIMG magic; zlib chunk stream extracted via linear-scan + trial-inflate; full container chain replay is documented-TODO |
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 | Yes | AppImage spec | ELF stub + appended SquashFS; offset located by ELF section-end + magic scan; WORM via ELF stub + SquashFsWriter delegate |
| 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 | Yes | cargo spec | TAR.GZ with single name-version/ directory containing Cargo.toml; WORM auto-derives <name-version>/ from supplied manifest |
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.583)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.