The most efficient way to pack files.
Highest compression-to-time ratio.
Designed for modern hardware.
Database-Level resiliency.
Easy to use, light, and small.
Pack Logo
Other downloads

Version 2 (latest version)

Windows64bit ↓
Linux64bit ↓
New
  • List: Use --list to explore a Pack file, and it will print a list of all files.
  • Partial Unpack: To unpack a specific file or folder in a Pack file, use --include.
  • Pro notes:
    • To list an specific folder, you can use --include together with --list.
    • You can use multiple --include to unpack or list in one go. It will use an optimized algorithm to process each item just once.
    • The --include command also accepts an item's ID. Get ID from --list.
Improved
  • Pack is now even faster, at near 5% in Pack and Unpack.
  • A bug that caused invalid files in some systems, is now fixed.
  • Handling of invalid and duplicate file names in export has improved significantly.
  • Many minor changes to improve the readability of the code.
Examples of new features:
Get a list of all items
pack -i ./test.pack --list
Unpack a file inside a Pack file
pack -i ./test.pack --include=/a/file.txt
Use and ID instead of path for include
pack -i ./test.pack --include=5
Unpack multiple files and folders
pack -i ./test.pack --include=/a/file.txt --include=/a/folder/

Pack

Introduction

Pack is a container format that can support files and raw data, and it is made to be safe, fast, and reliable for years to come.
It is designed to be the most efficient way to pack any amount of data and improve the user experience to fit the future. The author proposes a fresh solution based on well-formed standards to significantly improve performance while improving features like random access, update, security, and user experience.
It is free to use, and the source code is available with a permissive license, ensuring freedom from patent concerns.
You can get the latest version from https://pack.ac/ .

Reason

It's been decades since any new proper work was done for a container format, and the author felt that there was a need for a new design considering new generations of hardware and advancements in algorithms.
Most popular solutions like Zip, gzip, tar, RAR, or 7-Zip are near or more than three decades old. While holding value for such a long time (in the computer world) is testimony to their greatness, the work is far from done.
To demonstrate that, here are some numbers comparing the output size and speed as CompressedSpeed.
Packing a copy of a folder containing more than 81K files and around 1.25 GB on a test machine:
ZIP: 253 MB, 146 s = 1 tar.gz: 214 MB, 28.5 s ====== 6 tar: 1345 MB, 4.7 s ====== 6 RAR: 235 MB, 27.5 s ====== 6 7z: 135 MB, 54.2 s ===== 5 Pack: 194 MB, 1.3 s ================================================================================================================================================= 145
Unpack speed, random access, memory use, and other factors are also improved similarly.
Pack is smart and configures itself as needed; there are not many dials to play with.
Beside numbers, the Pack format is based on the universal and arguably one of the most safe and stable file formats, SQLite3, and compression is based on Zstandard, the leading standard algorithm in the field. These design choices promise reliable storage, transactional updates, exceptional speed, low resource usage, smartness, and simplicity.

Future

In the near future, stabilizing will be the most important task. Locking and encryption, graphical interface, OS integration, and development tools and libraries are planned and under development. Builds for many more platforms will be available over time.
For the time being, you are encouraged to try Pack for yourself and share results and notes with others, including author by emailing, o at pack.ac.
If you want to know more about design, plans, and other notes, you can check out Notes.
You can find the source code for a deeper study at Source.

Conclusion

The field of data compression has been well-lit with great work in the past decades, and Pack tries to continue this path as the next step and proposes the next universal choice in the field.
The author is aware of unfathomable speedups and design decisions. Readers are welcome to test, read the code, and engage in discussions.
Everyone is encouraged to use Pack to have a more efficient solution and build on it for an improved future.


A gift to anyone passionate about data, especially Phil Katz, D. Richard Hipp, Yann Collet, and me.

Footnotes

  • CompressedSpeed = (InputSize / OutputSize) * (InputSize / Speed). Materialized compression speed.
  • Linux source code repository at the time of writing.
  • Development machine with a two-year-old CPU and NVMe disk, using Windows with the NTFS file system. The differences are even greater on Linux using ext4. Value holds on an old HDD and one-core CPU.
  • All corresponding official programs were used in an out-of-the-box configuration at the time of writing in a warm state.
  • Numbers are for demonstration; they will vary for different inputs and machines; test for yourself.
Support
Documentation

Documentation

Quick Mode

You can use CLI program very easily in Quick Mode.
For packing some files
pack ./test/
And for unpacking
pack ./test.pack

Normal Mode

Pack has many other abilities that you can try using Normal Mode.
Use pack as
pack [Options]
Options are :
--input, -i set the input path from the system; it can be a file or a folder. If extension is .pack, it will be unpacked; otherwise, it will be packed.
--output, -o Set the output path from the system; it can be a file or a folder. If not set, a file name is chosen based on the input name. If the chosen name exists, an incremental number will be added to the name.
--pack Enforces packing even for a .pack file.
--list, -l List all items in a pack file.
--include Specifying a file or folder in a Pack file to unpack or list. It can be set to a path or an ID. It is allowed to be used more than once. It will use an optimized algorithm to process each item just once.
--overwrite, -w Overwrite the output if it exists.
--press=[hard] Ask for a harder press, using more time to save more storage. It is useful for cases where you pack once and unpack several times.
--log=[no, debug] Logging more information on the active task, including time. Or turn logging off.
--help Prints a quick help and list of parameters.
Source

Source

It is written in the Pascal language, a well-stabilized standard language with compatibility promises for decades. Using the FreePascal compiler and the Lazarus IDE for free and easy development.
The code is written to be seen as pseudocode. In place of need, comments are written to help.
To compile the code, here are the steps to follow:
Using Lazarus:
  • Open SCL packages SCL.lpk and SCLLibraries.lpk
  • Open Pack packages PackPackage.lpk and PackDraft0Package.lpk
  • Open Pack project CLIProject.lpi
  • Build