Skip to content

v1.0.0 — first release

Choose a tag to compare

@Kukis13 Kukis13 released this 01 Jul 17:04
· 34 commits to main since this release

A multithreaded, reproducible, drop-in replacement for Gradle's Zip task.

What it does

  • Drop-in for Zip — extends AbstractArchiveTask, so the full CopySpec DSL
    (from/into/include/exclude/rename/filter/duplicatesStrategy) works
    unchanged. Swapping type: Zip for type: ParallelZip is 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's Deflater on 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).