v1.0.0 — first release
A multithreaded, reproducible, drop-in replacement for Gradle's Zip task.
What it does
- Drop-in for
Zip— extendsAbstractArchiveTask, so the fullCopySpecDSL
(from/into/include/exclude/rename/filter/duplicatesStrategy) works
unchanged. Swappingtype: Zipfortype: ParallelZipis a one-word change. - Parallel compression across all cores, or
STORE(skip DEFLATE entirely) for
archives that are already jar/binary-heavy. - Byte-for-byte reproducible archives — fixed write order means output is stable
across thread counts and runs, sidestepping the reproducibility blocker that kept
gradle/gradle#2774 from shipping. - ZIP64 support for archives beyond 4 GiB or 65,535 entries.
- Streaming for arbitrarily large individual entries (tested past 2 GiB), with
memory bounded to a fraction of the heap. - Native libdeflate acceleration on
linux-x64/windows-x64— measured 2.0–3.7×
faster than the JDK'sDeflateron real archives, with a safe pure-Java fallback on
every other platform/arch or if the native build ever fails to load. - Zero runtime dependencies.
Proof, not just claims
Benchmarked against the official binary distributions of 11 popular open-source Java
projects (ZooKeeper, Cassandra, Kafka, Groovy, Solr, HBase, Spark, Gradle, Flink,
SonarQube, Hadoop) — full numbers and methodology in
BENCHMARKS.md.
Usage
plugins {
id 'io.github.kukis13.parallel-zip' version '1.0.0'
}
tasks.register('dist', io.github.kukis13.parallelzip.ParallelZip) {
from 'build/staging'
archiveFileName = 'dist.zip'
store = false // true = STORE everything (fastest, ~larger)
threads = 12 // default: available processors
}See the README for full docs.
Also published to the Gradle Plugin Portal (pending first-time approval).