Repository navigation
Prune 3.0.0
Added
Disk Map
- Choose any local drive; several NTFS drives are scanned under one administrator prompt. The fast scan needs no prompt when Prune already runs as administrator, and offers a one-click "Restart Prune as administrator".
- Tree view shows size on disk (Allocated) beside size; hard-linked files are counted once; the scan reports totals so they can be checked against the drive. Modified dates come from the MFT and are sortable.
- Excluded folders and file types are honoured by the fast scan too.
- Search by text,
*/?wildcard or/regex/over the Tree and File views, with matches marked on the map. Export the view as CSV and the map as PNG. - Tree rows and map blocks highlight each other; right-click gains Properties and Exclude this folder.
- Save, reopen, delete and compare Disk Map scans.
- The Disk Map remembers the last scan of each drive. A finished fast scan or folder walk is saved on its own (the latest two per drive, never touching scans you saved by hand), and the Disk Map opens on it at once, marked "Scanned 3 hours ago", with Fast scan and Walk folders one click away. Nothing scans by itself, and moving files to Quarantine stays off until you scan again. Each saved scan is the folder tree plus the biggest files, gzipped: a few MB, about 25 MB for a drive with a million folders (measured). A partial scan is never kept, since it would make the next comparison look like everything shrank. Settings -> General has a switch (on by default) and offers to delete the saved ones when you turn it off.
- What grew since the last scan. Above the map: the drive's total change and the five folders that grew most (new folders included, anything under 1 MB left out), each opening in the map. It uses the same comparison as Compare saved scans and warns when either scan was partial, the drive changed size, or one was a fast scan and the other a folder walk. Collapsible, and it stays collapsed.
- The folder walk now runs to completion, shows results as it goes and has no time limit.
Deep Clean
- "Overwrite files before deleting" (1 or 3 passes, off by default) for Delete now and an uninstall's permanent delete; a Shred files… tool for files and folders, with confirmation and protected-path guards. Overwriting is not reliable on SSDs, and the setting says so.
- Free-space wipe: any local drive, 1 zero pass or 3 random passes.
- Locked files can be deleted at the next restart.
- A
prune-clicommand line (list,preview,clean,--json), shipped asprune-cli.cmdnext to Prune.exe. - A scheduled clean that runs while Prune is closed. Settings -> Cleanup has an opt-in, off-by-default switch, "Also run when Prune is closed", under the schedule (installed app on Windows only). It adds one Task Scheduler task,
Prune\Scheduled clean, for your account only: run only when you are logged on, no elevation, no stored password. The task runsprune-cli.cmd clean --preset recommended --reportat the schedule's time (no second schedule to set), so it skips anything that loses data and keeps your exclusions, protected paths and Quarantine setting. The switch reads the real task from Windows, the in-app scheduler stands down while the task exists, changing the schedule updates the task, and turning it off or uninstalling Prune deletes it. The Dashboard and Settings show one line, "Last automatic clean: 3 hours ago, moved 1.2 GB, freed 0 B", and the space really freed joins the lifetime total once per run.prune-clinow reads the app's own settings and Quarantine folder when run from an install (it used a different folder before, so it ignored your exclusions) and gainsclean --report. - Start Prune when I sign in to Windows, minimised to the tray. Settings -> General has an opt-in, off-by-default switch and a "Start minimized to the tray" choice. It writes one per-user Run value,
Prune, holding the quoted path of the installed Prune.exe and, if chosen,--start-minimized(nothing else; refused in a development build), and reads the real entry back from the registry, including when Task Manager has switched it off. A minimised start goes to the tray when "Minimize to tray" is on and to the taskbar when it is off or the tray icon does not appear, so the window is never lost. Prune now runs one copy at a time: opening it again shows the running window. When "Always run as administrator" is also on, a warning says Windows will not start it silently. Turning the switch off, or uninstalling Prune, removes the entry. - Right-click in File Explorer, and drop a program onto Prune. Settings -> General has an opt-in, off-by-default switch, "Add Prune to the right-click menu". It adds four per-user menu entries (no administrator rights): "Shred with Prune" on files and folders, and "Find in Prune (uninstall)" on programs and shortcuts, each running the installed Prune.exe with one fixed option and the file's path (nothing else; refused in a development build). The captions follow Prune's language, the switch shows what the registry really holds, and turning it off or uninstalling Prune removes every entry it made and nothing else. A right-click never does anything by itself: Shred opens the Shred dialog with the path filled in and still asks you to confirm, and Find looks the program up (a shortcut is followed to its target) and opens the ordinary uninstall dialog, or offers Forced uninstall when nothing installed matches. Opening Prune this way while it is running shows the running window. You can also drop a program (.exe) or shortcut (.lnk) on the Applications screen to find it the same way.
- Preview lists each rule's biggest files, and the Delete-now confirmation names the biggest items.
- Custom locations: add your own paths to Deep Clean. Import a cleaner definition file (.xml); the import reports exactly what it skipped.
Uninstaller
- A Safe / Moderate / Advanced leftover scan in the uninstall dialog, remembered between uninstalls. Leftovers are tiered certain / likely / possible; Windows, Microsoft components and other installed programs' folders are never offered.
- Scheduled-task leftovers can be removed, with their XML saved first.
- Forced uninstall for software that isn't listed.
- Install with monitoring… records an install so uninstalling it later is exact. Hunter identifies a program: drag its small crosshair onto any window and let go.
- Quarantine gains Backups (restore registry and task backups) and History tabs. Browser extensions have a Copy page address button, since Prune cannot remove them itself: paste the address into that browser and remove the extension there. (Prune deliberately never starts a browser; launching one with profile arguments made Microsoft Defender flag it as
Behavior:Win32/WebBrowserCredAccess.E2, and a test now guards against it.) - Fixed: program names with an apostrophe broke the leftover scan.
- Icons are there when the window opens. Program and Store icons and the Store list used to be worked out again on every launch (about 10 seconds here: a Store scan that measures every package folder, a search for each program's main executable, a scan of browser extensions) and only once Applications was opened. The finished results are now kept beside settings.json (
icons-programs.json,icons-packages.json,store-apps.json) and the first ask of a launch is answered from them at once, 61 ms here instead of 10.6 s, while the real answer is made behind them and swapped in (the screen asks once more 15 seconds after launch, so a program installed since gets its icon without a restart). The very first launch has nothing saved, so about 20 seconds after launch, once the window's first load is over and one at a time, Prune makes and saves them. A failed or empty scan never overwrites a good saved list, and an app removed through Prune cannot be brought back by a scan that began before the removal. - The program list follows changes made outside Prune. Installing or removing something in Windows, or finishing an installer, never reached an open window: nothing refetched on focus and the screens stay mounted, so only a restart or a removal made in Prune updated the list. Coming back to the window after being away at least 15 seconds now reads the program list and sizes, and has the backend re-scan the Store apps behind the list it holds (read again 12 seconds later, when that scan has landed). A quick alt-tab does nothing.
- Fixed: a Store app you had just removed stayed in the Applications list, and the Uninstall button waited several seconds before doing anything. The list of Store apps was kept for the whole session and never told about the removal, and the removal first re-scanned every Store package (measuring each folder) only to look up one. The removed app now leaves the list at once, removal asks Windows about just that package (0.8 s instead of 7.4 s here), and the list is re-read every five minutes so an app removed from Windows Settings stops showing too.
Cleaner rules
- 16 new cleaner rules, grounded in a live scan against a real third-party reference tool (265 cleaner options, each invoked as its own process so deletes could be attributed precisely) before being written. Covers Brave/Chrome/Edge sync data, Chrome's on-device AI models, Discord cookies/history, VS Code local file history, Vim history, Office recent-docs, legacy Internet Explorer cookies/history/logs, and four Explorer registry traces (typed paths/dialog MRU, Run history, shellbags, recent documents). Deliberately skipped: anything already covered by an existing rule, anything needing a directory-whole-match capability Prune doesn't have yet, and every
claude.*option, since that's real conversation history, not a general-purpose cache. - 20 more Deep Clean rules, found by reading what other cleaning tools cover: Firefox cookies, form history, open tabs and crash reports; the cache of several Firefox-based browsers and an email client; the recent-file lists of Paint, WordPad and Windows Media Player (and its cache); two file-utility tools' history; a remote-access tool's logs and connection history; an FTP client's recent servers; and Windows' program launch history (UserAssist) and the key Registry Editor reopens at. Every location was checked against a real reference implementation and each rule was run through the real engine (a planted fixture was cleaned, backed up and gone), and all of it is translated into the 39 other languages. The Firefox cookie rule uses the same cookie action as Chrome, which already reads Firefox's
moz_cookiestable when a keep list is set. - Exclusions can name registry keys. Settings -> Cleanup takes a registry key (
HKCUSoftwareVendor, in any spelling) in the same field as folders and file types. A key excluded there, everything under it and every value inside it is never offered as a leftover, and the review says how many were left out. The same folder and key exclusions now also apply to a forced uninstall, whose scan ignored them before. prune-cli programslists the installed programs (the same list as the Applications screen), with--match "Microso*"for a whole-name match using*and?(case is ignored, and a part of a name with no wildcard matches nothing),--install-location,--uninstall-command,--store-appsand--json. It changes nothing and says so when the list cannot be read.- Startup lists more of what Windows actually runs. Added the policy-enforced
PoliciesExplorerRunkeys (per user and all users) and the 32-bit RunOnce key. Policy entries are read-only and say why: Windows keeps no on/off record for them, so a switch would have written to the wrong place. - The leftover scan reads more of the machine.
SharedDLLsreference counts (offered when the file sits in the program's own folder, or when it matches by name and the file is gone, never while the DLL is still on disk); Windows Firewall rules for a program in its own folder (and, in Advanced, by name once the program is gone); msconfig's records of startup entries it switched off; Event Log sources whose message file is gone (Advanced); and the policy Run and legacyRunServices/RunServicesOncekeys. Their containers stay protected: only the one value or subkey is ever offered. - "Clean as administrator" for rules that need it. A locked file no longer forces a full admin relaunch of the app. Deep Clean now shows a targeted elevation button only for the specific rules that hit a permissions wall, running just those through a one-shot elevated helper process instead.
Dashboard
- Clean recommended, in one step. A card on the Dashboard cleans the Deep Clean rules marked recommended (never one that loses data) using the removal mode you chose in Settings. It opens with Deep Clean's remembered scan ("last measured") or, if there is none, measures first, then always asks with the total and the destination before anything moves; Delete now is styled as the danger it is. It shows progress, and its result keeps Deep Clean's honesty: Moved to Quarantine is not Freed. It shares the remembered scan with Deep Clean, so a clean in one settles the rows in the other.
- "Prune has freed 12.4 GB since 3 Mar 2026." A quiet lifetime total under that card, kept by the backend in a small
stats.jsonbeside settings. It counts only space that is really back: Delete now, Delete permanently after an uninstall, Shred, and a Quarantine batch once it is deleted for good (by hand, Empty Quarantine, or the retention window and size cap). A move into Quarantine or the Recycle Bin counts nothing, so nothing is counted twice, and the line says so. A damaged file reads as zero instead of failing a clean. - Low disk space warning. When a local drive has less free space than a chosen share of its size, the Dashboard shows a banner naming the drive and what is free, with buttons to Deep Clean and Disk Map. Settings, General has a small select: Off, 5%, 10% (the default) or 15%. A volume under 8 GB is never watched (recovery partitions are full by design) and a drive with 100 GB or more free is never flagged, so 10% of a 4 TB disk does not nag. While Prune sits in the tray it also raises at most one native notification per drive per day (and none while its window is the one in front). It reads free space with one
statfsper drive every five minutes; the drive list comes from one PowerShell query an hour. - Undo on the toast after a move to Quarantine. Deep Clean (Quarantine mode) and Clean recommended, an uninstall's or batch uninstall's leftovers, Disk Map's "Move to quarantine" and the Duplicates screen now end with a toast that has an Undo button. It restores through the same API as the Quarantine screen, stays 15 seconds (held while hovered or keyboard-focused), is a real button for Tab, Enter and Space, and reports the result: put back, put back in part, no longer in Quarantine, or why it failed. After an Undo, Deep Clean's rows and remembered scan go back to how they read before the clean. Not offered after Delete now, the Recycle Bin or Delete permanently, which keep nothing to restore. The toast only fades, without sliding, when Windows asks for reduced motion.
What's new
- A one-time "What's new" notice after an update. The first time Prune opens on a new feature release (3.0, not 3.0.1) it shows six cards with what is new and where it lives, most with a "Show me" button that goes there. It waits until the window is actually visible (not hidden in the tray), never opens over another dialog, and is not shown on a fresh install. Got it, Escape or a click outside records the version in settings, so it does not return; Settings -> About has a "What's new in this version" button that opens it again without recording anything.
Changed
- Hunter is a draggable crosshair, and no longer watches the keyboard. It used to run a 30-second PowerShell script that polled the key and pointer state under a click-catching overlay, which is exactly what antivirus reads as a keylogger. Now Prune minimizes and opens a small always-on-top crosshair; you drag it onto any window and let go. Prune reads the pointer once, at the drop, hides the crosshair, and asks Windows which window is at that one point. Dropping on the desktop or taskbar, on a window of an administrator program Prune cannot read, or on Prune itself each get an explanation; Esc or the crosshair's cross cancels. A test now fails if the key- or pointer-polling calls come back.
- Opt-in "Always run as administrator" (Settings, General, off by default). It sets Windows' own per-program "Run this program as administrator" flag for this copy of Prune, so the fast Disk Map scan, machine-wide leftovers and scheduled tasks need no extra prompts. The help text lists what it costs: a UAC prompt on every start, no drag-and-drop from a normal Explorer window, no silent start at sign-in, and full rights for every action. It takes effect from the next start (with a button to restart now) and warns if Prune also starts with Windows. Turning it off removes only that flag and leaves any other compatibility flags alone.
- The sidebar is icons only until you point at it. It rests at 72px and widens over the page, with a short transition, when the pointer enters it or keyboard focus lands in it, then folds back. It widens over the content rather than pushing it, so no screen re-lays-out as you pass the mouse across. Icons never move while it opens. This replaces the old behaviour where the labelled sidebar appeared only in windows 1100px or wider.
- Deep Clean scans automatically instead of waiting for Preview. Opening the screen now starts the scan immediately; Preview still exists for re-scanning after changing settings, but the scan-then-clean two-step for a first look is gone. (Once a scan has been remembered, opening the screen no longer starts one; see below.)
- Deep Clean scans once, remembers it, and then just cleans. The last complete scan is kept across restarts, so the screen opens already measured, with "Last measured 3 hours ago" beside Rescan, and Clean works straight from it with no scan first. The confirmation says the sizes are from the last scan; Clean still measures each rule again as it runs and reports what actually happened. Only the sizes are kept (not file lists or paths), and a remembered scan is ignored and a new one made when your exclusions, the recent-files window, custom locations, imported cleaners, the rule list or the app version have changed since. Rescan always measures again and refreshes it. A rule's biggest-files list needs a fresh scan, and says so.
- Deep Clean no longer rescans after every clean. The rows are brought up to date from what the clean reported: a rule that was emptied reads 0 B, one with locked files keeps what is left, and a rule where what remains cannot be worked out (a browser database edited in place, a profile search that stopped short) reads "Cleaned — rescan to measure" instead of a guess. The same goes for "Clean as administrator". The default rules are also no longer ticked again on the rows you just cleaned.
Fixed
- The sidebar highlight no longer stutters while a screen is opening. It slides as a compositor transform instead of a layout property, so it keeps gliding when the page is busy (measured: with the page frozen for 700 ms right after a click, the old highlight sat still and then jumped; the new one moved through intermediate positions and finished), and the click now builds the new screen as an interruptible background transition while the highlight starts at once. Alignment with the row is unchanged: 0.008 device pixels or better at 100%, 125%, 150% and 175% display scaling.
- The sidebar's blue highlight and edge line slide to the item you click. They had been fading in place since the 150%-display-scaling fix. They are now one element positioned by arithmetic from the row sizes instead of by measuring rectangles, which is what had drifted at fractional scaling; checked in Chromium at 100%, 125%, 150% and 175% to 0.000 device pixels. The sidebar's own expand-on-hover also now uses an ease-in-out curve: the first one covered most of its distance in a single frame and read as a snap.
- Prune opens quickly and no longer pins the CPU for its first minute. At launch the backend ran six background jobs at once (program icons, versions, install dates, Store apps, Store icons and a walk of every install folder, about 125 GB and 100,000 files here) plus a handful of housekeeping tasks that each start a process, all on top of the window's own first load. Now only the install-folder sizes the Dashboard needs are measured, and they are remembered between launches (
folder-sizes.jsonbeside settings): a day-old figure is shown at once and measured again about 20 seconds after launch, so the walk is no longer on the window's first seconds. The icons, versions, install dates, Store apps and Store icons are computed only when Applications is first opened (and shared when asked for at once), the upkeep (leftover sweep, Task Scheduler and sign-in checks, Quarantine limits) runs once, one after another, 20 seconds after launch, and the missed-schedule check 5 seconds after. Measured on this PC, backend process only: in the first 10 seconds, when the window opens, 9.6 CPU-seconds before and 0.1 to 0.3 after (8.5 on the very first launch, which has nothing remembered yet). Over the first 45 seconds, 23.0 before and 0.2 on a repeat launch; the first launch of a day still does its re-measure, after the 20-second mark. - The app no longer freezes while Deep Clean scans or cleans. The scan and the clean walked cache folders with synchronous file calls inside the main process, so while a browser's or a game launcher's shader cache, or Temp, was being worked through (hundreds of thousands of files) the window, the tray and every request stopped answering; "Clean recommended" from the Dashboard, the tray's Quick Clean and the in-app scheduled clean did the same. They now run on a separate worker thread and the main process only relays what it reports, with the same events, the same Stop (a clean still finishes the rule it is in and starts no other) and the same totals; the lifetime total is still written by the main process alone. Measured on folders of small files: scanning 400,000 stopped the main thread for 43.2 seconds in one piece, and cleaning 200,000 for 17.8 seconds in three pieces (longest 15.1 s); it is now never stopped for more than 14 ms. The scan also finishes sooner (28 s instead of 43 s); the clean takes about as long.
- Notifications leave, and no longer fight the cursor. Warnings and errors used to stay on screen until dismissed, and the app raises plenty of them (a partial clean, locked files), so they piled up. Warnings now last 12 seconds and errors 20; hovering or tabbing to one still holds it. A notification that appeared under a resting mouse (they appear exactly where the Clean button is) counted as "hovered" and was held for as long as the mouse stayed put; only real movement over it holds it now. A new notification also ignores the pointer for its first third of a second, so a second click aimed at the page no longer lands on its Undo or dismiss button, and its entrance no longer scales a blurred card past the cursor. Notifications also sit above the bottom action bars now, instead of on top of the Clean button right after a clean.
- The installer can close an administrator Prune. Reinstalling while Prune ran as administrator showed "press OK to close it", and OK did nothing, because Windows won't let a normal program end an elevated one. The installer and uninstaller now leave a small flag file in Prune's data folder and the running app quits itself within a second. (This applies from the next update: the version already installed does not know to look for the flag, so close it by hand once.)
- Dropdown lists are readable. The open list of a dropdown (the automation schedule's "How often", for one) was light text on a white popup in the dark theme. Every dropdown now draws an opaque list in the current theme's colours.
- Settings text no longer sits in a narrow column. Descriptions in Settings were capped near 62 characters, leaving a narrow block on a wide window; they now use the same width as the other screens' descriptions.
- Disk Map's fast scan works on drives with millions of files. The scan result was one JSON string, and with the added size-on-disk and modified fields a large drive passed V8's ~512 MB string limit ("Invalid string length"). Every folder is still listed, but each keeps only its 200 largest files; the rest appear as one "N smaller items" row with exact totals, and file-type totals stay exact for the whole drive. On very large drives, search finds only files that are not folded. A drive too large even so says so plainly instead of showing a raw error.
- "Restart Prune as administrator" is offered only once Prune has confirmed it is not already elevated.
- Prune no longer sometimes opens in English. Two causes. The screen painted English until the settings request came back and stayed English if that request failed (the backend still starting); the last language is now remembered locally, as the theme is, and used until settings answer. And settings were saved by writing the file in place with no queue, so a read landing mid-save saw a half-written file, fell back to English defaults, and the next save could write those defaults over your real choices; saves are now queued and written atomically, which also stops two overlapping saves from losing one of the changes.
- Minimize, maximize and close stay aligned with the title bar when you zoom (Ctrl+minus, Ctrl+plus, Ctrl+scroll). Windows draws those buttons at a fixed height that knew nothing about the app's own zoom, so any zoom other than 100% left them off-centre against the bar.
- The 16 new cleaner rules now have names and descriptions in all 39 languages instead of showing English.
- Deep Clean's Recent Items rule no longer deletes Quick Access pins. The rule was a bare folder-exists delete that happened to sweep up the same jump-list file File Explorer uses to remember pinned Quick Access folders. The shared delete path now supports excluding specific filenames by name, and Recent Items uses it.
- Stopping Deep Clean mid-run no longer wipes the saved selection. Stop now leaves whatever was checked intact and reports "stopped" rather than quietly resetting the screen to its defaults.
- The nav rail's active-page mark no longer drifts from its icon at fractional display scaling (confirmed at 150%). The mark was a Framer Motion shared-layout animation computing its own position from measured pixels, which could desync from its statically-laid-out sibling under a non-integer DPR; replaced with a plain opacity toggle that can't drift.
- The "scan to see results" hint no longer points at a screen reader element that's already gone once the automatic scan has finished.
- Deep Clean no longer tells an administrator to run as administrator. Folders Windows refuses to list even when elevated (Defender's, owned by SYSTEM and protected by tamper protection) kept showing "needs administrator access" and a "Clean as administrator" button. When Prune is already elevated they now read "protected by Windows", with no button.