0.4.0

Released 2026-09-07

Added

  • viv cache: prune, clean, size, gc of unreferenced archives (#20)
  • Limits on extraction: size caps and entry counts (#21)
  • Windows support (#22)
  • Offline mode and --prefer-dist-cache behaviour (#23)
  • Bitbucket OAuth token exchange and remaining auth.json types (#24)
  • Cache scanned classmaps per archive for -o installs (#25)
  • Release engineering: binaries, cargo-binstall, checksums (#26)
  • tar.bz2 dists (#27)
  • Small ponytail ceilings: sh proxy marker, adopt confirmation, content-hash slash escaping, pointer temp names (#29)
  • Small drop-in differences: target-dir removal, stale sh proxies, empty vendor/bin, absolute vendor-dir depth, summary wording (#37)
  • Honour preferred-install: source packages record installation-source source and keep a git checkout (#43)
  • Plugin adapters: phpcodesniffer-composer-installer, tbachert/spi, phpstan/extension-installer (#52)
  • Plugin adapter: cweagans/composer-patches (#53)
  • Git source checkouts: match Composer's .git/config (#59)
  • Partial update of a transitively-required package fails: not found in any version (#79)

Fixed

  • Prune empty parent directories after removing a package (#56)
  • Classmap differs from Composer on choks/password-policy-bundle (#71)
  • macOS CI: snapshot filters must match the canonical /private/var temp path (#72)
  • parse_constraint panics on multi-byte input (semver-php slices at a non-char boundary) (#73)

Tooling

  • Fuzz the hand-written parsers with cargo-fuzz (#44)
  • Publish test coverage from CI with cargo-llvm-cov (#45)
  • Add cargo-machete to make check (#46)
  • Silence cargo-deny licence warnings by allowing them explicitly (#47)
  • Deny rustdoc warnings in make check and CI (#48)
  • Profile viv install and record where the time goes (#54)
  • Profile viv update and viv require once the resolver lands (#55)
  • compat sweep: keep the last lines of composer's output for skipped rows (#64)