App Janitor

CleanInstall

Cleanup policies saved in a file, plus a ledger of every file ever quarantined.

Free right now — no account, no card

Get CleanInstall 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 CleanInstall, 1 of 1
Screenshot CleanInstall running on Windows today

Free while we’re in preview

Get CleanInstall

Cleanup policies saved in a file, plus a ledger of every file ever quarantined.

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, CleanInstall is included in every plan along with the rest of the range.

The question this answers

“What has this thing ever touched on this machine, and when?”

AppJanitor cleans up once and forgets. CleanInstall keeps named policies in a JSON file, each with its own target directory, glob patterns and age threshold, and appends one JSON line to a ledger for every single file it quarantines, across every run, forever.

cleaninstall ledger --ledger ledger.jsonl then totals files and bytes ever quarantined, broken down per policy. Months later, that’s a real answer instead of a shrug.

How the append actually works

The ledger opens with O_APPEND O_CREATE and never O_TRUNC. Running clean against a second policy in a completely separate process, against the same ledger file, adds lines after the existing ones. Nothing earlier is rewritten, reordered or dropped.

The rest

scan is read-only and reports every current match with the reason it matched. clean is a dry run until --apply, and even then it moves files into quarantine rather than deleting them. The matching engine is AppJanitor’s, reused as-is.

Deep uninstall, registry keys, startup items and restore points aren’t here. They need privileged Windows APIs with no portable equivalent.

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 config-driven cleanup engine: the same policy matching as the sibling AppJanitor, plus a cumulative JSON-lines audit ledger recording every quarantined file across every run. Files are always quarantined, never hard-deleted. A full uninstall-tracking database is still on the roadmap.

Naming status

Working name only — brand verdict **CAUTION** (Medium). Collision: Clean Install. Prefer a more distinctive coined brand.

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.

CleanInstall - config-driven cleanup policies with a cumulative audit ledger

Usage:
  cleaninstall scan --policy <policies.json> <policy-name> [--json]
  cleaninstall clean --policy <policies.json> <policy-name> --quarantine <qdir> --ledger <ledger.jsonl> [--apply]
  cleaninstall ledger --ledger <ledger.jsonl> [--policy <name>] [--json]

Commands:
  scan    Read-only. Report what the named policy currently matches.
  clean   Move matches into --quarantine and append a record per file to
          --ledger (dry run unless --apply is given).
  ledger  Read-only. Summarize everything ever recorded in --ledger,
          across every clean run against every policy.

Policy file format (JSON):
  {
    "policies": [
      {
        "name": "temp-files",
        "target_dir": "/path/to/dir",
        "patterns": ["*.tmp", "*.bak"],
        "older_than": "0d"
      }
    ]
  }
  older_than uses the same digits+d/h/m suffix convention as AppJanitor;
  "0d" (or omitted) means no age filter -- only patterns are matched.

Run 'cleaninstall <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