Unpaker 1.1.0
dotnet add package Unpaker --version 1.1.0
NuGet\Install-Package Unpaker -Version 1.1.0
<PackageReference Include="Unpaker" Version="1.1.0" />
<PackageVersion Include="Unpaker" Version="1.1.0" />
<PackageReference Include="Unpaker" />
paket add Unpaker --version 1.1.0
#r "nuget: Unpaker, 1.1.0"
#:package Unpaker@1.1.0
#addin nuget:?package=Unpaker&version=1.1.0
#tool nuget:?package=Unpaker&version=1.1.0
Unpaker
A comprehensive C# library and desktop application for reading and writing Unreal Engine 4 Pak archive files, compatible with GTA:III, GTA:VC, and GTA:SA Definitive Editions.
Features
Library (Unpaker)
- Full Pak Format Support: Supports Pak versions V0 through V11
- Compression: Supports multiple compression algorithms including Zlib, Gzip, Oodle, Zstd, and LZ4
- Encryption: AES-256 encryption support for pak indices and file data
- Reading: Extract files from existing pak archives
- Writing: Create new pak archives with customizable options
- Mount Points: Support for custom mount point paths
- Path Hash Seeds: Support for v10+ pak files with path hash seeds
Command-Line Interface (Unpaker.CLI)
- List: View contents of pak files
- Extract: Extract files from pak archives
- Create: Create new pak archives from directories
- Add: Add files to existing pak archives
- Info: Display detailed information about pak files
Desktop Application (Unpaker.Desktop)
- Modern Dark UI: Beautiful dark theme with GTA:VC-inspired accent colors
- File Management: View, add, remove, and extract files from pak archives
- Search: Real-time search filtering by file name or path
- Batch Operations: Extract multiple files or all files at once
- Pak Creation: Create new pak archives with customizable options:
- Version selection (V0-V11)
- Compression method selection (Zlib, Gzip, Oodle, Zstd, LZ4)
- AES-256 encryption support
- Custom mount points
- Detailed Information: View pak file metadata including version, compression, mount point, and encryption status
- Context Menu: Right-click support for quick file operations
Installation
Requirements
- .NET 8.0 SDK or later (for building from source)
- Windows (for desktop application)
Pre-built Binaries
Desktop Application
Download the latest release from GitHub Releases and extract Unpaker.Desktop.exe. The native Oodle library (oo2core_9_win64.dll) is included for Oodle compression support.
Command-Line Interface
Download the latest release from GitHub Releases and extract Unpaker.CLI.exe. The native Oodle library (oo2core_9_win64.dll) is included for Oodle compression support.
NuGet Package (Library)
Install the library via NuGet Package Manager or using the .NET CLI:
dotnet add package Unpaker
Or using Package Manager Console:
Install-Package Unpaker
Oodle Compression Support
To enable Oodle compression/decompression in your application, download the oo2core_9_win64.dll from the Oodle SDK and place it in your application's output directory (same folder as your executable). Oodle support requires .NET 8.0 or later.
Building from Source
# Clone the repository
git clone https://github.com/vaibhavpandeyvpz/unpaker.git
cd unpaker
# Build the solution
dotnet build
# Run the desktop application
cd Unpaker.Desktop
dotnet run
# Or build the CLI
cd Unpaker.CLI
dotnet run -- --help
Usage
Desktop Application
- Launch
Unpaker.Desktop.exe - Click Open to load an existing pak file
- Use the toolbar buttons to:
- New: Create a new pak archive
- Open: Open an existing pak file
- Save/Save As: Save changes to pak files
- Add: Add files to the pak
- Remove: Remove files from the pak
- Extract: Extract selected files
- Extract All: Extract all files
- Reload: Reload the current pak file
Command-Line Interface
# List contents of a pak file
unpaker list path/to/file.pak
# Extract all files
unpaker extract path/to/file.pak --output ./extracted/
# Extract specific files
unpaker extract path/to/file.pak --output ./extracted/ --files file1.txt file2.txt
# Create a new pak file with Zlib compression
unpaker create --output new.pak --input ./source/ --version V11 --compression Zlib
# Create a new pak file with Oodle compression
unpaker create --output new.pak --input ./source/ --version V11 --compression Oodle
# Add files to existing pak
unpaker add existing.pak --input ./newfiles/
# Get pak file information
unpaker info path/to/file.pak
Project Structure
unpaker/
├── Unpaker/ # Core library
├── Unpaker.CLI/ # Command-line interface
├── Unpaker.Desktop/ # WPF desktop application
└── Unpaker.Tests/ # Unit tests
Supported Games
- Grand Theft Auto: III - Definitive Edition
- Grand Theft Auto: Vice City - Definitive Edition
- Grand Theft Auto: San Andreas - Definitive Edition
Development
Running Tests
dotnet test
Code Structure
- Unpaker: Core library containing Pak reading/writing logic
- Unpaker.CLI: Command-line interface using System.CommandLine
- Unpaker.Desktop: WPF application with MVVM pattern
- Unpaker.Tests: Comprehensive unit tests including real pak file validation
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Author
Vaibhav Pandey (VPZ)
- Website: https://vaibhavpandey.com/
- YouTube: https://www.youtube.com/channel/UC5uV1PRvtnNj9P8VfqO93Pw
- GitHub: @vaibhavpandeyvpz
- Email: contact@vaibhavpandey.com
Acknowledgments
All game names and logos are property of their respective owners and are used for illustration purposes only.
Support
For issues, feature requests, or questions, please open an issue on GitHub Issues.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. 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. |
-
net6.0
- Ionic.Zlib.Core (>= 1.0.0)
- K4os.Compression.LZ4 (>= 1.3.8)
- ZstdSharp.Port (>= 0.8.1)
-
net7.0
- Ionic.Zlib.Core (>= 1.0.0)
- K4os.Compression.LZ4 (>= 1.3.8)
- ZstdSharp.Port (>= 0.8.1)
-
net8.0
- Ionic.Zlib.Core (>= 1.0.0)
- K4os.Compression.LZ4 (>= 1.3.8)
- Oodle.NET (>= 2.1.1)
- ZstdSharp.Port (>= 0.8.1)
-
net9.0
- Ionic.Zlib.Core (>= 1.0.0)
- K4os.Compression.LZ4 (>= 1.3.8)
- Oodle.NET (>= 2.1.1)
- ZstdSharp.Port (>= 0.8.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.