App Janitor

AppJanitor

Finds the .tmp, .bak and Thumbs.db files quietly piling up in a folder tree.

Free right now — no account, no card

Get AppJanitor free Windows & Mac · one file, nothing to install

Preview

1 interface design, then a screenshot of it running. Drag, scroll or use the arrows.

Interface design AppJanitor, 1 of 1
Screenshot AppJanitor running on Windows today

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

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