AppJanitor
Finds the .tmp, .bak and Thumbs.db files quietly piling up in a folder tree.
Free right now — no account, no card
Preview
1 interface design, then a screenshot of it running. Drag, scroll or use the arrows.
Free while we’re in preview
Get AppJanitor
Finds the .tmp, .bak and Thumbs.db files quietly piling up in a folder tree.
The Mac button is for Apple Silicon. On an older Intel Mac, get this one instead.
One file, both ways. Double-click it for the window. Run the same file from a command prompt with arguments and it behaves as the command-line tool, because the engine is inside it. Nothing else to download and nothing to keep beside it.
Early preview. The window has been built and run, but not yet on a real Windows PC or Mac, so expect rough edges. The engine underneath it is fully tested.
- One file — no installer
- Runs on your machine, offline
- Source code published below
Free while in preview. It isn’t signed yet, so Windows or macOS will ask you to confirm the first time you open it. At launch, AppJanitor is included in every plan along with the rest of the range.
Point it at a tree, get a list
appjanitor scan ~/projects walks the tree and flags anything matching its junk globs (*.tmp, *.bak, *.log, *~, .DS_Store, Thumbs.db) or anything whose mtime is past --older-than 180d. Each hit prints with the reason it matched, so you can see the difference between junk-pattern:*.tmp and stale:212d old. Scan has no --apply. It cannot touch anything.
Add --empty-dirs and you also get directories with no files anywhere below them, counted separately since they reclaim nothing.
Nothing gets deleted
clean uses the same matching, and without --apply it prints the same report with a dry-run footer. With --apply, matched files are moved into the quarantine directory you name, keeping their path relative to the scan root. A wrong match is one mv from undone. Empty directories are the exception: they’re removed outright, deepest first, because there’s nothing in them to lose.
How it differs from its siblings
This is the ad-hoc one. Flags on the command line, one pass, no memory. CleanInstall is the version with saved policies and a permanent ledger.
Reading on the job itself
- How to find what an uninstaller left behind Take a record of the filesystem before you install, take another after you uninstall, and compare the two. ...
Advanced & technical details Command-line builds, source code, checksums and a recorded session — for developers and IT teams
A working CLI prototype of the cross-platform-safe half of the job: finds junk-pattern, stale, and empty-directory cleanup candidates and moves matches to a quarantine folder (never a hard delete). Registry/uninstall integration, startup control, and restore points need privileged OS-specific APIs and are on the roadmap.
Naming status
Working name only — brand verdict **CAUTION** (Medium). Collision: 'App janitor' phrase + Janitor software ecosystem. Usable only if formal clearance is clean; consider more distinctive mark.
What it draws on
Existing paid software whose best ideas shaped this program: Revo Uninstaller Pro, CCleaner Professional, IObit Software Updater Pro, Driver Easy Pro.
Command line
There is nothing extra to install. The program you download is the command-line tool as well: give it arguments instead of double-clicking it and it runs as one, with its output on your terminal. The standalone builds below are the same engine on its own, for machines where you would rather not ship a window at all.
AppJanitor - stale/junk cleanup candidate finder
Usage:
appjanitor scan <dir> [--older-than 180d] [--pattern "*.tmp,*.bak,..."] [--empty-dirs] [--json]
appjanitor clean <dir> --quarantine <qdir> [--older-than ...] [--pattern ...] [--empty-dirs] [--apply]
Commands:
scan Read-only. Walk <dir> and report cleanup candidates.
clean Move matched files into --quarantine (dry run unless --apply is given).
Matched empty directories are removed directly (--apply only).
Flags:
--older-than DUR Flag files with mtime older than DUR, e.g. 180d, 12h, 45m
--pattern LIST Comma-separated glob patterns matched against the base filename
(default: *.tmp,*.bak,*.log,*~,.DS_Store,Thumbs.db)
--empty-dirs Also report directories with no files anywhere in their subtree
--json (scan only) emit JSON instead of human-readable text
--quarantine DIR (clean, required) destination directory for quarantined files
--apply (clean only) actually move/remove matches; default is dry run
Run 'appjanitor <command> -h' for command-specific flag details.
Recorded from the shipped binary, not written by hand.
Source
Every file the program is built from:
console.go · console_test.go · guided.go · main.go
SHA-256 checksums · build instructions & scope notes · full build plan