Skip to content

Releases: mralaminahamed/reclaim

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 27 Sep 10:34
2684f77

Behaviour changes — read before upgrading

  • Flatpak app caches are cleaned by default. ~/.var/app/<id>/cache used to need --flatpak because reclaim could not tell which flatpak apps were running. It can now, so a running app's cache is skipped and reported, like any other app's. --flatpak now covers only removing unused runtimes.
  • npm cache clean and uv cache clean moved from tier 0 to tier 1. New tier-0 units run first: npm cache verify and uv cache prune drop only entries nothing uses. A plain clean --apply still runs both.
  • Under --free and --auto, some caches are trimmed instead of wiped. The Go build cache, pip, npm's _cacache and thumbnails give up their least recently used files first, and the run stops once the target is met. Without a target, every cache goes whole as before.
  • --models no longer deletes your Hugging Face login. It used to remove all of ~/.cache/huggingface, including token and stored_tokens. It now takes only hub, xet, datasets and assets.
  • Sizes are now allocated disk space, not file length. Sparse files, hard links and cloned files no longer inflate the numbers. Space that is hard-linked from outside a cache is shown as "shared, not freed".

New

  • macOS binaries. This is the first release with darwin/amd64 and darwin/arm64 tarballs, plus .icns. They are unsigned; see the README for the xattr step.
  • macOS --system: the unified log (log erase --ttl) and Time Machine local snapshots (--timemachine, lossy). Also added: macOS idle-app detection, Homebrew Cask and Steam units.
  • Ollama models (--models --allow-lossy) are removed through ollama rm, naming each model the server lists. reclaim never deletes blobs under a live store.
  • Chromium and Electron apps: caches in every profile and in Partitions/* (Postman, Slack, VS Code and others). --site-data offers web apps' offline storage as lossy. An app holding SingletonLock keeps its caches.
  • Relocated caches are found. reclaim follows XDG_CACHE_HOME, HF_HOME, HF_HUB_CACHE and TORCH_HOME. A variable aimed at / or at your home folder is refused.
  • Idle projects: a vendor/ or dist/ directory is claimed only if git proves it is untracked and ignored. Directories marked with CACHEDIR.TAG are claimed too.

Safer deletion

  • Deletion now opens each directory relative to its parent and checks it is still the same one, so a directory swapped for a symlink mid-run is refused. It also never crosses into another filesystem or a bind mount.
  • Read-only trees such as Go's module cache are removed. Only directories you own are made writable, and their mode is restored if they stay.
  • Entries left in place on purpose (mount points, directories refilled mid-run) are listed under Skipped instead of failing the run.
  • Command units report the measured change in free space, marked with *, rather than an estimate.
  • The test suite runs in a sealed environment. It proved the old tests could reach real caches.

What's Changed

Full Changelog: v0.3.0...v0.4.0

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 06:59
4ded2b6

Behaviour changes — read before upgrading

  • The trash is no longer emptied by default. It used to run on every clean --apply as though it were a cache. It now needs --trash --allow-lossy.
  • --docker no longer removes stopped containers. A stopped container can hold state that exists nowhere else. They have their own flag, --docker-containers; the dry run names each container, and the apply removes exactly those ids.

New

  • reclaim index snapshots every filesystem (616k directories in 16s here; a refresh took 2.4s). analyze answers from an index under a day old: 0.3s where walking home took 2m41s. index show [DIR] and index cold [DIR] query it. It is never used for deleting.
  • analyze --apps lists desktop apps unused for 90+ days with the command that would remove each. Advisory only, and only on evidence (binary atime, snap/flatpak data dirs, GNOME Shell's record).
  • --obsolete (lossy): config left by removed-but-not-purged packages, rotated logs over 30 days old, directories of superseded JetBrains IDE versions.
  • --kernels also takes what removed kernels leave in /lib/modules, only for a version nothing still claims.
  • New units: Chrome's on-device AI model (--models), ~/.wp-cli/cache, ~/.yarn/berry/metadata.
  • macOS: safe to run, and useful for developer caches (Xcode, Homebrew, CocoaPods, SwiftPM). No darwin binaries yet; see #5.

Fixed

  • The dry run reported 0B for apt-get clean (it drops the package indexes too) and for the journal vacuum.
  • Under sudo, the index and the operations log went to /root; they now go to the invoking user and are handed back.
  • --discover could delete reclaim's own index.
  • The "Locked" section ignored --only, --exclude and missing flags.

What's Changed

Full Changelog: v0.2.1...v0.3.0

v0.2.1

Choose a tag to compare

@github-actions github-actions released this 06 Sep 06:35
1818554

What's Changed

  • fix: the release published no .rpm, and would have published an unfindable one by @mralaminahamed in #38

Full Changelog: v0.2.0...v0.2.1

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 06 Sep 06:29
0ae8f5b

What's Changed

Full Changelog: v0.1.2...v0.2.0

v0.1.2 — honest failure reporting for --system

Choose a tag to compare

@mralaminahamed mralaminahamed released this 03 Sep 02:49
84221d1

Running --system used to print warning: system-apt: exit status 1, then list the failed units under Reclaimable as though they had freed space. One of the three failed completely silently.

  • Root-requiring units declare it, and elevation is acquired once per run via sudo -v with the terminal attached — one visible password prompt instead of three invisible failures. Dry runs never ask.
  • A command's own output reaches its error, so you see sudo: a password is required rather than exit status 1.
  • Failed units get their own report section and are excluded from the freed total, in text and JSON.
  • The snap pipeline no longer exits 0 when every removal inside it failed.

Also untracks a 5 MB binary committed by accident in 62c32a8.

108 tests across 13 packages, race-clean.