Skip to content

Releases: dannyblaker/densezip

densezip v0.1.5

Choose a tag to compare

@github-actions github-actions released this 12 Jul 11:48

Full Changelog: v0.1.4...v0.1.5

v0.1.4 — a genuinely useful help page

Choose a tag to compare

@github-actions github-actions released this 12 Jul 11:10

dnz -h now actually helps:

  • Examples section covering the common flows — archiving a folder, mixing files and directories, --progress, --no-cm, extract/verify/list, and dnz update.
  • Recursion is explicit: dnz a documents that directories are added recursively.
  • Visible aliases: the command list shows a [aliases: add] and x [aliases: extract].
  • Every argument is documented, and the one-line about states the tool's philosophy: smallest possible output, speed deliberately sacrificed.
  • dnz a archive.dnz with nothing to add is now a proper usage error at parse time.

No format or compression changes — archives are fully compatible.

Update with dnz update (v0.1.1+) or by re-running the install one-liner.

v0.1.3 — progress bar fits narrow terminals

Choose a tag to compare

@github-actions github-actions released this 12 Jul 11:05

Fixes the --progress bar leaving a trail of lines on narrow terminals:

  • The bar line was padded to a fixed 90 columns, so terminals narrower than that wrapped every redraw onto a new line. Each frame is now sized to the actual terminal width (re-checked live, so resizing mid-run works too).
  • On narrow terminals the bar segment shrinks first, keeping percent, elapsed, and ETA visible down to very small widths.
  • Falls back to 80 columns when stderr is not a terminal.

No format or compression changes — archives are fully compatible. Update with dnz update.

Full Changelog: v0.1.2...v0.1.3

v0.1.2 — progress bar with ETA

Choose a tag to compare

@github-actions github-actions released this 12 Jul 10:41

Long packs no longer run silently:

  • New --progress flag (works on dnz a, x, and t) — renders a live bar on stderr with phase labels (planning / compressing / verifying / extracting), percent, elapsed time, and an ETA.
  • The ETA is honest about backend speeds: progress is counted in weighted byte-units, with the slow context-mixing backend reporting incrementally every 64 KiB from its bit loops, so the bar moves smoothly through the slow tail instead of rushing to 90% and stalling. A sliding 10-second rate window adapts the ETA as the backend mix changes.
  • Off by default — output is unchanged unless you pass --progress.

No format or compression changes — the instrumentation preserves byte order, so output is bit-identical to v0.1.1. Update with dnz update.

Full Changelog: v0.1.1...v0.1.2

v0.1.1 — built-in self-update

Choose a tag to compare

@github-actions github-actions released this 12 Jul 10:19

dnz can now update itself:

  • New dnz update command — checks GitHub for the latest release and, if you're behind, downloads it (checksum-verified) and replaces the installed binary in place. --force reinstalls even when already current.
  • Source builds are protected: if the running binary came from cargo build or cargo install, dnz update refuses and prints the right rebuild command instead of overwriting it.
  • On Windows the running dnz.exe is renamed aside first (Windows locks running executables), with rollback if the install fails.
  • README gains an Updating section: dnz update, re-running the install one-liner, version pinning via DNZ_VERSION, and source-build updates.

No format or compression changes — archives are fully compatible.

Full Changelog: v0.1.0...v0.1.1

v0.1.0 — initial release

Choose a tag to compare

@dannyblaker dannyblaker released this 12 Jul 07:48

The first release of densezip: an archiver whose only goal is the smallest possible output — smaller than gzip -9, xz -9e, zstd --ultra -22, and 7z -mx=9 on real-world files. Speed and memory are explicitly sacrificed for ratio. The CLI command is dnz and archives use the .dnz extension.

Three stacked ideas (see the whitepaper for the full treatment):

  • Recompression — embedded deflate streams (PDF, PNG, docx/xlsx, jar, gz, …) are losslessly unpacked with preflate and recompressed with far stronger codecs; JPEGs get the same treatment via lepton. Everything is reconstructed bit-exactly.
  • A context-mixing compressor (dzcm) — a clean-room Rust implementation in the PAQ tradition: orders 0–8, word/sparse/record models, ISSE chain, logistic mixing, APM stages. Beats xz -9e by 13–24% on the Silesia corpus.
  • Backend racing — every stream is compressed with zstd, brotli, LZMA, and dzcm in parallel; the smallest round-trip-verified output wins, with store as the floor so output never meaningfully expands.

Won all 20 benchmark files against the best of gzip/bzip2/xz/zstd/7z per file (see BENCHMARKS.md).

Correctness first: every transform is render-verified at pack time, every backend output is decompressed and compared, and the finished archive is read back and verified against per-file hashes. dnz t re-verifies at any time.

Prebuilt binaries for Linux x86_64/arm64, macOS Intel/Apple Silicon, and Windows x86_64 — or install with the one-liners in the README.

The format is young (v0.1) and may still change between versions — don't use .dnz as your only copy of anything yet.