Repository navigation
Releases
Releases · ValveResourceFormat/ValvePak
7.2.0
Immutable
release. Only release title and notes can be modified.
- Entry paths are normalized like the engine does it:
\is a separator, ASCII letters are lowercased, and./..are resolved. Invalid names are rejected. Package.Open,OpenEntryStream(read nested VPKs in place) andVerify(all checks in one call, with progress and cancellation).RemoveDirectoryandRenameDirectory.- Write back over the read file, including a
_dir.vpk, or repack into new chunk files withWrite(path, repack: true). - Path helpers (
TryParseEntryPath,NormalizeDirectoryPath,PathComparer) and chunk file helpers (GetChunkFilePath,TryParseChunkFilePath,OpenArchiveStream). - Writing refuses to overwrite the package's own chunk files.
FindEntryno longer allocates, the library no longer uses LINQ, and writing and verifying allocate less.
7.1.0
Immutable
release. Only release title and notes can be modified.
- Edit packages that were read, including ones with chunk files, and write them back over the original files. Either every file is replaced or none is.
- Add
Write(path, repack: true), which rewrites chunk files without the data of removed files. - Add
RenameFileandIsSigned, and add progress reporting toVerifyHashes. - Lowercase and normalize added paths, and normalize paths in
FindEntry. - Change the default chunk size to 100 MiB.
- Throw after
Disposeand on malformed packages.
7.0.0
Immutable
release. Only release title and notes can be modified.
- Breaking: call
SetFileName("pak01_dir.vpk")beforeAddFile(..., multiChunk: true). Multi-chunk files are now written to disk when added, so packages of any size can be created, andWritemust go to that same path. - Breaking: a package can only be read once.
- Breaking: streams from
GetMemoryMappedStreamIfPossibleonly work while the package is open. - Added
AddFile(string, Stream, bool). Write(Stream)works with non-seekable streams and multi-chunk packages.- Reading entries is thread-safe and much faster.
- Packages can be read and written at non-zero stream positions.
- Malformed packages throw
InvalidDataExceptionorEndOfStreamExceptioninstead of returning bad data.
6.0.0
Immutable
release. Only release title and notes can be modified.
- Breaking: namespace changed to
ValvePak. - Added support for writing split packages:
AddFile(..., multiChunk: true)writes files into numbered chunk files next to the directory file. Chunk size is controlled byWriteChunkSize(200 MiB default). Write(Stream)now throws for packages containing multi-chunk files; useWrite(string)instead.Writenow throws if the directory file would exceed 2 GiB or a chunk file would exceed 4 GiB.
5.0.2
Immutable
release. Only release title and notes can be modified.
- Now targets .NET 10.
Versionis now settable to allow writing v1 vpks.- Added support for the new VPK signature format (as used by CS2): new
ESignatureTypeenum andPackage.SignatureTypeproperty, with verification viaRSA.VerifyData. - Updated Blake3, which is now a fully managed implementation.
- Hardened VPK write hashing to use
Stream.ReadExactly.
4.0.0
Immutable
release. Only release title and notes can be modified.
- Renamed
ArchiveMD5EntriestoAccessPackFileHashes - Added support for Blake3 chunk hashes
- Added an overload
FindEntry(ReadOnlySpan<char> filePath)- Unlike the
FindEntry(string)version, this one does not normalize the directory path separator.
- Unlike the
3.0.3
Immutable
release. Only release title and notes can be modified.
- Enabled
IsAotCompatibleandNullable
2.0.1
Full Changelog: 2.0.0...2.0.1
- Do not require
_dirsuffix in chunked vpks - Removed
System.Security.Cryptography.Algorithms - Added
ContinuousIntegrationBuild
2.0.0
Full Changelog: 1.8.0...2.0.0
- .NET 8.0 is now required
- Removed
FindEntryoverloads - Reduced allocations in
FindEntry - Updated logo
1.8.0
Full Changelog: 1.7.0...1.8.0
GetMemoryMappedStreamIfPossiblewill read files smaller or equal to 4096 bytes into memory instead of memory mapping.GetMemoryMappedStreamIfPossiblenow supports memory mapping files in non-split packages if the package was read from aFileStreamor when usingRead(file path).- CRC32 is now calculated with
System.IO.Hashing