Repository navigation
Releases: mralaminahamed/reclaim
Releases · mralaminahamed/reclaim
Release list
v0.4.0
Behaviour changes — read before upgrading
- Flatpak app caches are cleaned by default.
~/.var/app/<id>/cacheused to need--flatpakbecause 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.--flatpaknow covers only removing unused runtimes. npm cache cleananduv cache cleanmoved from tier 0 to tier 1. New tier-0 units run first:npm cache verifyanduv cache prunedrop only entries nothing uses. A plainclean --applystill runs both.- Under
--freeand--auto, some caches are trimmed instead of wiped. The Go build cache, pip, npm's_cacacheand 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. --modelsno longer deletes your Hugging Face login. It used to remove all of~/.cache/huggingface, includingtokenandstored_tokens. It now takes onlyhub,xet,datasetsandassets.- 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/amd64anddarwin/arm64tarballs, plus.icns. They are unsigned; see the README for thexattrstep. - 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 throughollama 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-dataoffers web apps' offline storage as lossy. An app holdingSingletonLockkeeps its caches. - Relocated caches are found. reclaim follows
XDG_CACHE_HOME,HF_HOME,HF_HUB_CACHEandTORCH_HOME. A variable aimed at/or at your home folder is refused. - Idle projects: a
vendor/ordist/directory is claimed only if git proves it is untracked and ignored. Directories marked withCACHEDIR.TAGare 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
- fix: remove read-only trees such as Go's module cache by @mralaminahamed in #48
- Sealed test harness, anchored removal, honest sizes by @mralaminahamed in #49
- Idle-project scan: nested projects, git proof, CACHEDIR.TAG by @mralaminahamed in #50
- Chromium/Electron caches: profiles, partitions, site data, SingletonLock by @mralaminahamed in #51
- Trim before wipe, and oldest files first under --free by @mralaminahamed in #52
- Cache and model paths follow XDG_CACHE_HOME, HF_HOME, HF_HUB_CACHE, TORCH_HOME by @mralaminahamed in #53
- fix: --models keeps the Hugging Face login by @mralaminahamed in #55
- ollama models, removed through ollama rm by @mralaminahamed in #56
- Running flatpak apps park their own cache by @mralaminahamed in #57
Full Changelog: v0.3.0...v0.4.0
v0.3.0
Behaviour changes — read before upgrading
- The trash is no longer emptied by default. It used to run on every
clean --applyas though it were a cache. It now needs--trash --allow-lossy. --dockerno 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 indexsnapshots every filesystem (616k directories in 16s here; a refresh took 2.4s).analyzeanswers from an index under a day old: 0.3s where walking home took 2m41s.index show [DIR]andindex cold [DIR]query it. It is never used for deleting.analyze --appslists 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.--kernelsalso 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. --discovercould delete reclaim's own index.- The "Locked" section ignored
--only,--excludeand missing flags.
What's Changed
- fix: status printed nothing at all inside a container by @mralaminahamed in #39
- feat: macOS support for the parts that can be got right by @mralaminahamed in #40
- feat: obsolete files, kernel residue, honest system sizes by @mralaminahamed in #42
- feat: Chrome on-device model, wp-cli and yarn metadata, old JetBrains dirs by @mralaminahamed in #43
- feat: analyze --apps reports applications unused for 90+ days by @mralaminahamed in #44
- feat/index by @mralaminahamed in #45
- fix: four bugs found by a real full cleanup run by @mralaminahamed in #46
- fix: under sudo, the operations log goes to the invoking user by @mralaminahamed in #47
Full Changelog: v0.2.1...v0.3.0
v0.2.1
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
What's Changed
- fix: re-rate discovered caches by size, and offer what is held back by @mralaminahamed in #21
- feat: load unit definitions from files by @mralaminahamed in #22
- feat: reclaim unused flatpak runtimes and app caches by @mralaminahamed in #24
- feat: purge superseded kernels, and let a command report what it frees by @mralaminahamed in #25
- feat: reclaim old crash dumps, bounded by age by @mralaminahamed in #26
- feat: name the model caches, and prune the dead half for free by @mralaminahamed in #29
- feat: teach scan the rest of the common project shapes by @mralaminahamed in #30
- feat: shell completion for bash, zsh and fish by @mralaminahamed in #31
- feat: read defaults from a config file, but only ones that narrow by @mralaminahamed in #32
- feat: --below, and systemd units, instead of a watch daemon by @mralaminahamed in #33
- feat: record what was removed, not just which unit ran by @mralaminahamed in #34
- feat: report stale installers, and never delete them by @mralaminahamed in #35
- feat: support every Linux distribution, and install like one by @mralaminahamed in #36
- docs: reorganise the README around what the tool knows, not when it was added by @mralaminahamed in #37
Full Changelog: v0.1.2...v0.2.0
v0.1.2 — honest failure reporting for --system
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 -vwith 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 requiredrather thanexit 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.