Releases: thoughtf00l/stackdust
Release list
Stackdust 1.1.0
The stackdust CLI now ships inside the app: install it into your PATH — plus an agent skill for AI coding tools — straight from the Help menu. dev and clean now check the known cache and build locations in seconds by default; pass your project directories for a full scan. Per-app log folders can now be reclaimed individually.
Stackdust 1.0.8
Themes! Pick Stackdust, Glass, Classic, Ocean, Sunset, or Violet in Settings (Cmd+,), edit any palette live, set a custom window background, or go full glass — with Liquid Glass chrome on macOS 26. The chart draws vivid colors over dark backgrounds, deeper ones in light mode, and real gaps between segments. Also: a Stop button for the background rescan, no automatic rescan for snapshots younger than 10 minutes, and the app icon on the start screen.
Stackdust 1.0.7
DiscFree is now Stackdust, and this release makes it self-sufficient: the app checks for updates itself (app menu → Check for Updates…) and installs them in place via Sparkle. Downloads now ship as a drag-to-Applications DMG. New chart themes with a settings pane (⌘,): pick a palette, edit colors live, or build your own — including custom window backgrounds. Settings and the Full Disk Access grant carry over from DiscFree. Homebrew users: the cask is now thoughtf00l/tap/stackdust.
DiscFree 1.0.6
What's new
- Free space, finally visible. Volume rows on the start screen show "free of total", and the result footer shows the scanned volume's free space (the purgeable-inclusive figure Finder shows), refreshed after every scan and cleanup — with a tooltip explaining that space returns only once the Trash is emptied.
- "Unreadable" split honestly in two. Directories the scanner skips now report as two separate figures: genuinely unreadable (permissions, SIP) and "in iCloud" — content evicted by Optimize Mac Storage that DiscFree deliberately does not download. Scan JSON gains an additive
cloud_evictednode flag andcloud_evicted_count;unreadable_countno longer includes evicted items. - Lifetime "reclaimed" counter. The app remembers how much it has moved to the Trash across sessions and shows it as a subtle footer chip and a start-screen caption.
- Xcode archives listed per build. Every
.xcarchiveis its own item (with its build name), so one stale archive can go while the rest stay — custom archive locations included.
Note: the snapshot cache format changed; the first launch after updating starts a fresh scan instead of restoring the previous one.
Install
brew tap thoughtf00l/tap
brew trust thoughtf00l/tap # one-time, Homebrew 6+
brew install --cask discfreeSHA-256: 1eae269de0ec406dfd4e19bf6026fbf3d157f1a08e69c2da2e4416ebf6f1e691
DiscFree 1.0.5
What's new
- Device support symbols, honestly. iOS/watchOS/tvOS DeviceSupport moved out of the "safe" Xcode build products into its own
deviceSupportcategory (costs time): Xcode re-copies these only from a connected device with that OS version, so they are listed per device — "iPhone 13 Pro — iOS 15.0" instead of one opaque multi-GB folder. - Less clutter. Entries below 0.1% of the current view are grouped into a single gray "Other" wedge and panel row (with count and combined size). This also fixes visible gaps in rings that contain thousands of tiny files.
- Consistent highlighting. With "Highlight reclaimable" on, the contents panel rows now tint by their reclaimable share exactly like the chart wedges.
Install
brew tap thoughtf00l/tap
brew trust thoughtf00l/tap # one-time, Homebrew 6+
brew install --cask discfreeSHA-256: ba3bac90318d2716e7563e4fb45a4f0eb75be01366177c4af173ec3658b141b7
DiscFree 1.0.4
What's new
- Reclaim window. A category-first list of everything reclaimable, opened with the Reclaim… toolbar button: each category shows its total, a risk badge (Safe / Costs time / Loses data) and a plain-language explanation of what deleting actually costs; items have checkboxes (simulators listed per device, by name) and the selection moves to the Trash in one confirmed step.
- Beyond developer junk. The catalog now also finds per-app caches, logs, local iOS device backups, Adobe Premiere/After Effects media caches, and Android artifacts (AVDs, SDK system images, Gradle wrapper, Kotlin/Native toolchains).
- Smarter chart highlight. The display-mode tabs became a single "Highlight reclaimable" switch, and folders whose junk sits deeper than the visible rings now glow proportionally instead of rendering an all-gray chart.
- App icon by @thoughtf00l.
Fixed
- Whole-volume scans no longer double-count user data reachable through APFS firmlinks (
/Usersvs/System/Volumes/Data/Users). - The live chart during a scan now shows all top-level sectors instead of a few.
- Xcode archives moved to their own
xcodeArchivescategory (they hold dSYMs and cannot be regenerated), soclean --category xcodeBuildnever selects them;Podsdirectories are no longer flagged (often committed to git);__pycache__noise is gone.
CLI
dev --json/clean --jsonitems now carry"risk": "safe" | "costs_time" | "loses_state"; AGENTS.md tells agents to cleanloses_stateitems only after explicit human confirmation. Humandevoutput is grouped by category.
Install
brew tap thoughtf00l/tap
brew trust thoughtf00l/tap # one-time, Homebrew 6+
brew install --cask discfreeSHA-256: 325220db7a70990a8a589ef715121d281d41b377a6bb394e8cb193cf653778f6
Troubleshooting the upgrade
A July 2026 Homebrew change (installed-cask receipts moved to JSON) can make brew upgrade fail for third-party tap casks with It seems there is already an App at '/Applications/DiscFree.app'. If you hit that, recover with a one-time reinstall, which rewrites the receipt:
brew reinstall --cask --force discfreeYour settings and the Full Disk Access grant survive — the bundle identity and signature are unchanged.
DiscFree 1.0.3
What's new
- Browse while scanning. The first scan no longer blocks the app: the regular browsing interface opens almost immediately and the chart grows as the scan proceeds. Navigation works on the live tree — detail follows wherever you drill — and a thin status strip shows progress with a Cancel button. Move to Trash unlocks once the scan finishes (partial sizes are lower bounds).
- No more hangs on iCloud-evicted files. Scanning a folder with cloud-evicted documents (
.pages,.epub, anything offloaded by "Optimize Mac Storage") used to stall the scan while macOS downloaded them. The scanner now fails fast on such items and counts them as occupying no local disk space — which is what they do.
Install
brew tap thoughtf00l/tap
brew trust thoughtf00l/tap # one-time, Homebrew 6+
brew install --cask discfreeSHA-256: 4ab0caf28f653d23d14d710bd9db217d4691f3e9645aa748e20624f2f00b38ba
DiscFree 1.0.2
Fixes the Full Disk Access banner button: the System Settings deep link used a misspelled URL scheme, so macOS reported there was no application to open it. The button now opens System Settings directly on the Full Disk Access pane.
Install / upgrade:
brew tap thoughtf00l/tap
brew trust thoughtf00l/tap # one-time, Homebrew 6+
brew install --cask discfree # or: brew upgrade --cask discfreeDiscFree 1.0.1
Signed with a stable Apple Development identity (previously ad-hoc).
macOS ties privacy permissions (TCC) to the signing identity, so from this version onward Full Disk Access persists across updates. Upgrading from 1.0.0 changes the identity once — re-grant Full Disk Access after this update if you had it enabled.
Install / upgrade:
brew tap thoughtf00l/tap
brew trust thoughtf00l/tap # one-time, Homebrew 6+
brew install --cask discfree # or: brew upgrade --cask discfreeDiscFree 1.0.0
First public release.
Install via Homebrew:
brew tap thoughtf00l/tap
brew trust thoughtf00l/tap # Homebrew 6+ requires trusting third-party taps once
brew install --cask discfreeThe cask clears macOS quarantine on install, so the app opens without a Gatekeeper prompt.
Or download DiscFree.zip below, unzip into /Applications, then either allow the app in System Settings → Privacy & Security → Open Anyway, or run:
xattr -d com.apple.quarantine /Applications/DiscFree.appScanning protected folders (~/Library, Desktop, Documents) requires Full Disk Access for the app.