{"id":18009849,"url":"https://github.com/kekyo/powerplayzipper","last_synced_at":"2025-06-27T10:34:37.415Z","repository":{"id":84090171,"uuid":"383073906","full_name":"kekyo/PowerPlayZipper","owner":"kekyo","description":"An implementation of Lightning-Fast Zip file compression/decompression library on .NET.","archived":false,"fork":false,"pushed_at":"2021-07-24T07:37:38.000Z","size":521,"stargazers_count":16,"open_issues_count":2,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-06-04T02:42:38.059Z","etag":null,"topics":["dotnet","fast","unzip","zip"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kekyo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-07-05T08:47:33.000Z","updated_at":"2025-03-01T18:59:25.000Z","dependencies_parsed_at":null,"dependency_job_id":"be425c14-3c01-49ab-a1bb-4d94796e22c6","html_url":"https://github.com/kekyo/PowerPlayZipper","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/kekyo/PowerPlayZipper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kekyo%2FPowerPlayZipper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kekyo%2FPowerPlayZipper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kekyo%2FPowerPlayZipper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kekyo%2FPowerPlayZipper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kekyo","download_url":"https://codeload.github.com/kekyo/PowerPlayZipper/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kekyo%2FPowerPlayZipper/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262239864,"owners_count":23280410,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dotnet","fast","unzip","zip"],"created_at":"2024-10-30T02:11:15.994Z","updated_at":"2025-06-27T10:34:37.377Z","avatar_url":"https://github.com/kekyo.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PowerPlay Zipper\n\n![PowerPlay Zipper](Images/PowerPlayZipper.120.png)\n\n[![Project Status: Concept – Minimal or no implementation has been done yet, or the repository is only intended to be a limited example, demo, or proof-of-concept.](https://www.repostatus.org/badges/latest/concept.svg)](https://www.repostatus.org/#concept)\n\n|Status|Badge|\n|:---|:---|\n|NuGet (Library)|[![NuGet PowerPlayZipper](https://img.shields.io/nuget/v/PowerPlayZipper.svg?style=flat)](https://www.nuget.org/packages/PowerPlayZipper)|\n|NuGet (.NET CLI tool)|[![NuGet ppzip](https://img.shields.io/nuget/v/ppzip.svg?style=flat)](https://www.nuget.org/packages/ppzip)|\n|CI|[![PowerPlayZipper CI build (main)](https://github.com/kekyo/PowerPlayZipper/workflows/.NET/badge.svg?branch=main)](https://github.com/kekyo/PowerPlayZipper/actions)|\n\n# What's this?\n\nPowerPlay Zipper is an implementation of `Lightning-Fast` Zip file compression/decompression library on .NET.\nSimple word for strategy: **Maximize multi-core parallel file compression/decompression**.\n\n* 3x and over faster unzipping execution than `SharpZipLib.FastZip` / `System.IO.Compression.ZipFile`.\n\nYes, we can easy replace PowerPlay Zipper from another zip manipulation library.\n\n## Sample unzipping (Decompression)\n\n```csharp\n// Install NuGet \"PowerPlayZipper\" package.\nusing PowerPlayZipper;\n\npublic async Task YourUnzipTaskWithVeryLargeZipFile(\n    string zipFilePath, string storeDirectoryPath)\n{\n    Unzipper unzipper = new Unzipper();\n    ProcessedResults result = await unzipper.UnzipAsync(\n        zipFilePath, storeDirectoryPath);\n\n    Console.WriteLine(result);\n}\n```\n\n## TODO: Sample zipping (Compression)\n\n```csharp\n// Install NuGet \"PowerPlayZipper\" package.\nusing PowerPlayZipper;\n\npublic async Task YourZipTaskWithManyFiles(\n    string zipFilePath, string targetDirectoryPath)\n{\n    Zipper zipper = new Zipper();\n    ProcessedResults result = await zipper.ZipAsync(\n        zipFilePath, targetDirectoryPath);\n\n    Console.WriteLine(result);\n}\n```\n\n## .NET CLI tool\n\n```sh\n# Install ppzip command from NuGet.\n\u003e dotnet tool install --global ppzip\n\n# Unzip a zip file.\n\u003e ppzip -u MixedRealityToolkit-master.zip\nMixedRealityToolkit-master.zip: Unzipping ... Done.\n  Elapsed    : 00:00:00.9144408\n  Files      : 2491 [2724.07files/sec]\n  Compressed : 164.35MiB [179.73MiB/sec]\n  Expanded   : 261.63MiB [286.11MiB/sec]\n  Ratio      : 159.19%\n  Parallel   : 36 [36]\n```\n\n# Unzipping performance\n\nUsing these zip files on Benchmark .NET:\n\n* [GitHub zipped dotnet/docs repo ~300MB (Contains many standard size text files)](https://github.com/dotnet/docs/archive/7814398e1e1b5bd7262f1932b743e9a30caef2c5.zip)\n* [GitHub zipped Mixed Reality Toolkit repo ~160MB (Contains large files)](https://github.com/microsoft/MixedRealityToolkit/archive/b63b40b9a4bd4e350f35986d450dd5393c6e58a0.zip)\n* PowerPlayZipper 0.0.47 `Unzipper.UnzipAsync()`\n* SharpZipLib 1.3.2 `FastZip.ExtractZip()`\n* System.IO.Compression \n\nWindows 10 on Core i9-9980XE (36 cores):\n\n```\nBenchmarkDotNet=v0.13.0, OS=Windows 10.0.19043.1083 (21H1/May2021Update)\nIntel Core i9-9980XE CPU 3.00GHz, 1 CPU, 36 logical and 18 physical cores\n.NET SDK=5.0.104\n  [Host]   : .NET 5.0.7 (5.0.721.25508), X64 RyuJIT\n  .NET 5.0 : .NET 5.0.7 (5.0.721.25508), X64 RyuJIT\n\nJob=.NET 5.0  Runtime=.NET 5.0  InvocationCount=1  \nUnrollFactor=1  \n```\n\nUbuntu 20.04 on Core i9-10900K (20 cores):\n\n```\nBenchmarkDotNet=v0.13.0, OS=ubuntu 20.04\nIntel Core i9-10900K CPU 3.70GHz, 1 CPU, 20 logical and 10 physical cores\n.NET SDK=5.0.301\n  [Host]   : .NET 5.0.7 (5.0.721.25508), X64 RyuJIT\n  .NET 5.0 : .NET 5.0.7 (5.0.721.25508), X64 RyuJIT\n\nJob=.NET 5.0  Runtime=.NET 5.0  InvocationCount=1  \nUnrollFactor=1  \n```\n\n## dotnet/docs repo\n\n* Ubuntu 20.04: 3.1x faster than `System.IO.Compression`.\n* Windows 10 19043: 2.2x faster than `SharpZipLib`.\n\n| Ubuntu 20.04 | Mean | Error | StdDev |\n|:-----|-------:|---------:|---------:|\n| PowerPlayZipper | 679.6 ms | 13.10 ms | 14.56 ms |\n| SharpZipLib | 4.105 s | 0.0129 s | 0.0101 s |\n| System.IO.Compression | 2.117 s | 0.0099 s | 0.0093 s |\n\n| Windows 10 19043 | Mean | Error | StdDev |\n|:-----|-------:|---------:|---------:|\n| PowerPlayZipper | 7.936 s | 0.1811 s | 0.5225 s |\n| SharpZipLib | 17.80 s | 0.122 s | 0.108 s |\n| System.IO.Compression | 18.35 s | 0.092 s | 0.086 s |\n\n## Mixed Reality Toolkit repo\n\n* Ubuntu 20.04: 2.3x faster than `System.IO.Compression`.\n* Windows 10 19043: 2.5x faster than `System.IO.Compression`.\n\n| Ubuntu 20.04 | Mean | Error | StdDev |\n|:-----|-------:|---------:|---------:|\n| PowerPlayZipper | 333.5 ms | 6.65 ms | 19.38 ms |\n| SharpZipLib | 1.998 s | 0.0053 s | 0.0042 s |\n| System.IO.Compression | 788.0 ms | 2.25 ms | 1.99 ms |\n\n| Windows 10 19043 | Mean | Error | StdDev |\n|:-----|-------:|---------:|---------:|\n| PowerPlayZipper | 965.6 ms | 48.51 ms | 140.7 ms |\n| SharpZipLib | 4.294 s | 0.0824 s | 0.1072 s |\n| System.IO.Compression | 2.381 s | 0.0460 s | 0.0615 s |\n\n# Supported platforms\n\nPowerPlay Zipper is made with neutral/independent any reference. See [NuGet dependency list.](https://www.nuget.org/packages/PowerPlayZipper)\n\n* .NET 5.0 or higher.\n* .NET Core 3.1, 3.0, 2.1, 2.0 and 1.0.\n* .NET Standard 2.1, 2.0, 1.6 and 1.3.\n  * `netstandard13` and `netstandard16` referred `System.Threading.Thread 4.0.0`.\n* .NET Framework 4.8, 4.6.2, 4.5, 4.0, 3.5 and 2.0.\n  * `net40` referred `Microsoft.Bcl.Async 1.0.168`.\n\n# Migration layer\n\nIf you use `ICSharpCode.SharpZipLib.FastZip` or `System.IO.Compression.ZipFile`,\nPowerPlay Zipper produces similar interface for `FastZip` and `ZipFile` classes.\n\n```csharp\n// use PowerPlayZipper migration layer.\nusing PowerPlayZipper.Migration;\n//using ICSharpCode.SharpZipLib.Zip;\n\nvar fastZip = new FastZip();\nfastZip.ExtractZip(\"zipfile.zip\", \"C:\\output\", \"\");\n```\n\n```csharp\n// use PowerPlayZipper migration layer.\nusing PowerPlayZipper.Migration;\n//using System.IO.Compression;\n\nZipFile.ExtractToDirectory(\"zipfile.zip\", \"C:\\output\");\n```\n\n# Limitation\n\n* Will not support these zip file features:\n  * Only supported `deflate` compression algorithm, will not support any others.\n  * Any encryption and decryption feature.\n  * Continuous streaming unzip. PowerPlayZipper depends seekable file accessing.\n  * Supported only synchronized interface between `net20` and `net35` platforms.\n\n# License\n\nUnder Apache v2.\n\n# Histroy\n\n* 0.0.51:\n  * Enabled ability of long path names on Windows (.NET Framework/.NET Standard)\n  * Completely separated accessor for file system manipulation by an interface `IUnzipperTraits`.\n  * Added migration layer interfaces similar `SharpZipLib.FastZip` and `System.IO.Compression.ZipFile`.\n  * Implemented generation 4 improvement with lock-free structure (WIP).\n* 0.0.32:\n  * Rewrite new generation 3 unzip code made faster to 3x (dotnet/docs).\n* 0.0.29:\n  * Added .NET CLI tool package named `ppzip`.\n* 0.0.27:\n  * Minor bug fixed.\n* 0.0.12:\n  * First NuGet package released.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkekyo%2Fpowerplayzipper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkekyo%2Fpowerplayzipper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkekyo%2Fpowerplayzipper/lists"}