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
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Hawkynt.FileFormats.Archives" Version="1.0.0.89" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Hawkynt.FileFormats.Archives" Version="1.0.0.89" />
                    
Directory.Packages.props
<PackageReference Include="Hawkynt.FileFormats.Archives" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Hawkynt.FileFormats.Archives --version 1.0.0.89
                    
#r "nuget: Hawkynt.FileFormats.Archives, 1.0.0.89"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Hawkynt.FileFormats.Archives@1.0.0.89
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Hawkynt.FileFormats.Archives&version=1.0.0.89
                    
Install as a Cake Addin
#tool nuget:?package=Hawkynt.FileFormats.Archives&version=1.0.0.89
                    
Install as a Cake Tool

Hawkynt.FileFormats.Archives

NuGet License

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 of Hawkynt.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.ZipArchive does 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 .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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0.89 98 5/7/2026
1.0.0.88 89 5/6/2026
1.0.0.87 96 5/5/2026