Releases: tuanle96/devclean
Release list
devclean v0.9.0
devclean v0.9.0
This release gives the DevCleaner menu bar app a read-only Memory tab for the dev tooling holding RAM, and makes launch instant by restoring the last scan from a local cache.
Memory tab (read-only)
- A fourth tab reports the kernel's own memory-pressure level, an active+wired+compressed usage bar, and the restartable dev tooling currently holding RAM: JVM daemons, JavaScript runtimes, simulators, container VMs, language servers, and local databases.
- Rows lead with the owning project — derived from each process's working directory — and a chip naming what the runtime actually executes (
vite.js,Gradle daemon), so twenty identicalnodeprocesses stay tellable apart. Hovering a row reveals the PID and full working directory. - Footprint is
ri_phys_footprint, the figure Activity Monitor shows, pinned toRUSAGE_INFO_V4so a future SDK bump cannot silently blank the tab on older kernels. File cache is deliberately excluded from "used": counting reclaimable cache is how RAM cleaners invent work. - Strictly read-only by design: sampling runs only while the menu is open, and nothing is signaled, killed, or purged. Display stays in Swift; any future termination authority belongs in the Rust CLI with its own revalidation.
Instant launch from cached scans
- The last successful scan report persists to
~/Library/Application Support/Devclean/last-scan.jsonand is restored at launch, so reopening the app shows the previous results immediately instead of blocking every tab behind the first scan. - A background refresh still runs whenever the cache is older than 30 minutes, and a manual tab choice is no longer overridden when that scan completes.
- Cleanup safety is unchanged: the CLI revalidates every exact path before deletion, so a stale cached candidate can never be deleted.
Verification
Release gates cover Rust formatting, Clippy with warnings denied, MSRV 1.85, and cross-platform test suites; Swift strict format linting and the menu bar contract test suite, including new coverage for process classification, argv detail derivation, working-directory project naming, and the report-cache round-trip; and a signed, notarized, stapled universal macOS app published with checksums, SBOM, and provenance attestations.
devclean v0.8.0
devclean v0.8.0
This release adopts Liquid Glass in the DevCleaner menu bar app and lands a fully tested dependency refresh.
Liquid Glass on macOS 26
- The three floating confirmation cards (cleanup, hold purge, AI recommendations) render as Liquid Glass on macOS 26 and keep their material-and-stroke look on macOS 13–15.
- Standard controls already pick up the new appearance from the macOS 26 SDK build; banners, chips, and rows deliberately stay material per the floating-layer guidance.
Dependency refresh
toml1.1,rusqlite0.39,crossterm0.29,clap_mangen0.3,uuid1.23.5, plusactions/attest-build-provenancev4,actions/attest-sbomv4, andactions/setup-nodev6 in CI.- Cargo-workspace detection now parses manifests as TOML documents (
toml::Table), matching the toml 1.x API — a unit test caught the silent behavior change. - rusqlite stays below 0.40 on purpose: its libsqlite3-sys needs Rust 1.95 and would break the crate's MSRV of 1.85. Dependabot now documents and skips that upgrade until the MSRV policy moves.
Verification
Release gates cover Rust formatting, Clippy with warnings denied, MSRV 1.85, and cross-platform test suites; Swift strict format linting and the full menu bar contract test suite; and a signed, notarized, stapled universal macOS app published with checksums, SBOM, and provenance attestations.
devclean v0.7.0
devclean v0.7.0
This release makes the scanner meet developers where their code actually lives, and names every menu bar row after the project it belongs to.
Smarter scan roots
- Default-root discovery now checks existing
Dev,Developer,Projects,Code,src, workspace/repository, GitHub, Android Studio, and IntelliJ project conventions — without scanning the entire home directory. - Scan roots are canonicalized, and nested or duplicate roots collapse before traversal.
- The exact global-cache allowlist adds Gradle caches/distributions on every platform and Xcode DerivedData on macOS.
- macOS Settings shows the automatic locations actually present on disk and labels custom-root override semantics.
Project-first menu bar rows
- Every candidate, review, and hold row now leads with the owning project ("fastsoft-tg"), resolved from scanner-recognized workspace roots before falling back to the parent directory, which skips generic member folders like
services/orbackend/. - The artifact type moves to the icon tooltip, path suffix, and VoiceOver label; artifact age and hold expiry render as capsule chips beside the path, so titles never crowd or truncate.
Safety
- CoreSimulator, Android SDK/AVD, JetBrains Local History, Docker Desktop storage, and the Gradle user-home root remain outside the filesystem cleanup allowlist.
Verification
Release gates cover Rust formatting, Clippy with warnings denied, and cross-platform test suites; Swift strict format linting and the full menu bar contract test suite; and a signed, notarized, stapled universal macOS app published with checksums, SBOM, and provenance attestations.
devclean v0.6.0
devclean v0.6.0
This release teaches the CLI to explain disk history — not just measure it — and completes the Apple HIG pass for the DevCleaner menu bar app.
Analysis and workspaces
devclean analyzecorrelates a current read-only scan with aggregate local history to report stale categories, repeated growth, cleanup failures, and workspace concentration in table or JSON form. It never deletes anything.- Cargo, npm-workspaces, and Nx detection groups scan candidates under their nearest monorepo root and exposes additive workspace summaries in scan reports.
- Global-cache discovery falls back to
go env GOMODCACHEwhenGOMODCACHEis not set, accepting only absolute paths. - The local SQLite history schema is versioned with transactional migrations; legacy unversioned databases upgrade in place and newer unsupported schemas are rejected instead of misread.
macOS menu bar app
- Candidate lists are native Lists with keyboard row navigation, project names in row titles ("Rust target · VibeTG"), and content-sized viewports.
- Cleanup and safety-hold confirmations use horizontal Mac alert button rows with Cancel beside the primary action, drop the extra "Back" step, and move VoiceOver focus into each dialog as it opens.
- The Clean button states the selected size ("Clean 38.77 GB…"), "Delete All" moves into the Holds summary menu away from the window edge, and the Holds summary shows when the next hold expires.
- AI recommendations keep a single manual entry point beside Scan, and the monitoring banner sits on a neutral material background that respects the system accent color.
- The menu bar icon keeps one externaldrive silhouette across every state and pulses while busy on macOS 14+; tapping a background-scan notification activates DevCleaner.
- Scan-status copy drops scanner jargon, the disk capacity bar explains its remaining "other used" slice and reads as one VoiceOver element, and Settings labels use consistent capitalization.
Verification
Release gates cover Rust formatting, Clippy with warnings denied, and cross-platform test suites; Swift strict format linting and the full menu bar contract test suite; and a signed, notarized, stapled universal macOS app published with checksums, SBOM, and provenance attestations.
devclean v0.5.0
devclean v0.5.0
This release expands DevCleaner from a safe cleanup CLI into a local developer-disk toolkit while keeping deletion authority narrow and explicit.
New workflows
- Browse candidates in a read-only
devclean tui; it prints an exact cleanup command but never deletes. - Install, inspect, or remove a platform-native cleanup timer with
devclean schedule; installation requires explicit--yesauthority and supports a complete dry run. - Track aggregate scan and cleanup trends in a local SQLite database and render them with
devclean stats; candidate paths are never persisted. - Share repository policy through
.devclean.toml,devclean init, validated Git-backed config fetch, and marker-backed custom rules. - Use the VS Code status-bar companion for workspace scans, HTML reports, dry-run previews, and separately confirmed cleanup.
Ecosystem and automation
- Safe Python bytecode, test-environment, and project-local virtual-environment detection.
- Gradle/Kotlin, CMake, Zig, and custom Go module-cache support.
- Native filesystem watch mode with thresholds, scan intervals, and best-effort notifications.
- JSONL automation output for cleanup jobs.
Safety and architecture
clean --dry-runandclean --undomake preview and recovery first-class.- Custom rules require exact directory names and direct project markers, are rejected on unsafe path components, and are revalidated immediately before deletion.
- HTML is rendered through autoescaped templates.
- Rust CLI/measurement commands and Swift candidate, review, hold, settings, and menu-state components are split into focused modules.
Verification
Release gates cover Rust unit, integration, documentation, Clippy, MSRV, package, and live watch checks; Swift formatting, contract tests, app build, and codesign; and TypeScript build, tests, and type checking for the VS Code extension. Published macOS archives additionally require Developer ID signing, notarization, stapling, Gatekeeper acceptance, checksums, SBOM, and provenance attestations.
DevCleaner for VS Code v0.1.0
DevCleaner for VS Code v0.1.0
- Shows reclaimable workspace bytes in the status bar.
- Scans the active workspace and opens a path-explicit HTML report.
- Keeps dry-run preview separate from modal-confirmed cleanup.
- Invokes the local devclean executable directly without a shell.
Install the attached VSIX with:
code --install-extension devclean-vscode-0.1.0.vsix
The package is built from the source-traceable vscode-v0.1.0 tag.
devclean v0.4.1
devclean v0.4.1
This patch completes the first review-to-safe Learning Mode loop while preserving Rust as the only cleanup authority.
Learning Mode
- Scans at launch and every six hours.
- Measures active known artifacts independently of cleanup age/category filters.
- Suggests a scanner-owned rule for
.builddirectories directly besidePackage.swift. - Lets the user approve or revoke that exact SwiftPM build path from the menu bar.
- Keeps approved paths visible while they wait for the configured cleanup age and size thresholds.
- Promotes an eligible approved path to
build-outputonly after Rust revalidates the rule and Git guard. - Keeps up to 30 days and 256 local snapshots, detects recreation after cleanup, and learns
Always select/Never cleanfeedback.
Restorable safety holds
clean --quarantine-for 7dmoves validated artifacts into hidden adjacent holds.quarantine list,restore, andpurgemanage the private registry.- The UI states explicitly that holds retain disk usage until purge and refuses to overwrite a recreated original path.
Diagnostics and privacy
- Rotating structured local JSONL logs are always available from Settings.
- The protocol-based monitoring layer ships with NoOp/local/Sentry providers.
- Sentry is disabled without a configured DSN and explicit user consent.
- Remote product events contain aggregate buckets and error fingerprints only; paths, usernames, project names, file contents, screenshots, and view hierarchy are excluded.
Verification
Release gates cover Rust unit/integration/doc tests, Swift contract/learning/log tests, Clippy, MSRV, package verification, universal app build, Developer ID signing, Apple notarization, stapling, Gatekeeper acceptance, checksums, SBOM, and provenance attestations.
devclean v0.4.0
devclean v0.4.0
This release turns the native menu bar app into a local learning and observability loop while preserving Rust as the only cleanup authority.
Learning Mode
- Scans at launch and every six hours.
- Measures active known artifacts independently of cleanup age/category filters.
- Surfaces large unknown cache-like directories as review-only observations that cannot be cleaned.
- Keeps up to 30 days and 256 local snapshots, detects recreation after cleanup, and learns
Always select/Never cleanfeedback.
Restorable safety holds
clean --quarantine-for 7dmoves validated artifacts into hidden adjacent holds.quarantine list,restore, andpurgemanage the private registry.- The UI states explicitly that holds retain disk usage until purge and refuses to overwrite a recreated original path.
Diagnostics and privacy
- Rotating structured local JSONL logs are always available from Settings.
- The protocol-based monitoring layer ships with NoOp/local/Sentry providers.
- Sentry is disabled without a configured DSN and explicit user consent.
- Remote product events contain aggregate buckets and error fingerprints only; paths, usernames, project names, file contents, screenshots, and view hierarchy are excluded.
Verification
Release gates cover Rust unit/integration/doc tests, Swift contract/learning/log tests, Clippy, MSRV, package verification, universal app build, Developer ID signing, Apple notarization, stapling, Gatekeeper acceptance, checksums, SBOM, and provenance attestations.
devclean v0.3.1
devclean v0.3.1
This patch makes the native macOS menu bar app ready for frictionless public distribution while preserving the v0.3 safety model.
Trusted macOS distribution
- Signs the universal app and bundled Rust helper with Developer ID Application.
- Enables hardened runtime and Apple secure timestamps.
- Requires Apple notarization acceptance and staples the ticket before packaging.
- Verifies strict code signatures and Gatekeeper acceptance in the release workflow.
Safety
- Swift remains an unprivileged presentation client; Rust still performs all scan, revalidation, quarantine, and deletion work.
- Exact-path cleanup still aborts before deletion if any selected candidate is stale.
- Signing credentials live only in GitHub encrypted secrets and an ephemeral CI keychain.
Installation
The crates.io package remains devclean-cli; it installs the devclean executable. The notarized universal menu bar archive contains Devclean.app and requires macOS 13 or newer.
Download the archive for your platform, verify SHA256SUMS, and run gh attestation verify <archive> -R tuanle96/devclean.
devclean v0.3.0
devclean v0.3.0
This release adds a native SwiftUI macOS menu bar experience without moving any deletion authority out of the Rust safety engine.
macOS menu bar
- Shows free disk space and estimated reclaimable bytes from the menu bar.
- Previews and selects exact candidates with native SwiftUI controls.
- Provides settings for roots, age/size filters, and opt-in cache categories.
- Bundles a universal Rust helper inside
Devclean.app.
Safety and automation
- Adds repeatable
clean --only-path PATHselection for machine clients. - Performs a fresh Rust scan and aborts before deletion if any selected path is stale.
- Invokes the helper directly without a shell; GUI never enables tracked-file or Docker-system escape hatches.
- Adds Swift contract tests, macOS app CI, universal app packaging, checksums, SBOM, and provenance attestations.
Installation
The crates.io package remains devclean-cli; it installs the devclean executable. The menu bar archive contains Devclean.app and requires macOS 13 or newer.
Download the archive for your platform, verify SHA256SUMS, and run gh attestation verify <archive> -R tuanle96/devclean.